首页 > 解决方案 > VB 脚本中需要的 Vlookup 函数辅助,对最近的工作表使用字符串

问题描述

我的 VB 脚本获取工作簿中最新工作表的工作表名称,将工作表名称存储为字符串,但是当我在 Vlookup 函数中引用此字符串时,Excel 无法找到工作表。工作表名称采用日期格式,因此最近的工作表是昨天的日期(澳大利亚日期格式)“08-06-2021”。宏运行,但是在运行 VLookup 函数时,它找不到工作表,有趣的是出现以下消息:

找不到“2021”。复制自:

并打开一个窗口找到电子表格,然后在电子表格中选择工作表。为了好玩,我将“08-06-2021”表重命名为“2021”,看看是否可行。这也不起作用,而且错误更不寻常,因为它现在正试图找到一个不存在的工作表名称。新消息是:

找不到“C1322021”。复制自:

如前所述,没有名称为 C1322021 的工作表。这是相关的VB代码:

Dim wsData1 As Worksheet  
Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long
Dim rWorkSheet As String

Dim i 

  i = ActiveWorkbook.Sheets.Count - 1
  rWorkSheet = Worksheets(i).Name

  Firstrow = .UsedRange.Cells(1).Row + 1
  Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

       For Lrow = Lastrow To Firstrow Step -1
       With ActiveSheet.Cells(Lrow, "M")

            sNotes = "=VLookup(C" & Lrow & rWorkSheet & "!C:N, 12, False)"

                ActiveSheet.Cells(Lrow, "M") = sNotes

        End With

感谢您对此的任何帮助,因为它让我很难过!

TIA,

迈克尔

标签: excelvbavlookup

解决方案


您需要一个额外的逗号,并且工作表名称需要用单引号括起来。

sNotes = "=VLookup(C" & Lrow & "," & "'" & rWorkSheet & "'" & "!C:N, 12, False)"
ActiveSheet.Cells(Lrow, "M").Formula = sNotes

ActiveSheet.Cells(Lrow, "M")默认为ActiveSheet.Cells(Lrow, "M").Value但要编写您应该使用的公式.Formula。即使没有这种方式它可能会工作,但对于每个阅读代码的人来说,它都会更加可靠和清晰。


推荐阅读