Excel VBA代码优化:如何跳过sTag为空的记录执行插入?
实现跳过空
sTag记录的VBA代码修改方案 没问题,这个需求很容易实现——我们只需要在读取sTag后增加一个判断逻辑,当它为空(包括仅含空格的情况)时,直接跳过当前记录的插入操作,进入下一条的处理即可。
修改后的完整代码(推荐写法)
我推荐用分支判断的方式,避免使用GoTo,代码可读性更好:
Sub Button3_Click() Dim conn As New ADODB.Connection With Sheets("Sheet1") conn.Open "Provider=SQLNCLI11;Server=myServer;Database=myDatabase;Trusted_Connection=yes;" iRowNo = 6 Do Until .Cells(iRowNo, 1) = "" dtDateTime = .Cells(iRowNo, 1) sTag = .Cells(iRowNo, 10) ' 核心判断:仅当sTag不为空时才执行插入 If Trim(sTag) <> "" Then conn.Execute "insert into RawData(oDateTime,oTag) values ('" & dtDateTime & "', '" & sTag & "')" Application.StatusBar = "Processing row " & iRowNo & "..." Else ' 为空时更新状态栏提示,方便观察进度 Application.StatusBar = "Skipping empty tag at row " & iRowNo & "..." End If iRowNo = iRowNo + 1 Loop MsgBox "Upload success!", vbInformation, "AOA" Sheet1.Range("A6", "L100000").ClearContents Sheet1.Cells(6, 1).Select conn.Close Set conn = Nothing End With End Sub
关键修改说明
- 空值判断逻辑:使用
Trim(sTag) <> "",既处理单元格完全为空的情况,也处理单元格仅包含空格的无效内容,避免把空格误当成有效标签插入数据库; - 分支处理:把插入操作放在
sTag非空的分支里,为空时仅更新状态栏提示,然后统一执行行号递增,逻辑更直观; - 优化体验:更新状态栏的提示文本,让你能清楚看到当前是在处理正常记录还是跳过空标签记录,进度更透明。
备选写法(使用GoTo跳转)
如果你习惯用跳转的方式,也可以用下面的写法,效果完全一致:
Sub Button3_Click() Dim conn As New ADODB.Connection With Sheets("Sheet1") conn.Open "Provider=SQLNCLI11;Server=myServer;Database=myDatabase;Trusted_Connection=yes;" iRowNo = 6 Do Until .Cells(iRowNo, 1) = "" dtDateTime = .Cells(iRowNo, 1) sTag = .Cells(iRowNo, 10) ' 为空则直接跳转到循环末尾,跳过插入 If Trim(sTag) = "" Then Application.StatusBar = "Skipping empty tag at row " & iRowNo & "..." iRowNo = iRowNo + 1 GoTo NextLoop End If conn.Execute "insert into RawData(oDateTime,oTag) values ('" & dtDateTime & "', '" & sTag & "')" Application.StatusBar = "Processing row " & iRowNo & "..." iRowNo = iRowNo + 1 NextLoop: Loop MsgBox "Upload success!", vbInformation, "AOA" Sheet1.Range("A6", "L100000").ClearContents Sheet1.Cells(6, 1).Select conn.Close Set conn = Nothing End With End Sub
内容的提问来源于stack exchange,提问作者Haminteu
相关产品推荐
相关产品推荐

