我不确定这是否可行,但这是我在网上找不到的一件事。
我创建了一个模板工作簿Schedule.xls
,该工作簿将由不同的人填写,例如personA
,personB
和personC
。我需要通过复制它并将其粘贴到主文件Master.xls
中从每个工作簿中提取相同的范围,以便我可以将每个人的信息都收集到此主题簿中。
此Master.xls
的张数与填充Schedule.xls
的人一样多。
例如,让我们留下这三个人:personA
,personB
和personC
。
一旦他们生成了他们的日程安排,我想获取该信息并将其复制到Master.xls
,但是在名为personA
,personB
和personC
的单独表格中。
我希望通过在Schedule.xls
中设置一个单元格来说明A1
,人们可以在personA
,personB
和personC
之间选择一个值
这样我可以在Master.xls
中为工作表创建动态参考。其中宏将粘贴信息。
`Range("B2.D5").Select
Selection.Copy
Workbooks.Open Filename:= _
"C:\My Documents\Master.xlsx"
Sheets(*REFERENCE*).Select
Range("B2").Select
ActiveSheet.Paste
Range("A1").Select
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWorkbook.Close`
我应该写什么而不是 REFERENCE 来设置我想写的表?
提前致谢。
答案 0 :(得分:0)
我会建议一种简单的无代码方法。然后,我会根据您的具体要求为您提供一些VBA代码。
为简单起见,将两个工作簿Carl's SlaveWB.xlsx和Master.slxm放在同一个文件夹中。在两个电子表格中打开要同步的工作表(单向复制)。为此简单示例手动创建这些工作表。现在,单击主工作表中的单元格A1。在编辑模式下,键入“=”,然后单击Carl工作表中的单元格A1(在另一个工作簿中)。您的工作表现已关联。您不仅可以为A1而且可以为整个工作表执行此操作 - 只需将单元格A1复制/粘贴到整个工作表即可。现在,卡尔可以把他的工作带到路上。这是他检查的方式。他只是将他的最新工作簿复制到预先指定的文件夹中。当您打开主工作簿时,它将自动从Carl的“签入”工作簿中提取所有数据。
如果您希望从一个工作簿复制到另一个工作簿(以捕获格式),则不难。
首先,重命名或删除master中的旧“Carl”工作表。以下是按名称删除工作表的代码。如果主文件中的工作表名称存储在Carl的“Sheet1”工作表单元格A1中,则可以将其作为WSName:Workbooks(“SlaveWB”)的值传递。表格(“Sheet1”)。单元格(1,1) )。价值。
'DeleteWorksheet(WSName)
Public Function DeleteWorksheet(WSName As String)
'If Not IIf(IsNull(DebugMode), False, DebugMode) Then On Error GoTo FoundError
If Not Range("DebugMode").Value Then On Error Resume Next
Dim WorksheetExists As Boolean
DeleteWorksheet = False
'if no worksheet name provided, abort
If Len(WSName) < 1 Then Exit Function
'if worksheet exists, delete
WorksheetExists = False
On Error Resume Next
WorksheetExists = (Sheets(WSName).Name <> "") 'if worksheet exists, set WorksheetExists = True
On Error GoTo FoundError
If WorksheetExists Then Sheets(WSName).Delete 'if worksheet exists, delete
DeleteWorksheet = True 'function succeeded (deleted worksheet if it existed)
Exit Function
FoundError:
On Error Resume Next
DeleteWorksheet = False
Debug.Print "Error: DeleteWorksheet(" & WSName & ") failed to delete worksheet. "
End Function
接下来,将修改后的工作表从Carl的工作簿复制到master。下面的代码将工作表从srcWBName复制到tgtWBName,并在tgtWBName中为表单命名。我重新建议您仅将代码保留在主电子表格中。在每个用户持有的每个副本中放置相同的代码风险太大。并且,管理代码更新将很困难。
Sub CopyWSBetweenWBs(srcWBName As String, srcWSName As String, _
tgtWBName As String, tgtWSName As String)
'srcWBName - name of PersonA's workbook
'srcWSName - name of worksheet to copy from Person A's workbook
'tgtWBName - target workbook, the master
'tgtWSName - what you want to call the worksheet after copying it to the target/master.
' If you want this sheetname to be taken from a cell, just pass the cell
' reference. For example, this can be
' Workbooks(srcWBName).Sheets(srcWSName).Cells(1,1).Value
Dim srcWB As Workbook
Dim srcWS As Worksheet
Dim tgtWB As Workbook
Dim tgtWS As Worksheet
'Create XL objects
Set srcWB = Workbooks(srcWBName)
Set srcWS = srcWB.Worksheets(srcWSName)
Set tgtWB = Workbooks(tgtWBName)
Set tgtWS = tgtWB.Worksheets(tgtWSName)
' Start at the source
srcWB.Activate
srcWS.Activate
' Copy to target workbook
srcWS.Copy Before:=tgtWB.Sheets(1) '<~~ copy to beginning of workbook
' After copying the worksheet, it is active, so you can rename it now.
ActiveSheet.Name = tgtWSName
End Sub
就是这样。我希望这有帮助。