从记录集中删除空白行

问题描述 投票:0回答:1

我有一张带有下拉列表的工作表,可根据该选择输出数据。最多是 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

sql excel vba adodb
1个回答
0
投票

我相信

.Cells.ClearContents
语句正在清除数据,但实际上并没有删除行。如果您随后立即检查
.Rows.Count
(
rSht.Rows.Count
) 的值,您会看到与先前数据占用的行数相同。

如果

.Range("A5").CopyFromRecordset rs
填充的行少于先前的数据,这些额外的行仍然保留,即使它们是空白的。

您实际上需要“删除”旧行,而不仅仅是清除它们。尝试以下任一方法: .Cells.Delete .Rows.Delete

© www.soinside.com 2019 - 2024. All rights reserved.