Excel 以编程方式创建动态工作表

Excel 以编程方式创建动态工作表,excel,vba,copy,Excel,Vba,Copy,(见下图) 我在一个文件夹里有一套excel工作簿。我想将这些文件中的数据复制到另一个excel主控表中。将根据文件夹中的文件数填写主控表 在源文件中,J20+J18应该位于黄色框中。首先需要进行一些编辑 这就是我到目前为止所做的: Set dstWB = Workbooks.Open(ThisWorkbook.path & "\master.xlsx") Set dstWS = dstWB.Sheets("CPU")

(见下图)

我在一个文件夹里有一套excel工作簿。我想将这些文件中的数据复制到另一个excel主控表中。将根据文件夹中的文件数填写主控表

在源文件中,J20+J18应该位于黄色框中。首先需要进行一些编辑

这就是我到目前为止所做的:

    Set dstWB = Workbooks.Open(ThisWorkbook.path & "\master.xlsx")
    Set dstWS = dstWB.Sheets("CPU")

    Set srcWB = Workbooks.Open(ThisWorkbook.path & "\CPU\Source1_CPU.xlsx", True, True) 
    Set srcWS = srcWB.Sheets("Microsoft.SystemCenter.DataWare")
          
    
    srcWS.Pictures(4).Copy 
    dstWS.Range("A8").PasteSpecial
        
    
原始文件中的图片大小为H:3.59“x W 8.14”

样本输出:

让我们试着从这个开始

首先,它很简单,在我的工作中也使用一些类似的函数

首先,你得问问自己,你想让它保持多高的可维护性,因为如果你想维护很多,我建议你使用一个类模块和一个宏

据我所知,你想在一个文件夹中浏览所有的excels,我们有一个很好的脚本来让这变得简单和可能,你可以单独运行它,所以试试看

要获得更多帮助,我需要您想做什么的更多详细信息,因为这就是您所要求的。您可以提供更多信息,现在可以添加一个计数器,在该计数器中,每次打开文件夹中的excel文件时,您都可以添加+1,这样您就可以跟踪文件夹中excel文件的数量。

    Sub LoopAllExcelFilesInFolder()
'PURPOSE: To loop through all Excel files in a user specified folder and perform a set task on them
'SOURCE: www.TheSpreadsheetGuru.com

Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim FldrPicker As FileDialog

'Optimize Macro Speed
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual

'Retrieve Target Folder Path From User
  Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)

    With FldrPicker
      .Title = "Select A Target Folder"
      .AllowMultiSelect = False
        If .Show <> -1 Then GoTo NextCode
        myPath = .SelectedItems(1) & "\"
    End With

'In Case of Cancel
NextCode:
  myPath = myPath
  If myPath = "" Then GoTo ResetSettings

'Target File Extension (must include wildcard "*")
  myExtension = "*.xls*"

'Target Path with Ending Extention
  myFile = Dir(myPath & myExtension)

'Loop through each Excel file in folder
  Do While myFile <> ""
    'Set variable equal to opened workbook
      Set wb = Workbooks.Open(Filename:=myPath & myFile)
    
    'Ensure Workbook has opened before moving on to next line of code
      DoEvents
    
    'Change First Worksheet's Background Fill Blue
      wb.Worksheets(1).Range("A1:Z1").Interior.Color = RGB(51, 98, 174)
    
    'Save and Close Workbook
      wb.Close SaveChanges:=True
      
    'Ensure Workbook has closed before moving on to next line of code
      DoEvents

    'Get next file name
      myFile = Dir
  Loop

'Message Box when tasks are completed
  MsgBox "Task Complete!"

ResetSettings:
  'Reset Macro Optimization Settings
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

