如何在表格中执行listobject.listColumns(1).find.row

时间:2017-09-30 20:58:35

标签: excel-vba vba excel

我有一个excel表,其中一列名为ID。 我正在尝试搜索该列以查找哪个行包含某个值。我尝试了很多不同的命令(所有这些命令都通过编辑器的语法检查来检查),但我无法弄清楚如何让它工作。 我试图使用的代码行是在程序的底部,并且是findrow = summObj.ListColumns(" ID")... 到目前为止,这是我的代码:

Private Sub Reload_Click()

    'Routine to move data to table from Molding Table
    'Check to not overwrite current records but add new ones.

    Dim summObj As ListObject
    Dim moldObj As ListObject
    Dim I, X As Integer
    Dim summObjRows As Integer
    Dim moldObjRows As Integer
    Dim key As String
    Dim foundrow As Integer

    ' Get the table reference
    Set summObj = Worksheets("Summary").ListObjects("SummaryTable")
    Set moldObj = Worksheets("MoldingData").ListObjects("MoldingTable")
    summObjRows = summObj.ListRows.Count
    moldObjRows = moldObj.ListRows.Count

    'Check if table is empty
    If summObjRows = 0 Then
        'Set up the first row
        summObj.ListRows.Add
        summObj.ListColumns("ID").DataBodyRange(1) = "New"
    End If

    X = 1
    For I = 1 To moldObj.ListRows.Count
        key = moldObj.DataBodyRange(I, moldObj.ListColumns("ID").DataBodyRange.Column) & "," & moldObj.DataBodyRange(I, moldObj.ListColumns("6-Way").DataBodyRange.Column)
        If moldObj.DataBodyRange(I, moldObj.ListColumns("Volume").DataBodyRange.Column) <> "" Then

            If Not (key = summObj.ListColumns("ID").DataBodyRange(X)) Then
                'Insert row into Summary Table unless this is the first row in a blank table.
                If Not summObj.ListColumns("ID").DataBodyRange(X) = "New" Then
                    summObj.ListRows.Add (X)
                End If
                summObj.ListColumns("ID").DataBodyRange(X) = key
                summObj.ListColumns("Volume").DataBodyRange(X) = moldObj.ListColumns("Volume").DataBodyRange(I)
                summObj.ListColumns("Item Name").DataBodyRange(X) = moldObj.ListColumns("Item Name").DataBodyRange(I)
                summObj.ListColumns("Data1").DataBodyRange(X) = moldObj.ListColumns("Data1").DataBodyRange(I)
                summObj.ListColumns("Data2").DataBodyRange(X) = moldObj.ListColumns("Data2").DataBodyRange(I)
            Else
                summObj.ListColumns("Volume").DataBodyRange(X) = moldObj.ListColumns("Volume").DataBodyRange(I)
                summObj.ListColumns("Data2").DataBodyRange(X) = moldObj.ListColumns("Data2").DataBodyRange(I)
            End If
            X = X + 1
        Else
            'Check it to see if it is in Summary, and if so remove it
            foundrow = summObj.ListColumns("ID").DataBodyRange.Find(key).Row
        End If
    Next I

End Sub

感谢您帮助我解决这个问题。 富

我对这条线做了一个小改动。 我从行中删除了(x)。

现在发生的情况是,如果在列中找到字符串,则行号将放入foundrow。如果字符串不在列中,那么我得到运行时错误&#39; 91&#39;

还有其他想法吗?

0 个答案:

没有答案