VBA复制启用宏的工作簿并从列表中重命名每个工作簿

Posted

技术标签:

【中文标题】VBA复制启用宏的工作簿并从列表中重命名每个工作簿【英文标题】:VBA to duplicate macro enabled workbook and rename each one from list 【发布时间】:2021-08-28 10:55:42 【问题描述】:

您好,我需要多次复制启用宏的工作簿,并从 1 列 A 中工作表上的名称列表重命名每个复制的工作簿。这是我一直在尝试的代码,但它一直运行到一个

运行时错误 1004 另存为工作簿对象失败。

非常感谢任何帮助。

Sub Test2()
 
    Dim wb As Workbook
    Dim rNames As Range, c As Range, r As Range
 
    'Current file's list of names and ids on sheet1.
    Set rNames = Worksheets("Sheet1").Range("A2", Worksheets("Sheet1").Range("A2").End(xlDown))
 
    'Path and name to master workbook to open for copy, saveas.
    Set wb = Workbooks.Open("C:\Desktop\Q2\Test.xlsm")
 
    For Each c In rNames
        With wb
            .Worksheets("Sheet1").Range("A1").Value = c.Offset(, 1).Value 'ID
 
            'Path and name for copied workbook
            .SaveAs Filename:="\Desktop\Q2\Test" & c.Value, FileFormat:=52, CreateBackup:=False
        End With
 
        Set wb = ActiveWorkbook
    Next c

    wb.Close

End Sub

【问题讨论】:

c 中的样本值是多少?文件名是否以.xlsm 结尾? 【参考方案1】:

我已经测试了您的代码,唯一的区别是我将文件存储在“C:\tmp\Test.xlsx”中,并且为了简单起见,将“保存到”文件名设置为“\tmp\Test”。

它运行时没有错误消息,因此请验证您的桌面路径是否正确。我肯定没有“C:\Desktop”,我希望在“C:”和您的桌面文件夹之间有一个“Users\user name”部分。

但是新文件中的 A1 将是空白的,我相信你想要这里的新文件名。要解决此问题,请跳过“c.Offset”部分并仅替换为“c”。这是因为您的 c.Offset 语句返回“空”。

PS!运行时错误 1004 可能是您尝试保存到已使用或以某种方式阻止使用的文件名。因此,如果您一遍又一遍地这样做,则需要在每次运行之间手动删除文件,或者在尝试保存新文件之前包含删除现有文件的代码。

BR 弗兰克

【讨论】:

以上是关于VBA复制启用宏的工作簿并从列表中重命名每个工作簿的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 创建工作簿并填充工作表

从 VBA 打开工作簿并禁用 Workbook_Open() 代码?

VBA 复制工作表至新的工作簿中的工作表

VBA保存宏启用文件参考原始文件

更新所有工作表中的宏是相同的(或使代码更全局?)

VBA代码根据excel工作簿中的值从webform下拉列表中选择一个值