VBA批量复制Excel表并更新表中的公式

一、问题的提出

有模板工作簿1,其中有工作表A和工作表B两个工作表。现在要求把工作簿1中的工作表B批量复制到当前目录下的其它近百个工作簿中,保持原有的工作表名不变,同时把其中的公式更新为引用当前工作簿的内容。

二、算法分析

如果手工复制、粘贴,然后用查找替换的方法更新公式,可能会改变工作表的格式,同时也会非常的繁琐、耗时。

所以考虑使用VBA来批量解决这一问题。算法步骤如下:

  1. 要获取工作簿1中工作表B的内容
  2. 遍历当前目录下所有的xls文件,并排除掉工作簿1.xls
  3. 批量打开文件后,进行复制,然后更新公式,最后是保存。

三、代码展示

以下是通过VBA编写的程序,需要将这个程序放在工作簿1.xls中新建的模块里,然后运行就可以了。

Sub BatchCopyWorksheetFromAnotherWorkbook()
    Dim fso As Object
    Dim folderPath As String
    Dim file As Object
    Dim sourceWorkbook As Workbook
    Dim targetWorkbook As Workbook
    Dim targetWorksheet As Worksheet
    Dim sourceWorksheet As Worksheet
    Dim sourceWorkbookName As String
    Dim sourceWorksheetName As String
    ' 获取当前目录路径
    folderPath = ThisWorkbook.Path
    
    ' 创建FileSystemObject对象
    Set fso = CreateObject("Scripting.FileSystemObject")
    sourceWorkbookName = ActiveWorkbook.Path & "/工作簿1.xls"  ' 替换为实际的源工作簿文件名
    sourceWorksheetName = "工作表B"  ' 替换为实际的源工作表名称
    Set sourceWorkbook = Workbooks.Open(sourceWorkbookName) 
    
    ' 遍历当前目录下的所有文件
    For Each file In fso.GetFolder(folderPath).Files
        ' 排除文件名中包含"工作簿1.xls"的文件
        If Not file.Name Like "*工作簿1.xls*" And file.Name Like "*.xls*" Then
            ' 打开源工作簿
            Set targetWorkbook = Workbooks.Open(file.Path)
            
            ' 创建目标工作表
            'Set targetWorkbook = ThisWorkbook ' 当前工作簿
            'Set targetWorksheet = targetWorkbook.Sheets.Add(After:=targetWorkbook.Sheets(targetWorkbook.Sheets.Count))
            'targetWorksheet.Name = "工作表B"
            
            ' 复制源工作表到目标工作簿
            Set sourceWorksheet = sourceWorkbook.Sheets(sourceWorksheetName) ' 替换为实际的源工作表名称
            'sourceWorksheet.Copy After:=targetWorksheet
            
            sourceWorksheet.Copy After:=targetWorkbook.Sheets(targetWorkbook.Sheets.Count)
            
            ' 替换公式中的引用
            targetWorkbook.Sheets(targetWorkbook.Sheets.Count).Cells.Replace What:="[工作簿1.xls]", Replacement:="", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
                
            ' 关闭源工作簿,不保存更改
            targetWorkbook.Close SaveChanges:=True

        End If
    Next file
End Sub

四、学后反思

  1. VBA在操作Excel方面优势明显,尤其是在格式复制方面更为突出。
  2. VBA中要用绝对引用,不要用相对引用,否则可能会报错。
  3. 编写前开启:Option Explicit,明确要求所有的变量都要提前声明。
  4. VBA也是面向对象的编程语言,和Python有相通之处,因此可以相互借鉴。

你可能感兴趣的:(VBA,excel,java,linux,vba)