VBA-Vlookup在开发时返回,但在添加到ribbon时不会返回

VBA-Vlookup在开发时返回,但在添加到ribbon时不会返回,vba,excel,vlookup,Vba,Excel,Vlookup,我有个奇怪的问题 以下代码将使用F8或按开发模块上的运行按钮运行 但是当通过以下过程将宏添加到excel功能区时,vlookup将返回#N/a: 1.在excel工具栏上单击鼠标右键>自定义功能区 选择宏命令 将其添加到新组 代码是: Sub Compare() 'set primary Workbook 'find last cell' Dim WS As Worksheet Dim LastCell As Range Dim LastCellRowNumber A

我有个奇怪的问题

以下代码将使用F8或按开发模块上的运行按钮运行

但是当通过以下过程将宏添加到excel功能区时,vlookup将返回#N/a:

1.在excel工具栏上单击鼠标右键>自定义功能区

  • 选择宏命令

  • 将其添加到新组

  • 代码是:

     Sub Compare()
    
    'set primary Workbook
    'find last cell'
        Dim WS As Worksheet
        Dim LastCell As Range
        Dim LastCellRowNumber As Long
        Set WS = Worksheets("Sheet1")
            With WS
            Set LastCell = .Cells(.Rows.Count, "A").End(xlUp)
            LastCellRowNumber = LastCell.Row
            'MsgBox (LastCell.Row)
        End With
    
    'Adding Index Column
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    [A2].Formula = "=G2&H2"
    Range("A2:A" & LastCellRowNumber).FillDown
    
    'adding headers
    [Ag1].Value = "Resale"
    [Ah1].Value = "Cost"
    [Ai1].Value = "disti"
    
    'set primary Workbook
     Dim Pri As Workbook
     Set Pri = ActiveWorkbook
    
     'open company quotes
      Workbooks.Open ("R:\company\DATA\company quotes.xlsx")
     'find last cell'
        Dim WSq As Worksheet
        Dim LastCellq As Range
        Dim LastCellRowNumberq As Long
        Set WSq = Worksheets("Quote Summary")
            With WSq
            Set LastCellq = .Cells(.Rows.Count, "A").End(xlUp)
            LastCellRowNumberq = LastCellq.Row
            'MsgBox (LastCell.Row)
        End With
    
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
    Dim quotes As Workbook
    Set quotes = ActiveWorkbook
    [A2].Formula = "=J2&B2"
    Range("A2:A" & LastCellRowNumberq).FillDown
    
    Pri.Activate
    Dim i As Integer
    
    For i = 2 To LastCellRowNumber
    
    Dim result As String
    Dim sheet As Worksheet
    Range("AG" & i) = Application.VLookup(Sheet1.Range("A" & i), Workbooks("company quotes.xlsx").Worksheets("Quote Summary").Range("A2:AS" & LastCellRowNumberq), 17, False)
    Range("AH" & i) = Application.VLookup(Sheet1.Range("A" & i), Workbooks("company quotes.xlsx").Worksheets("Quote Summary").Range("A2:AS" & LastCellRowNumberq), 19, False)
    Range("Ai" & i) = Application.VLookup(Sheet1.Range("A" & i), Workbooks("company quotes.xlsx").Worksheets("Quote Summary").Range("A2:AS" & LastCellRowNumberq), 20, False)
    
    
    Next i
    
    
     End Sub
    

    我已尝试解决我能找到的任何引用问题,但您需要仔细查看,并确保所有
    范围
    引用都以正确的
    工作簿
    工作表
    作为前缀,因为在原始代码中不太清楚它们来自哪个工作表:

    Sub Compare()
    
    'Set primary Workbook
    'Find last cell
    Dim WS As Worksheet
    Dim LastCellRowNumber As Long
    Set WS = ThisWorkbook.Sheets("Sheet1")
    LastCellRowNumber = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row
    'MsgBox (LastCell.Row)
    
    'Adding Index Column
    WS.Columns("A:A").Insert Shift:=xlToRight
    WS.Range("A2:A" & LastCellRowNumber).Formula = "=G2&H2"
    
    'adding headers
    WS.Range("AG1").Value = "Resale"
    WS.Range("AH1").Value = "Cost"
    WS.Range("AI1").Value = "disti"
    
    'open company quotes
    Dim wbCompQuotes As Workbook
    Set wbCompQuotes = Workbooks.Open ("R:\company\DATA\company quotes.xlsx")
    
    'find last cell'
    Dim wsQuoteSum As Worksheet
    Dim LastCellRowNumberq As Long
    Set wsQuoteSum = wbCompQuotes.Worksheets("Quote Summary")
    LastCellRowNumberq = wsQuoteSum.Cells(wsQuoteSum.Rows.Count, "A").End(xlUp).Row
    'MsgBox (LastCell.Row)
    
    wsQuoteSum.Columns("A:A").Insert Shift:=xlToRight
    wsQuoteSum.Range("A2:A" & LastCellRowNumberq).Formula = "=J2&B2"
    
    Dim i As Long
    
    For i = 2 To LastCellRowNumber
        WS.Range("AG" & i) = Application.VLookup(WS.Range("A" & i), wsQuoteSum.Range("A2:AS" & LastCellRowNumberq), 17, False)
        WS.Range("AH" & i) = Application.VLookup(WS.Range("A" & i), wsQuoteSum.Range("A2:AS" & LastCellRowNumberq), 19, False)
        WS.Range("AI" & i) = Application.VLookup(WS.Range("A" & i), wsQuoteSum.Range("A2:AS" & LastCellRowNumberq), 20, False)
    Next i
    
    End Sub
    

    这可能不是问题的根源,但您有一些引用问题,因为您没有为许多引用指定
    工作簿
    工作表
    。另外,您应该避免使用
    Select
    ,请参见此处:有关更多信息,我没有使用Select,但我确实认为这是一个引用问题,可能当我将vba放在功能区中时,它具有不同的引用。但我不太明白如何克服这个问题。我应该如何设置引用?当我将其用作功能区按钮时仍然不起作用:\