End Sub
Sub-LoopAllExcelFilesInFolder()
'用途:循环浏览用户指定文件夹中的所有Excel文件并对其执行设置任务
来源:www.TheSpreadsheetGuru.com
将wb设置为工作簿
将myPath设置为字符串
将myFile设置为字符串
Dim myExtension作为字符串
Dim FldrPicker As FILE对话框
'优化宏速度
Application.ScreenUpdating=False
Application.EnableEvents=False
Application.Calculation=xlCalculationManual
'从用户检索目标文件夹路径
Set FldrPicker=Application.FileDialog(msoFileDialogFolderPicker)
用FldrPicker
.Title=“选择目标文件夹”
.AllowMultiSelect=False
如果.Show-1,则转到下一个代码
myPath=.SelectedItems(1)和“\”
以
"如果取消,
下一个代码:
myPath=myPath
如果myPath=”“,则转到重置设置
'目标文件扩展名(必须包含通配符“*”)
myExtension=“*.xls*”
'具有结束扩展名的目标路径
myFile=Dir(myPath&myExtension)
'循环浏览文件夹中的每个Excel文件
当我的文件“”时执行此操作
'将变量设置为等于打开的工作簿
设置wb=Workbooks.Open(文件名:=myPath&myFile)
'在继续下一行代码之前,确保工作簿已打开
多芬特
'更改第一个工作表的背景填充为蓝色
wb.工作表(1).范围(“A1:Z1”).Interior.Color=RGB(51,98,174)
'保存并关闭工作簿
wb.Close SaveChanges:=真
'在继续下一行代码之前,确保工作簿已关闭
多芬特
'获取下一个文件名
myFile=Dir
环
'任务完成时的消息框
MsgBox“任务完成!”
重置设置:
'重置宏优化设置
Application.EnableEvents=True
Application.Calculation=xlCalculationAutomatic
Application.ScreenUpdating=True
端接头
创建报告
选项显式
子CPU()
Const ProcName As String=“createCPU”
关于错误转到clearError
"来源:
常量扩展名为String=“xlsx”
Const srcName As String=“Microsoft.SystemCenter.DataWare”
Const srcList As String=“J20,J18”
常量picIndex的长度=1
常量子文件夹为String=“\CPU”
“目的地
Const dstWbName As String=“master.xlsx”
常量dstName为String=“CPU”
Const dstAddr As String=“A1:G38”
Const dstList As String=“B2,B29”'B2而不是B5,因为“Merge”。
常量dstMergeOffset的长度=3
Const picAddress As String=“A8”
长度=7时的常数列偏移
'将文件路径从源文件夹路径写入文件路径数组。
将srcFolderPath设置为字符串:srcFolderPath=此工作簿。路径和子文件夹
变暗文件路径作为变量
filepath=getFilePathsInFolder(srcFolderPath,扩展名,1)'基于一个
如果为空(文件路径),则
MsgBox“在文件夹“”中找不到匹配的工作簿(&srcFolderPath)_
&“!”,vbCritical,“失败”
转到出口
如果结束
'将单元格地址写入阵列。
Dim srccell()作为字符串:srccell=Split(srcList,“,”)以零为基础
Dim dstCells()作为字符串:dstCells=Split(dstList,“,”)以零为基础
Application.ScreenUpdating=False
'格式化目标工作表。
将wbDst设置为工作簿
设置wbDst=Workbooks.Open(thishworkbook.Path&“\”&dstWbName)
将dst设置为工作表:设置dst=wbDst.Worksheets(dstName)
ClearTemplateDST
格式模板dst
变暗rng As范围
我认为时间很长
尽可能长
fpCount=UBound(文件路径)
如果fpCount>1,则
对于fp=2到fpCount
具有dst.范围(dstAddr)
设置rng=dst.范围(dstAddr).偏移量(,(fp-1)*colOffset)
格式列宽度
.复制rng
以
下一个fp
如果结束
'复制数据。
将wbSrc设置为工作簿
Dim src As工作表
我认为只要
长
对于fp=1到fpCount
设置wbSrc=Workbooks.Open(文件路径(fp)、True、True)
Set src=wbSrc.Worksheets(srcName)
src.图片(picIndex).复制
dst.范围(picAddress).Offset(,(fp-1)*colOffset.PasteSpecial
'合并技巧(偏移量不能很好地处理合并的单元格。)
dst.范围(dst单元格(0)).偏移量(dstMergeOffset,(fp-1)*colOffset)_
.Value=src.Range(srccell(0)).Value
dst.Range(dst单元格(1)).Offset(,(fp-1)*colOffset.Value_
=src.Range(srccell(0)).Value&vbLf_
&src.Range(src单元格(1))值
wbSrc.Close SaveChanges:=False
下一个fp
'保存和/或通知用户。
dst.范围(“A1”)。选择
Application.DisplayAlerts=False“抑制文档检查器混乱”