【发布时间】:2018-02-15 15:50:01
【问题描述】:
我正在尝试开发一个宏,如果该工作表在主工作簿中尚不存在,则该宏会从文件夹中的所有工作簿中提取所有工作表。 浏览器
Folder
|---Summary Sheet.xlsm
|---Sheet 1 date1.xlsx
|---Sheet 2 date2.xlsx
etc.
宏打开工作簿,将工作表重命名为单元格的日期,将其复制过去,然后在不保存/提示的情况下关闭它。我似乎无法正确合并名称检查。我看过了
Test or check if sheet exists
Excel VBA If WorkSheet("wsName") Exists
但缺乏正确翻译概念的经验。
这是目前为止的代码。现在运行会引发运行时错误 438
sheetToFind = ThisWorkbook.Sheets(1)
Sub ConslidateWorkbooks()
Dim FolderPath As String
Dim Filename As String
Dim Sheet As Worksheet
Dim sheetToFind As String
Dim sheetExists As Boolean
Application.ScreenUpdating = False
Application.DisplayAlerts = False
FolderPath = Environ("userprofile") & "\Folder\"
Filename = Dir(FolderPath & "*.xlsx")
Do While Filename <> ""
Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True
sheetExists = False
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Name = Sheet.Range("C4")
sheetToFind = ThisWorkbook.Sheets(1)
If sheetToFind = Sheet.Name Then
sheetExists = True
End If
If sheetExists = False Then
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Workbooks(Filename).Close False
Filename = Dir()
End If
Next Sheet
Loop
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
ThisWorkbook.Sheets(1)是一个对象,需要Set。 =>Set sheetToFind = ThisWorkbook.Sheets(1)... 但sheetToFind = Sheet.Name也会失败,因为sheetToFind是一个无法像那样比较的对象...sheetToFind.Name = Sheet.Name应该在那里解决问题;) -
对不起,我不完全理解。如果我去
Do.. sheetToFind.Name = Sheet.Name For Each Sheet....我得到一个无效的限定符错误。我是否遗漏了某些东西或把它放在了错误的地方?我可以搜索所有工作表名称来比较重命名的工作表吗? -
只需尝试将
sheetToFind = ThisWorkbook.Sheets(1)更改为sheetToFind = ThisWorkbook.Sheets(1).Name并检查它是否正在执行您想要的操作