Vba 如何在VLOOKUP中使用GetOpenFilename获取工作表名称

Vba 如何在VLOOKUP中使用GetOpenFilename获取工作表名称,vba,excel,Vba,Excel,我使用下面的代码在您使用GetOpenFilename选择的另一个文件中使用VLOOKUP。我希望shtName是您选择的文件中的工作表的名称,但每当我遍历它时,它始终是我正在处理并放入VLOOKUP的工作表的名称 我的VLOOKUP中有shtName,当我跨过它时,它没有显示任何内容X显示文件名和路径,但紧跟其后的shtName不显示任何内容。但我的VLOOKUP最终还是起作用了,它将表单放入了公式中 为什么呢?我希望能够做到这一点,我自己,所以我知道我从您选择的文件中获取图纸名称 Dim i

我使用下面的代码在您使用
GetOpenFilename
选择的另一个文件中使用VLOOKUP。我希望
shtName
是您选择的文件中的工作表的名称,但每当我遍历它时,它始终是我正在处理并放入VLOOKUP的工作表的名称

我的VLOOKUP中有
shtName
,当我跨过它时,它没有显示任何内容
X
显示文件名和路径,但紧跟其后的
shtName
不显示任何内容。但我的VLOOKUP最终还是起作用了,它将表单放入了公式中

为什么呢?我希望能够做到这一点,我自己,所以我知道我从您选择的文件中获取图纸名称

Dim iRet As Integer
Dim strPrompt As String
Dim strTitle As String

' Promt
strPrompt = "Please select the last Kronos Full File before the dates of this HCM Report." & vbCrLf & _
    "This will be used to find the Old Position, Org Unit, and Old Cost Center." & vbCrLf & _
    "For example, if the date of this report is 7-28-17 thru 8-25-17, the closest Kronos Full File you would want to use is 7-27-17."

' Dialog's Title
strTitle = "Last Kronos Full File for Old Positions"

'Display MessageBox
iRet = MsgBox(strPrompt, vbOK, strTitle)

Dim LR As Long
Dim X As String
Dim lNewBracketLocation As Long

X = Application.GetOpenFilename( _
    FileFilter:="Excel Files (*.xls*),*.xls*", _
    Title:="Choose the Kronos Full File.", MultiSelect:=False)

MsgBox "You selected " & X
'Find the last instance in the string of the path separator "\"
lNewBracketLocation = InStrRev(X, Application.PathSeparator)
'Edit the string to suit the VLOOKUP formula - insert "["
X = Left$(X, lNewBracketLocation) & "[" & Right$(X, Len(X) - lNewBracketLocation)

shtName = ActiveWorkbook.Worksheets(1).name

LR = Range("E" & Rows.Count).End(xlUp).Row



Range("T2").Formula = "=VLOOKUP($E2,'" & X & "]shtName'!$B$1:$AP$99999,15,0)"
Stop
Range("T2").AutoFill Destination:=Range("T2:T" & Range("E" & Rows.Count).End(xlUp).Row)
Stop
Range("T2:T" & Range("E" & Rows.Count).End(xlUp).Row).Select
Stop
Range("U2").Formula = "=VLOOKUP($E2,'" & X & "]shtName'!$B$1:$AP$99999,41,0)"
Range("U2").AutoFill Destination:=Range("U2:U" & Range("E" & Rows.Count).End(xlUp).Row)
Range("U2:U" & Range("E" & Rows.Count).End(xlUp).Row).Select
Range("V2").Formula = "=VLOOKUP($E2,'" & X & "]shtName'!$B$1:$AP$99999,18,0)"
Range("V2").AutoFill Destination:=Range("V2:V" & Range("E" & Rows.Count).End(xlUp).Row)
Range("V2:V" & Range("E" & Rows.Count).End(xlUp).Row).Select
Cells.Select
Cells.EntireColumn.AutoFit

类似于以下内容的内容应该为您提供文件中的工作表名称

Dim wbk As Workbook
Set wbk = Workbooks.Open(Filename:="YOUR_FILE_PATH", ReadOnly:=True)

Dim shtName As String
shtName = wbk.Worksheets(1).Name
wbk.Close
注意:如果不打算更改任何内容,我们可以以只读模式打开工作簿


