【问题标题】:Excel VBA Adding records below existing valuesExcel VBA 在现有值下方添加记录
【发布时间】:2015-09-26 06:31:39
【问题描述】:

我一直在开发一个小工具,可以查询我们的数据库并返回一些参考资料。

我在将新查询的值添加到 Excel Sheet1 中现有值的下方时遇到问题。

Option Explicit

Public Ref As String
Const DWConnectString = "Provider=SQLOLEDB... "

Public Property Get rRef() As String
    rRef = Me.TextBox1.Value
    Ref = Trim(rRef)
End Property

Private Sub TextBox1_Change()
    Dim rRef As String
    rRef = Me.TextBox1.Value
End Sub

Private Sub ZoekRef_Click()
    Dim cn As Object
    Dim rs As Object
    Dim cm As Object
    Dim Ref As String
    Dim StrSource As String
    Dim startrow As Integer

    Ref = rRef

    Set cn = CreateObject("ADODB.Connection")
    cn.Open DWConnectString

    Set rs = CreateObject("ADODB.Recordset")
    'rs = New ADODB.Recordset

    StrSource = "Select CONSIGNMENT.CONSIGNMENT, CONSIGNMENT.DOCUMENT_REMARK_2, INVOICE_HIST.NET_AMOUNT, INVOICE_HIST.VAT_AMOUNT, INVOICE_HIST.INV_CURRENCY "
    StrSource = StrSource & "from CONSIGNMENT  left outer join INVOICE_HIST  ON CONSIGNMENT.CONSIGNMENT=INVOICE_HIST.CONSIGNMENT "
    StrSource = StrSource & "where DOCUMENT_REMARK_2 like '%"
    StrSource = StrSource & Ref & "%'"

    rs.Open StrSource, cn

    If rs.EOF Then
        MsgBox "Geen Resultaten"
        Exit Sub
    Else
        Dim fieldNames, j

        rs.MoveFirst

        ReDim fieldNames(rs.Fields.Count - 1)

        For j = 0 To rs.Fields.Count - 1
            fieldNames(j) = rs.Fields(j).Name
        Next

        Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(1, rs.Fields.Count)).Value = fieldNames

        For j = 1 To rs.Fields.Count
            Sheet1.Columns(j).AutoFit
        Next

        Sheet1.Cells.CopyFromRecordset rs
        'fldcount2 = Sheets("sheet1").UsedRange.Rows.Count
        Sheet1.Rows(1).Insert
        Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(1, rs.Fields.Count)).Value =   fieldNames
        startrow = 3

        Do Until rs.EOF
            rs.MoveNext
            startrow = startrow + 1
        Loop
    End If

    rs.Close
    Set rs = Nothing

    cn.Close
    Set cn = Nothing
End Sub

我想过用这条线:

Do until trim(cells(startrow,1).Value) = "" 
    startrow = startrow + 1 
Loop

rs.Movenext 行之前,但这似乎是在测试记录集,而不是实际的 excel 文件。

我可以在添加新记录集之前测试我当前 Sheet1 的值,使其低于现有记录集吗?

感谢您的帮助。

【问题讨论】:

  • 您只是想获取最后一行数据吗?有plenty of ways 这样做,我最喜欢的是LastRow = Cells(Rows.Count, "A").End(xlUp).Row
  • 那么我应该在代码的哪一部分添加这一行 + 使用 lastrow 以便将我的 RS 复制到正确的位置?
  • 我无法通过查看您的代码来判断,您是否要选择一系列行?还是您只是想在底部获取第一个打开的行,然后在其下方粘贴数据?
  • 第一次打开,但别担心,我已经成功了!我的代码需要一些细化,我找到了一种方法来检查我在 excel 中的现有值。不过谢谢!
  • 没问题!如果您回答了自己的问题,您能否在下面的答案中发布解决方案,然后接受您自己的答案?以防万一有人遇到类似问题。

标签: vba excel


【解决方案1】:

扩大循环的范围。

rs.MoveFirst
Do Until rs.EOF

   'Do all your work here


   'Then increment your counter and the recordset
    rs.MoveNext
    startrow = startrow + 1
Loop

【讨论】:

    猜你喜欢
    • 2020-04-15
    • 1970-01-01
    • 2018-02-28
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多