Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 宏从主选项卡中的列表在Excel中创建新选项卡,并使用相同名称填充每个选项卡中的单元格_Vba_Excel_Tabs - Fatal编程技术网

Vba 宏从主选项卡中的列表在Excel中创建新选项卡,并使用相同名称填充每个选项卡中的单元格

Vba 宏从主选项卡中的列表在Excel中创建新选项卡,并使用相同名称填充每个选项卡中的单元格,vba,excel,tabs,Vba,Excel,Tabs,我在“主”选项卡的列表中找到了创建和命名新选项卡的代码,但我还需要在每个新选项卡的单元格中填充名称。此外,我需要每个新选项卡包含一个模板(与主选项卡不同),该模板只是一个带有标题的空白表,一些列中内置了一些公式。每个新选项卡都应该具有完全相同的模板,但要填充一个单元格(表的标题)以匹配选项卡的名称 最后,我需要用户打开工作簿,在主选项卡中填充一个列表(不总是相同的长度,可能只有1),然后按下按钮(运行宏),并按照上述步骤创建选项卡。似乎我需要创建一个包含要复制的模板的隐藏选项卡?这可能吗?如蒙指

我在“主”选项卡的列表中找到了创建和命名新选项卡的代码,但我还需要在每个新选项卡的单元格中填充名称。此外,我需要每个新选项卡包含一个模板(与主选项卡不同),该模板只是一个带有标题的空白表,一些列中内置了一些公式。每个新选项卡都应该具有完全相同的模板,但要填充一个单元格(表的标题)以匹配选项卡的名称


最后,我需要用户打开工作簿,在主选项卡中填充一个列表(不总是相同的长度,可能只有1),然后按下按钮(运行宏),并按照上述步骤创建选项卡。似乎我需要创建一个包含要复制的模板的隐藏选项卡?这可能吗?如蒙指导,不胜感激。谢谢

欢迎来到StackOverflow。以下几点是开始解决您的问题的要点:

  • 是的,这是可能的
  • Excel中没有选项卡,只有工作表
  • 带表格的模板是个好主意。您可以将其放在隐藏的工作表中,但请记住为此工作表设置非常不寻常的名称,如
    zZzmyVeryHiddenSheetzZz
    。这样,您可以非常肯定,没有人会尝试添加具有完全相同名称的工作表
  • 使用VBA,您可以使模板
    非常隐藏
    ,因此即使从“取消隐藏工作表”菜单也无法访问
  • 使用宏记录器!开始录制宏,执行希望执行的操作,停止录制并检查代码。您可以通过将光标放在宏代码中并按F8键来检查它的工作方式。代码所做的每一个更改都会立即出现在工作簿中
  • 录制宏时尝试使用键盘快捷键,例如,不要用鼠标选择范围,而是尝试使用
    shift+arrow
    ctrl+shift+arrow
    组合。这将生成更多的动态代码

  • 祝你好运

    假设您的母版图纸名为“母版”,模板名为“隐藏”。您应该能够根据需要调整下面的代码

    (提交我的答案有点晚,但我认为这将为您提供更大的灵活性,因为它更清楚正在发生的事情)


    使用宏记录器对一张工作表执行所需操作,然后创建一个循环,以便在添加工作表时对所有工作表执行该操作,并使用变量更改所需的特定单元格。与使用隐藏选项卡不同,您只需在代码中的每个新选项卡中创建表即可。我假设你说的“tab”是指工作表(tab在工作簿的底部)。选择新工作表,然后将单元格设置为工作表名称。这是easy cells(r,c)。value=WorksheetName,其中r和c是要填充的单元格的行和列,WorksheetName是一个字符串变量,其中包含要填充的“选项卡”的名称。从现在起,我将链接到这个答案,以给予信任。谢谢!如何处理主列表的长度因用户而异的问题?例如,当我录制宏时,列表中可能有5项要转换为工作表(而不是选项卡),但列表中并不总是有5项…@bsm726第6点是您问题的答案。用鼠标选择列表的第一个区域,然后按ctrl+shift+down_箭头并检查生成的代码。非常感谢!我会试试看!
    Private Sub CommandButton1_Click()
    Dim masterSheet As Worksheet
    Dim hiddenSheet As Worksheet
    Dim NewSheet As Worksheet
    Dim myBook As Workbook
    Dim lastRow As Long
    Dim i As Long
    Dim namesColumn
    
    'Define your workbook - here set as the active workbook, assuming it contains masterSheet and hiddenSheet
    Set myBook = ActiveWorkbook
    
    'Define your worksheets - The sheets are named "Master" and "Hidden" respectively
    Set masterSheet = myBook.Worksheets("Master")
    Set hiddenSheet = myBook.Worksheets("Hidden")
    
    'Define which column in your master tab the list is - here it's A i.e. column 1
    namesColumn = 1
    
    'Find the last row of the sheets list
    lastRow = masterSheet.Cells(masterSheet.Rows.Count, namesColumn).End(xlUp).Row
    
    'Cycle through the list - Assuming the list starts in column "A" from the 2nd row
    For i = 2 To lastRow
        With myBook
            'New sheet
            Set NewSheet = .Worksheets.Add(After:=.Worksheets("Master"))
        End With
    
        'Find name of the tab and naming the tab
        tabName = masterSheet.Cells(i, namesColumn)
        NewSheet.Name = tabName
    
        'Copy from hidden template - You can choose the ranges if predefined or use .Cells(r,c) to do something fancier
        hiddenSheet.Range("A1:F6").Copy _
            Destination:=NewSheet.Range("A2:F7")
    
        'Paste in e.g. cell A1 i.e. (1,1) the tab name
        NewSheet.Cells(1, 1).Value = tabName
    Next i
    
    End Sub