我正在尝试在每天从网上下载的工作簿上执行一个宏,它只有一个随着下载日期相应更改名称的工作表(例如:“vendas 201709294524455”),我需要将此工作表设置为一个变量,但我怎么能用这个dinamyc名称改变呢?
我试过了:
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim FindCell As Range
Set Sh2 = ThisWorkbook.Worksheets("book1")
Set Sh1 = Workbooks("vendas.xlsm").Worksheets("*vendas*")
LastRow = Sh2.Range("d65536").End(xlUp).Row
......其余代码
但是没有用......有什么想法吗?
答案 0 :(得分:5)
因为它只有一个工作表才能使用:
Set Sh1 = Workbooks("vendas.xlsm").Worksheets(1)
Worksheets()
允许索引或字符串名称。只有一张纸,索引始终是该纸张的1
。请参阅:https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheet-object-excel
这会将Sh1设置为工作簿中的第一个工作表而不管名称。
答案 1 :(得分:1)
Scott Craner的解决方案非常适合您。但是对于将来的任何人来说 - 如果你想避免使用工作表索引(如果你改变工作表的顺序会改变),你就会这样做。如果您有多个工作表,则唯一值得使用此方法。
Sub SetWorksheet()
Dim ws As Worksheet, targetWorksheet As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name Like "*test*" Then
Set targetWorksheet = ws
Exit For
End If
Next ws
'use targetWorksheet
MsgBox targetWorksheet.Name
End Sub
如果有多张表格,例如" test" (在这个例子中),你将获得第一个。