0

我有一个包含多个工作表的电子表格。我需要选择某些工作表中的所有行,以便可以将所有选定工作表中的所有行打印到单个文档中。

以下代码用于选择要打印的所有相关工作表和行。此代码有效,直到我尝试从第二个工作表中选择行。

Dim no_selected_worksheets As Boolean
no_selected_worksheets = True

Dim list_choose As Long
For list_choose = 0 To FormsToPrint.ListCount - 1
    If FormsToPrint.Selected(list_choose) Then
        With Worksheets(list_choose + 2)
            If no_selected_worksheets Then
                .Select      'This works.
                .Rows.Select 'So does this.
                no_selected_worksheets = False
            Else
                .Select (False) 'This works too..
                .Rows.Select    ' but here, VBA reports the error:
                                ' "Select Method of Range class failed"
            End If
        End With
    End If
Next

我该如何修复这个错误?

4

2 回答 2

1

像这样的东西:

Sub Tester()

Dim i As Long
Dim list_choose As Long

    For list_choose = 0 To FormsToPrint.ListCount - 1
        i = i + 1
        If FormsToPrint.Selected(list_choose) Then
            With Worksheets(list_choose + 2)
                .Select (i = 1)
                'EDIT below
                .PageSetup.PrintArea = .UsedRange.Address(false,false)
            End With
        End If
    Next

    ActiveWindow.SelectedSheets.PrintOut Copies:=1
End Sub
于 2013-09-04T17:30:18.930 回答
0

我相信.select在范围上使用的唯一方法是让工作表“活动”。这应该回答你的问题,但我认为你自己把事情复杂化了。

.
.
Else
    .Activate       ' new line
    .Select (False) 
    .Rows.Select
End If
.
.

在 Excel 宏中,我尽量避免使用 .select 而是直接引用范围。例如,如果我想将值从一个范围复制到另一个范围,则类似于:

Worksheets(2).Range("A1").Value = Worksheets(1).Range("A1").Value

此外,看起来您正在按索引号遍历工作表,从第二个开始,直到到达 ListCount。请注意,工作表索引会根据 Tab 键顺序发生变化。您最好使用“For Each”循环遍历工作簿中的所有工作表,并将每个工作表的名称与白名单或黑名单进行比较。

于 2013-09-04T17:30:01.457 回答