Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 对象必需错误-尝试使用范围中的值执行vlookup_Excel_Vba_Object - Fatal编程技术网

Excel 对象必需错误-尝试使用范围中的值执行vlookup

Excel 对象必需错误-尝试使用范围中的值执行vlookup,excel,vba,object,Excel,Vba,Object,我有一个电子表格(ws),它被“键入”一个ID,然后有关于该ID的信息。用户进行筛选选择以缩小显示的行数,然后单击按钮以显示关于这些相同ID的其他信息,但在第二个电子表格(ws3)中以列而不是行的形式显示。将数据放在第一张工作表的行上,第二张工作表的列上,数据的表示方式更有意义 所以,我最初的设计,主要是工作,但不是可重用的,因为我需要它是使用一个为每个循环嵌套在另一个。外部循环是所选ID的列表,内部循环(这很难看)遍历所有可能ID的整个列表以找到匹配项 找到匹配项后,数据将从第三个电子表格(w

我有一个电子表格(ws),它被“键入”一个ID,然后有关于该ID的信息。用户进行筛选选择以缩小显示的行数,然后单击按钮以显示关于这些相同ID的其他信息,但在第二个电子表格(ws3)中以列而不是行的形式显示。将数据放在第一张工作表的行上,第二张工作表的列上,数据的表示方式更有意义

所以,我最初的设计,主要是工作,但不是可重用的,因为我需要它是使用一个为每个循环嵌套在另一个。外部循环是所选ID的列表,内部循环(这很难看)遍历所有可能ID的整个列表以找到匹配项

找到匹配项后,数据将从第三个电子表格(ws5)复制到第二个工作表(ws3)

我试图改进代码的地方是用一个简单的vlookup替换内部循环,使用ws2中的一个列表告诉程序哪列数据对应于当前ID。我可以访问范围内当前单元格的值,但当我将其插入vlookup公式时,我会得到一个“需要对象”错误

以下是我正在使用的代码:

Dim ws      As Worksheet
Dim ws2     As Worksheet
Dim ws3     As Worksheet
Dim ws5     As Worksheet 
Dim range1  As Range
Dim range2  As Range
Dim m       As Integer
Dim i2      As Integer
Dim NewCol  As Integer
Dim myCell  As Range
Dim mycell2 As Range
Dim myArray As Variant

' range1 grabs the complete list of ids from ws
' range2 filters that list to the ids that are not filtered out

Set range1 = ws.Range("A5:A166")
Set range2 = range1.Rows.SpecialCells(xlCellTypeVisible)

' M is the column where the next column to on the target spreadsheet 4=Column D
m = 4

' now loop through selected visible ids
For Each myCell In range2  'loop through scrub ids we want to display cols for
    
    ' this is the code I am trying to get to work so I can do a vlookup
    NewCol = Application.VLookup(Convert.ToInt32(mycell.Value), ws2.Range("A2:A146"), 2, False)
    
    ws5.Activate

    For i = 1 To UBound(myArray)

        If myArray(i, 1) = mycell.Value Then
            i2 = i - 2
            ws5.Columns(myCols(i2, 1)).Copy Destination:=ws3.Columns(m)
            m = m + 1
            Exit For
        End If

    Next i
Next myCell

Convert.ToInt32
是VB.Net,而不是VBA。也许你想要
CLng