来自单元格的表格的动态参考 - VBA

时间:2016-10-06 00:45:18

标签: excel vba excel-vba

我不确定这是否可行,但这是我在网上找不到的一件事。

我创建了一个模板工作簿Schedule.xls,该工作簿将由不同的人填写,例如personApersonBpersonC。我需要通过复制它并将其粘贴到主文件Master.xls中从每个工作簿中提取相同的范围,以便我可以将每个人的信息都收集到此主题簿中。

Master.xls的张数与填充Schedule.xls的人一样多。

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

一旦他们生成了他们的日程安排,我想获取该信息并将其复制到Master.xls,但是在名为personApersonBpersonC的单独表格中。

我希望通过在Schedule.xls中设置一个单元格来说明A1,人们可以在personApersonBpersonC之间选择一个值

这样我可以在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 来设置我想写的表?

提前致谢。

1 个答案:

答案 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

就是这样。我希望这有帮助。