尝试使用with语句打开特定页面

时间:2015-09-09 19:37:53

标签: excel excel-vba vba

我试过在任何地方寻找这个并且无法在任何地方找到它。

我有一个代码,我使用with语句来循环数据,我的问题是如何循环查看只有一个名为“Report”的特定页面,它始终是工作表中的第一个工作表。这是我没有的编码。

Set TargetFiles = Application.FileDialog(msoFileDialogOpen)
With TargetFiles
.Application.Worksheets(1).Activate
.AllowMultiSelect = True
.Title = "Multi-select target data files:"
.ButtonName = ""
.Filters.Clear
.Filters.Add ".xlsm files", "*.xlsm"
.Show
End With

我放入的部分

 .Application.Worksheets(1).Activate 

没有做我想做的事。基本上,这是一组更大的代码的一部分,这些代码循环通过用户选择的范围并复制和粘贴到新工作簿,只有在它们全部保存在正确的工作表上时才有效。我从这个问题线程中学到了整体编码: Copying worksheets from multiple workbooks into current workbook

所以有2个选项作为答案(我赞成两者)并且两者都有效但我想将每个部分组合起来。一个用户选择工作表,但要工作,他们都必须在正确的工作表上,另一方面,你必须将文件保存到特定的文件夹。我想让用户选择文件选项,但仍然根据特定工作表名称“报告”或工作表(1)等位置组合它们。

任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

打开工作簿后,遍历设置活动ws的每个工作簿。

Public Sub LoopOpenWorkbooks()
    Dim wb As Workbook
    Dim ws As Excel.Worksheet

    'Loop though each workbook
    For Each wb In Application.Workbooks

        'Activate the workbook
        wb.Activate

        'Set the worksheet and activate it.
        Set ws = ActiveWorkbook.Sheets("Report")
        ws.Activate

        'Now here you can loop through a user selected range and copies and pastes to a new workbook

    Next wb

End Sub

或者您可以按索引设置工作表。

Set ws = Application.Worksheets(1)

答案 1 :(得分:0)

您似乎想要选择多个工作簿并在每个工作表的第一个工作表上工作。 msoFileDialogOpen提供了一个名单列表;它实际上并没有将工作簿打开到当前的应用程序环境中。

Dim f As Long, TargetFiles As Object
Set TargetFiles = Application.FileDialog(msoFileDialogOpen)
With TargetFiles
    .AllowMultiSelect = True
    .Title = "Multi-select target data files:"
    .ButtonName = ""
    .Filters.Clear
    .Filters.Add ".xlsm files", "*.xlsm"
    .Show

    For f = 1 To .SelectedItems.Count
        Debug.Print .SelectedItems(f)
        With Workbooks.Open(.SelectedItems(f))
            With .Worksheets(1)
                'work with the first worksheet in the open workbook
            End With
            .Close
        End With
    Next f

End With

有关将其用于工作簿/工作表/单元格范围的父级别的更多信息,请参阅With ... End With statement,以便您可以避免使用Worksheet.Activate method