重命名工作簿后,vba 不起作用



我仍然是VBA的新手,所以我所做的大部分编码都是从互联网上复制后记录或修改的。

记录我执行的步骤后,我注意到宏将记录文件名和工作表名称。

因此,如果我要打开一个与录制的宏中的名称不相似的文件,我的宏将无法工作。

例如,文件 B 是在宏中注册的名称,但我现在希望在文件 C 上执行宏程序但失败了。

有没有办法绕过它?

Sub trial()
Dim wb, wb2, wb3 As Workbook
Dim fn As String
Set wb = ActiveWorkbook
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
If .Show = -1 Then
fn = .SelectedItems(1)
Set wb2 = Workbooks.Open(fn)
Else
MsgBox "You cancel the process."
End If
End With
Dim SheetName As String
'this is the place i would like to edit
Windows("SPC July BPW341CL - Copy.csv").Activate
Sheets("SPC July BPW341CL - Copy").Select
Sheets("SPC July BPW341CL - Copy").copy after:=Workbooks( _
"New Microsoft Excel Worksheet.xlsm").Sheets(4)
Sheets("SPC July BPW341CL - Copy").Activate

SheetName = Format(Date, "yyyymmdd") 'Change the format as per your requirement
ActiveSheet.Name = SheetName

Set wb3 = Application.ActiveWorkbook
Sheets("Summary").Activate
Range("A1").Select
For Each ws In wb3.Worksheets
If ws.Name <> "Compare to RGB" And ws.Name <> "Summary" Then
For i = 1 To 5
Selection.Value = ws.Name
Selection.Offset(0, 1).Select
Next
End If
Next
End Sub

你快到了。

在顶部,您将创建对工作簿的引用,稍后可以在代码中使用:

Set wb2 = Workbooks.Open(fn)

这将创建对工作簿的引用,稍后可以在代码中使用。

当您拥有代码时:

Windows("SPC July BPW341CL - Copy.csv").Activate
Sheets("SPC July BPW341CL - Copy").Select
Sheets("SPC July BPW341CL - Copy").copy after:=Workbooks( _
"New Microsoft Excel Worksheet.xlsm").Sheets(4)
Sheets("SPC July BPW341CL - Copy").Activate

我想这是记录的代码? 您应该能够使用之前创建的引用:

wb.Sheets("SPC July BPW341CL - Copy").Select
wb.Sheets("SPC July BPW341CL - Copy").copy after:=wb2.Sheets(4)

等。

这可能不会完全按照您希望它执行的操作,因为我不完全清楚要从哪个工作簿复制哪些工作表。 但是您的一般语法正确。

您还可以索引工作表,例如

dim oSheet as worksheet
set osheet = wb.sheets("sheetname") '//to set via name, Or
set oSheet = wb.sheets(4)            '//Or to set via index

等。

希望这有帮助。

编辑:其他几点需要注意: 1.( 始终在代码顶部使用"显式选项"。 2.( 将 wb、wb2、wb3 调暗为工作簿 - 此行不声明三个工作簿对象。 相反,它实际上声明了两个变体和一个工作簿。 您需要将它们声明为:Dim wb As Workbook, wb2 As Workbook, wb3 As Workbook

最新更新