【问题标题】:Create Worksheet from Master sheet and hyperlink them in Excel从主表创建工作表并在 Excel 中超链接它们
【发布时间】:2020-12-31 15:56:39
【问题描述】:
  1. 我有一个按行列出所有数据的主工作表。
  2. 为每条唯一记录添加更多详细信息的模板
  3. 需要为“C”列中的每个条目创建一个工作表,并使用相应行的名称 (D) 和联系人 (E) 列中的详细信息更新模板。
  4. 然后将相应的工作表与行中的条目超链接。

在这里的几篇文章的帮助下,我能够在下面运行创建表格的代码,但我需要帮助从主表格填充模板中的数据并创建超链接

Option Explicit
Sub SheetsFromTemplate()
Dim wsMASTER As Worksheet, wsTEMP As Worksheet, wasVISIBLE As Boolean
Dim shNAMES As Range, Nm As Range

With ThisWorkbook                
    Set wsTEMP = .Sheets("Template")
    wasVISIBLE = (wsTEMP.Visible = xlSheetVisible) 
    If Not wasVISIBLE Then wsTEMP.Visible = xlSheetVisible 
    
    Set wsMASTER = .Sheets("Master")

    Set shNAMES = wsMASTER.Range("C4:C" & Rows.Count).SpecialCells(xlConstants) 
    
    Application.ScreenUpdating = False
    For Each Nm In shNAMES
        If Not Evaluate("ISREF('" & CStr(Nm.Text) & "'!A1)") Then
           wsTEMP.Copy After:=.Sheets(.Sheets.Count)
           ActiveSheet.Name = CStr(Nm.Text)
        End If
    Next Nm
    
    wsMASTER.Activate 
    If Not wasVISIBLE Then wsTEMP.Visible = xlSheetHidden
    Application.ScreenUpdating = True
End With

     MsgBox "All sheets created"
End Sub

经常更新的主表

示例工作表

模板

【问题讨论】:

  • 那么到目前为止,您尝试了什么?你在哪里遇到问题?请在您的问题中包含这一点。
  • 感谢 braX,刚刚添加了额外的 cmets 并需要帮助
  • 我会说循环检查表中的名称与您的主文件中的 D 列(使用.FindApplication.Match)如果匹配,则在主文件之间执行.value = .value并使用相关单元格循环工作表(如果您希望脚本更简洁,请在相关单元格中再循环一次)。
  • 谢谢西蒙,我不太擅长 VBA,还是个菜鸟。你能帮我放代码吗?

标签: excel vba


【解决方案1】:

试试这样的:

Sub SheetsFromTemplate()
    
    Dim wsMaster As Worksheet, wsTemp As Worksheet, wasVisible As Boolean
    Dim shNames As Range, Nm As Range, wsEntry As Worksheet, entryName
    
    With ThisWorkbook
        Set wsTemp = .Sheets("Template")
        wasVisible = (wsTemp.Visible = xlSheetVisible)
        If Not wasVisible Then wsTemp.Visible = xlSheetVisible
        
        Set wsMaster = .Sheets("Master")
    
        Set shNames = wsMaster.Range("C4:C" & Rows.Count).SpecialCells(xlConstants)
        
        Application.ScreenUpdating = False
        For Each Nm In shNames
            entryName = Nm.Text
            Set wsEntry = Nothing 'EDIT
            On Error Resume Next 'ignore error if no sheet with this name
            Set wsEntry = .Sheets(entryName)
            On Error GoTo 0 'stop ignoring errors
            If wsEntry Is Nothing Then
               wsTemp.Copy After:=.Sheets(.Sheets.Count)
               Set wsEntry = .Sheets(.Sheets.Count) 'get the copy
               wsEntry.Name = CStr(Nm.Text)
            End If
            With wsEntry
                'transfer/update values from Master sheet
                .Range("B2").Value = entryName
                .Range("B3").Value = Nm.Offset(0, 1)
                '...etc
                wsMaster.Hyperlinks.Add Anchor:=Nm, Address:="", _
                    SubAddress:=wsEntry.Range("A1").Address(, , , True), _
                    TextToDisplay:=Nm.Text
            End With
        Next Nm
        
        wsMaster.Activate
        If Not wasVisible Then wsTemp.Visible = xlSheetHidden
        Application.ScreenUpdating = True
    End With
    MsgBox "All sheets created"
End Sub

【讨论】:

  • 谢谢蒂姆,但这会创建第一条记录并停止,它没有循环。
  • 它停在哪里?您检查过shNames 的范围及其所指的内容吗?
  • 它在第一条记录处停止,但为 Row 中的所有条目创建超链接并链接到第一条记录。 shNames 范围是 C4:C(直到最后一个条目)
  • 非常感谢@Tim Williams,完美运行。也学到了很多。
猜你喜欢
  • 2018-10-26
  • 2017-06-14
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多