Copia por lotes de VBA la tabla de Excel y actualiza la fórmula en la tabla

1. Presentación de la pregunta

Hay una plantilla de libro de trabajo 1, que tiene dos hojas de trabajo, la Hoja A y la Hoja B. Ahora es necesario copiar por lotes la hoja de trabajo B en el libro de trabajo 1 a casi cien otros libros de trabajo en el directorio actual, mantener el nombre de la hoja de trabajo original sin cambios y actualizar las fórmulas en ella para hacer referencia al contenido del libro de trabajo actual.

2. Análisis de algoritmos

Si copia y pega manualmente y luego usa el método de buscar y reemplazar para actualizar la fórmula, el formato de la hoja de trabajo puede cambiar y también será muy engorroso y consumirá mucho tiempo.

Así que considere usar VBA para resolver este problema en lotes. Los pasos del algoritmo son los siguientes:

  1. Para obtener el contenido de la hoja B en el libro de trabajo 1
  2. Recorra todos los archivos xls en el directorio actual y excluya el libro de trabajo 1.xls
  3. Después de abrir los archivos por lotes, cópielos, luego actualice las fórmulas y finalmente guárdelos.

3. Visualización de código

El siguiente es un programa escrito por VBA. Debe colocar este programa en el módulo recién creado en el libro de trabajo 1.xls y luego ejecutarlo.

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

4. Reflexión post-escolar

  1. VBA tiene ventajas obvias en el funcionamiento de Excel, especialmente en la copia de formato.
  2. Las referencias absolutas deben usarse en VBA, no las referencias relativas, de lo contrario, se puede informar un error.
  3. Habilitar antes de escribir: Opción Explícita, que requiere explícitamente que todas las variables se declaren por adelantado.
  4. VBA también es un lenguaje de programación orientado a objetos y tiene algo en común con Python, por lo que pueden aprender unos de otros.

Supongo que te gusta

Origin blog.csdn.net/henanlion/article/details/131679547
Recomendado
Clasificación