重命名工作簿后,vba无效

时间:2017-08-21 03:15:21

标签: excel vba excel-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

1 个答案:

答案 0 :(得分:1)

你几乎就在那里。

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

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.)始终在代码顶部使用Option Explicit。 2.)Dim wb,wb2,wb3 As Workbook - 此行不会声明三个Workbook对象。相反,它实际上声明了两个变体和一个工作簿。您需要将它们声明为:Dim wb As Workbook, wb2 As Workbook, wb3 As Workbook