此外,我建议(对于良好代码,请遵循良好实践):

  • 始终指定工作表。
    例如,对于每一个
    范围(“”
    ,如
    工作表(“您的工作表名”)。范围(“”

    或将
    语句一起使用:

    With Worksheets("YourSheetName")
        .Range("A1").Value = 5   'recognize the starting full stop referring to the with statement
    End With
    
  • 对于每个
    单元格
    等,都相同

  • 避免使用
    。选择
    。激活
    选择。

    (互联网上有很多关于如何避免它们的教程)
  • 使用
    选项Explicit
    并在使用前声明所有变量。
    (避免许多问题,尤其是拼写错误)

类似于以下内容的内容将从文件中为您提供工作表名称

Dim wbk As Workbook
Set wbk = Workbooks.Open(Filename:="YOUR_FILE_PATH", ReadOnly:=True)

Dim shtName As String
shtName = wbk.Worksheets(1).Name
wbk.Close
注意:如果不打算更改任何内容,我们可以以只读模式打开工作簿


此外,我建议(对于良好代码,请遵循良好实践):

  • 始终指定工作表。
    例如,对于每一个
    范围(“”
    ,如
    工作表(“您的工作表名”)。范围(“”

    或将
    语句一起使用:

    With Worksheets("YourSheetName")
        .Range("A1").Value = 5   'recognize the starting full stop referring to the with statement
    End With
    
  • 对于每个
    单元格
    等,都相同

  • 避免使用
    。选择
    。激活
    选择。

    (互联网上有很多关于如何避免它们的教程)
  • 使用
    选项Explicit
    并在使用前声明所有变量。
    (避免许多问题,尤其是拼写错误)

您设置了
shtName=ActiveWorkbook.Worksheets(1)。name
表示
shtName
是当前打开的活动工作簿中第一个工作表的名称。因此,如果你想要
shtName
不是这样,你需要设置它。啊,我想一旦我这样做了,GetOpenFilename将是活动的。好吧您建议如何获取工作表名称?我可以通过GetOpenFilename或其他方式激活文件吗?我建议:使用get worksheets名称打开文件并关闭它。请参阅我的答案以获取示例。您设置了
shtName=ActiveWorkbook.Worksheets(1)。name
,这意味着
shtName
是当前打开的活动工作簿中第一个工作表的名称。因此,如果你想要
shtName
不是这样,你需要设置它。啊,我想一旦我这样做了,GetOpenFilename将是活动的。好吧您建议如何获取工作表名称?我可以通过GetOpenFilename或其他方式激活文件吗?我建议:使用get worksheets名称打开文件并关闭它。看看我的答案,我明白了。太棒了,我会看看的。首先快速解决另一个问题:)是的,我通常通过录制宏来开始我的代码,这会不断地使用选择,我只是不想经历和改变它。在这方面我是个新手,我想为我的工作做很多事情。我正在尽我所能的快去,因为我需要一段时间才能弄清楚。我是唯一一个会看代码的人,但我一直在努力改进它。谢谢你的指点。你能告诉我为什么我的VLOOKUP在我原来的帖子里有或没有shtName吗?我可以把它拿出来,但它一点也不起作用。我甚至可以在那里随机输入字母,但这一点都没有影响。@Robillard你能告诉我你的VLOOKUP在你说它工作的特定单元格中是什么样子的吗?如果您想要变量的值,请使用类似以下内容的
“=VLOOKUP($E2,“&X&“]”&shtName&“!$B$1:$AP$99999,15,0)”
否则
shtName
不会被识别为该字符串中的变量。这些建议并不是为了让代码看起来更漂亮,但更容易避免许多编码问题(尤其是作为初学者)如果你尊重我提到的这些观点。一开始这看起来像是一堆工作,但遵循一个好的实践会让你的生活变得更轻松。宏记录器是一个了解代码的好工具,它产生的代码很有效,但它真的很糟糕。我明白了。太棒了,我会检查一下。首先快速解决另一个问题:)是的,我通常通过录制宏来开始我的代码,这经常使用选择,我只是不想经历和改变它。在这方面我是个新手,我想为我的工作做很多事情。我正在尽我所能的快去,因为我需要一段时间才能弄清楚。我是唯一一个会看代码的人,但我一直在努力改进它。谢谢你的指点。你能告诉我为什么我的VLOOKUP在我原来的帖子里有或没有shtName吗?我可以把它拿出来,但它一点也不起作用。我甚至可以在那里随机输入字母,但这一点都没有影响。@Robillard你能告诉我你的VLOOKUP在那个特定的单元格里是什么样子吗