如何为VLOOKUP引用另一个工作簿中最右边的工作表?

时间:2019-12-03 10:10:44

标签: excel vba tabs vlookup worksheet

我正在编写一个vlookup函数,我想引用另一个工作簿中的最后一个标签,而不是引用每天更改的标签名称。

要移至我拥有的工作簿的最后一个标签

SELECT V.N, D.A, D.B, D.C, D.D, D.E, D.F --I assume there are all from the Data table
FROM Data D
    CROSS APPLY (VALUES(D.[Name])) V(N)
    INNER JOIN User_Access UA ON V.N = UA.Name 
WHERE UA.Channel = 'TEST';

是否可以在VLOOKUP中引用它? (将工作表保留在空白处)

Sheets(Sheets.Count).Select

3 个答案:

答案 0 :(得分:0)

这只是我的头顶(未经测试),但是也许是这样的

Dim wbData as Workbook
Set wbData = Workbooks.Add("Unavista UTI Lookup December2019.xlsm")
ActiveWorkbook.Worksheets("Sheet1").Range("A1").Formula = "=VLOOKUP(RC[133],[" & wbData.Name & "]" & wbData.WorkSheets(wbData.WorkSheets.Count).Name & "!C4:C7,4,0)"
wbData.Close False

或者,使用.Open方法:

Dim wbData as Workbook
Set wbData = Workbooks.Open(Filename:="Unavista UTI Lookup December2019.xlsm", ReadOnly:=True)
ActiveWorkbook.Worksheets("Sheet1").Range("A1").Formula = "=VLOOKUP(RC[133],[" & wbData.Name & "]" & wbData.WorkSheets(wbData.WorkSheets.Count).Name & "!C4:C7,4,0)"
wbData.Close False

根据需要调整Sheet1和A1

但是,您仍然需要在某种事件上触发此代码,这对我来说还不清楚。

答案 1 :(得分:0)

我所在的功能如下;

当前,我正在更改vlookup引用的工作表的日期。因此,下面显示了昨天的“ 12月9日”。今天在文件“ Unavista UTI Lookup December2019”中创建了新标签后,它将显示“ Dec 10”

   ActiveCell.FormulaR1C1 = _
   "=VLOOKUP(RC[133],'[Unavista UTI Lookup December2019.xlsm]Dec 9'!C4:C7,4,0)"

我想做的是找到一种方法,使代码自动将其更改为今天。与工作中的人交谈,我们尝试了以下方法

Dim DayValue As String
Dim FormulaString As String
DayValue = Format(Date, "mmm d")

 Range("E2").Select
 FormulaString = "=VLOOKUP(EH2,'[Unavista UTI Lookup December2019.xlsm]" & DayValue & "' !$D:$G,4,0)"

该公式未带回任何错误,但是不幸的是,查找没有做任何事情,只是带回了空单元格。

如果任何人都可以解决此问题,因为我尝试了很多事情,但仍然无法使其正常工作。

答案 2 :(得分:0)

我认为您正在使用像这样的一行应用公式:

Range("E2").Formula = FormulaString

但是,当我尝试该行时,由于您的行有一个多余的空白,它返回了一个错误,因为与另一个工作簿的链接的语法应为:

'[WorkbookName]WorksheetName'!Range

并且您的行有:

'[WorkbookName]WorksheetName' !Range

因此而不是:

FormulaString = "=VLOOKUP(EH2,'[Unavista UTI Lookup December2019.xlsm]" & DayValue & "' !$D:$G,4,0)"

使用此:

FormulaString = "=VLOOKUP(EH2,'[Unavista UTI Lookup December2019.xlsm]" & DayValue & "'!$D:$G,4,0)" Range("E2").Formula = FormulaString

但是,为了简化程序的维护,我建议使用常量,请尝试以下程序:

Sub Formula_Today()
Const kFml As String = "= VLOOKUP( RC[133]," & _
    "'[Unavista UTI Lookup December2019.xlsm]#TODAY'!C4:C7, 4, 0 )"
Dim sFml As String
    sFml = Replace(kFml, "#TODAY", Format(Date, "mmm d"))
    With ThisWorkbook.Worksheets("DATA")
        .Range("E2:E10").FormulaR1C1 = sFml
    End With
    End Sub

添加新工作表之前 enter image description here

添加新工作表并应用Formula_Today过程 enter image description here