如果单元格内容已经通过,则 vba 下一次迭代

Posted

技术标签:

【中文标题】如果单元格内容已经通过,则 vba 下一次迭代【英文标题】:vba next iteration if cell content already passed 【发布时间】:2020-06-17 06:44:55 【问题描述】:

所以按照我的循环表的代码,连接到 sql server 并发送表的数据,我还有一个小约束: 我逐行、逐个单元地发送 5400 行和 13 列数据(实际上并没有那么慢!)但我需要在某个单元格上设置条件:如果我已经发送了单元格的内容(例如:客户端号码已经发送到数据库中)我不想插入两次,所以转到下一次迭代。 这是我的循环的简化版本:

nrow = 1

While My_range.Offset(nrow).Value <> ""  'continue if cell's not empty

'connect to the db and create a command that send the data

Set mobjCmd = New ADODB.Command
        With mobjCmd
        
            .ActiveConnection = mobjConn
            .CommandText = "INSERT_PRODUCT"
            .CommandType = adCmdStoredProc
            .CommandTimeout = 0

            'append the cell of the second row, first column in the db in the Client_id column  in my SQL table
 
            .Parameters.Append .CreateParameter("@Client_id", adChar, adParamInput, 255, Worksheets("My_Sheet").Range("A1").Offset(nrow, 0).Value)

            .Execute

Wend

基本上我想过这样的事情:

If ... then GoTo NextIteration

End if

NextIteration: my_next_iteration

但是如何设置 i/o "..." 以便如果它看到它已经发送的 client_id 就进入下一个迭代。

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

感谢@Spencer Barnes 的帮助。 Countif 函数是个好主意。另一种方法也是直接将存储过程修改为 SQL。如果您的数据是干净的,您甚至可以使用 UPDATE 语句(如果存在 ... UPDATE)

【讨论】:

【参考方案2】:

我现在遇到过几次这个问题,并且倾向于在每个循环上使用Worksheetfunction.countif 来检查是否有任何相同数字的实例出现在它的上方/下方。

在你的情况下,这看起来像;

If WorksheetFunction.Countif(Range(Cells(1, MyRange.Column), Cells(nrow, MyRange.Column)), MyRange.Offset(nrow).Value) > 0 Then GoTo NextIteration

【讨论】:

以上是关于如果单元格内容已经通过,则 vba 下一次迭代的主要内容,如果未能解决你的问题,请参考以下文章

vba中如何将单元格内容强制转换为文本类型?

vba中怎么用代码将单元格内容转换为文本类型?

VBA将单元格内容分配为公式而不是其结果

VBA如何根据某单元格内容锁定某区域

Excel vba 执行时间与单元格内容长度呈指数关系

求大神帮写VBA,以及导入方法,有函数的单元格内容自动转换为纯文本。