从单元格dynamic引用表格 – VBA

我不确定这是否可能,但这是我没有find答案的一件事。

我创build了一个模板工作簿Schedule.xls ,由不同的人填写,比如personApersonBpersonC 。 我需要从每个工作簿中提取相同的范围,方法是将其复制并粘贴到主文件Master.xls ,以便我可以将每个人的信息导入到主工作簿中。

Master.xls将有Master.xls Schedule.xls人一样多的表。

例如,让我们留下这三个人: personApersonBpersonC

一旦他们生成他们的时间表,我想获得这些信息,并将其复制到Master.xls ,但在名为personApersonBpersonC单独的工作表中。

我想通过在Schedule.xls设置一个单元格来做到这一点,比如A1 ,人们可以在personApersonBpersonC之间select一个值。

这样我就可Master.xls的表单创build一个dynamic引用。 其中macros将粘贴信息。

 `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` 

我应该写什么,而不是参考设置我想写在工作表上?

提前致谢。

我会build议一个简单的,无代码的方法。 然后,我会给你一些VBA代码,以便你的具体要求。

将两个工作簿Carl的SlaveWB.xlsx和Master.slxm放在同一个文件夹中,以方便操作。 在这两个电子表格中打开要同步的工作表(单向复制)。 为这个简单的例子手动创build这些表。 现在,单击主工作表中的单元格A1。 在编辑模式下,键入“=”,然后单击Carl的工作表中的单元格A1(在其他工作簿中)。 您的工作performance在已链接。 你可以这样做,不只是为了A1,而是整个工作表 – 只需要复制/粘贴单元格A1到整个工作表。 现在,卡尔可以把他的工作车在路上。 这是他如何检查。他只是将他的最新工作簿复制到您预先指定的文件夹中。 当您打开主工作簿时,它将自动从Carl的“签入”工作簿中提取所有数据。

如果你喜欢从一个工作簿复制到另一个(捕捉格式),这并不困难。

首先,重命名或删除master中的旧“Carl”工作表。 这是按名称删除工作表的代码。 如果主表中的工作表的名称存储在Carl的“Sheet1”工作表(单元格A1)中,则可以将其作为WSName:Workbooks(“SlaveWB”).Table(“Sheet1”)的值传递。 )。值。

 '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的工作簿复制到主人。 下面的代码将srcWBName中的工作表复制到tgtWBName中,并将它们命名为tgtWBName。 我build议你只保留电子表格中的代码。 在每个用户所拥有的每个副本中放置相同的代码太冒险了。 而且,这将很难pipe理代码更新。

 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 

而已。 我希望这有帮助。