我有一张带有下拉列表的工作表,可根据该选择输出数据。最多是 3 行,但有时是 1 或 2 行,目前它总是输出 3 行,即使它们是空的,我想检查行是否为空并删除。请找到下面的代码,我也添加了图片以便更好地理解。另外,当记录集包含少于 3 行时,
Add_Total()
子例程不会将总计输出到正确的行?
Private Sub dateBox_Change()
Dim connection As New ADODB.connection, dttime1, dttime2, dttime3
connection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 12.0;HDR=YES;"";"
Dim dateQuery As String
Dim queryString As String
Dim cptString1 As String
Dim cptString2 As String
Dim cptString3 As String
Dim date1 As String
Dim date2 As String
Dim date3 As String
Dim datetime1 As Date
Dim datetime2 As Date
Dim datetime3 As Date
dateQuery = Me.dateBox.Text
cptString1 = "00:30"
cptString2 = "01:30"
cptString3 = "02:00"
date1 = dateQuery
date2 = dateQuery
date3 = dateQuery
datetime1 = (DateValue(date1) + TimeValue(cptString1))
datetime2 = (DateValue(date2) + TimeValue(cptString2))
datetime3 = (DateValue(date3) + TimeValue(cptString3))
dttime1 = 1 * (datetime1)
dttime2 = 1 * (datetime2)
dttime3 = 1 * (datetime3)
queryString = "Select [Lane],[Containerized Packages],[Staged Packages],[Loaded Packages],[Staged Packages]+[Containerized Packages]+[Loaded Packages] as TotalProcessed,[Departed Packages]," & _
"[Expected Packages],[All Packages],[Expected Packages] + [All Packages] - [TotalProcessed] as Remaining,[Departed Packages] + [Expected Packages] + [All Packages] as TotalVolume from [Data$] where [CPTs]*1 =" & dttime1 & "or [CPTs] *1 =" & dttime2 & "or [CPTs] *1 =" & dttime3
Dim rs As New ADODB.Recordset
rs.Open queryString, connection
Dim rSht As Worksheet
Set rSht = ThisWorkbook.Worksheets("Sheet1")
With rSht
.Cells.ClearContents
For i = 0 To rs.Fields.Count - 1
.Cells(4, i + 1).Value = rs.Fields(i).Name
Next i
.Range("A5").CopyFromRecordset rs
End With
Call Add_Total
connection.Close
End Sub
Public Sub Add_Total()
Dim ColumnNumber As Long
Dim LastRow As Long
With ThisWorkbook.Worksheets("Sheet1")
For ColumnNumber = 5 To 10
LastRow = .Cells(.Rows.Count, ColumnNumber).End(xlUp).Row
With .Cells(LastRow + 1, ColumnNumber)
.FormulaR1C1 = "=SUM(R2C:R[-1]C)"
End With
Next ColumnNumber
End With
End Sub
我相信
.Cells.ClearContents
语句正在清除数据,但实际上并没有删除行。如果您随后立即检查 .Rows.Count
(rSht.Rows.Count
) 的值,您会看到与先前数据占用的行数相同。
如果
.Range("A5").CopyFromRecordset rs
填充的行少于先前的数据,这些额外的行仍然保留,即使它们是空白的。
您实际上需要“删除”旧行,而不仅仅是清除它们。尝试以下任一方法:
.Cells.Delete
.Rows.Delete