【问题标题】:object variable or with block variable not set vba excel while trying to do vlookup尝试进行vlookup时对象变量或块变量未设置vba excel
【发布时间】:2018-03-25 14:52:46
【问题描述】:

我正在尝试在同一个工作簿中执行从一张到另一张的 vlookup。但是得到运行时错误“object variable or with block variable not set”。如果有人可以在这里看看并帮助我。从几天开始就卡在这里了

我也无法在立即块中打印特定范围的值以进行调试

Dim c1 As Range  
Dim Values1 As Range  
Dim Values2 As Range  

Values1 = Sheet2.Range("A2:A14")  'Getting the error here
Values2 = Sheet1.Range("A2:C14")  

AC_Row = Sheet2.Range("H1").Row  
AC_Col = Sheet2.Range("H1").Column

For Each c1 In Values1  
Debug.Print c1.Value  'Is this correct way to print??
Sheet2.Cells(AC_Row, AC_Col) = Application.WorksheetFunction.VLookup(c1, Values2, 2, True)  
 AC_Row = AC_Row + 1  
Next c1  

【问题讨论】:

  • 您似乎没有任何Sheet2 工作表:使用Values1 = Worksheets("mySheetName").Range("A2:A14") 并将mySheetName 更改为您的实际工作表名称。与Values2 相同
  • @DisplayName 我也这么认为并赞成您的评论,结果发现如果Sheet2 不存在,Excel 会引发不同的错误消息。 Excel 引发424: Object Required

标签: vba excel range vlookup


【解决方案1】:

请使用Set 关键字设置Range 对象,如下所示:

Set Values1 = Sheet2.Range("A2:A14")  
Set Values2 = Sheet1.Range("A2:C14")

【讨论】:

    【解决方案2】:

    谢谢各位,我能够达到预期的结果。请在下面找到我的代码。

     Dim rng As Range
     Dim rng1 As Range
     Dim c1 As Range
     Dim datavalue_Target As Variant
     Dim datavalue_OuterB As Variant
    
        Dim x As Integer
        Dim y As Integer
    
        x = 2
        y = 2
    
        Lastrow_A = Sheets("Sheet2").Cells(Sheets("Sheet2").Rows.Count, "A").End(xlUp).Row
        Set rng = Application.Range("Sheet2!A2:A" & Lastrow_A)
        Lastrow_C = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.Count, "C").End(xlUp).Row
        Set rng1 = Application.Range("Sheet1!A2:C" & Lastrow_C)
        'Debug.Print Sheet2.Cells(1, 2).Value
    
        For Each c1 In rng.Cells
            'Debug.Print c1.Value
            On Error Resume Next
            datavalue_Target = Application.WorksheetFunction.VLookup(c1, rng1.Cells, 2, False)
            If Err = 0 Then
            Sheets("Sheet2").Range("H" & x).Value = datavalue_Target
            End If
            On Error GoTo 0
    
            x = x + 1
        Next c1
    
        For Each c1 In rng.Cells
            'Debug.Print c1.Value
            On Error Resume Next
            datavalue_OuterB = Application.WorksheetFunction.VLookup(c1, rng1.Cells, 3, False)
            If Err = 0 Then
            Sheets("Sheet2").Range("I" & y).Value = datavalue_OuterB
            End If
            On Error GoTo 0
    
            y= y + 1
        Next c1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多