如何使用工作表名称从多个工作表中收集数据

时间:2014-07-28 19:18:00

标签: vba excel-vba excel

感谢您的回复!

然而,您发送的代码从工作簿的开头开始。但它不应该。

例如,工作簿包含工作表(只有用户知道工作表名称,因此我们无法在代码上提供工作表名称),如下所示

概要/版本/ AA / BB / CC / DD /最终

如果beginheet = AA,那么代码应该开始从AA收集数据,如果endsheet = DD则代码应该停止在Final收集数据。只有DD有效。

那么我们怎样才能做到这一点。

2 个答案:

答案 0 :(得分:0)

你可以做一个FOR - EACH:For each theSheets in ActiveWorkbook.Sheets

For each theSheets in ActiveWorkbook.Sheets
    Sheets(theSheets.Name).Select
    msgbox(theSheets.Name)
next

我只是将MSGBOX用于显示工作表的名称。此外,选择是没有必要我把它放在那里只是为了显示它从一张纸到另一张是如何变化的。

如果您不想搜索所有工作表(每张工作表)但需要搜索指定数量的工作表,则可以将工作表名称分配给集合并迭代该集合;在这种情况下,你必须知道床单的名称。

答案 1 :(得分:0)

抱歉,我没有得到你的第一个问题...... 好吧,我不知道这个解决方案对你来说有多实用,但你可以做到以下几点:

  1. 当您打开工作簿时,使用表格的名称创建CheckBoxes:

    Private Sub Workbook_Open() Dim row As Integer row = 14 For Each mysheets In ActiveWorkbook.Sheets ActiveSheet.CheckBoxes.Add(20, row, 50, 20).Select With Selection .Caption = mysheets.Name .Value = xlOff .LinkedCell = "C" & ToRow .Display3DShading = False End With row = row + 50 Next End Sub

  2. 让用户选择适用的表格。

  3. 使用所选CheckBoxes的“文本”填充一个集合(这将是工作表的名称)

  4. 遍历集合中的工作表

    将allSelectedSheets昏暗为新集合     Public Sub FindSelectedCkBox()

        For Each ckbox In ActiveSheet.CheckBoxes
            If ckbox.Value > 0 Then
                allSelectedSheets.Add ckbox.Text
            End If
        Next
        iterateThroughSheets
    End Sub
    

    Sub iterateThroughSheets()             对于每个theSheets in allSelectedSheets                 ActiveWorkbook.Sheets(theSheets)。选择             下一个         End Sub

  5. 确保在打开图书时删除CheckBox,这样就不会有重复项。