Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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,如何在多个工作表上选择多行进行打印?_Vba_Excel_Ms Office_Excel 2010 - Fatal编程技术网

使用VBA,如何在多个工作表上选择多行进行打印?

使用VBA,如何在多个工作表上选择多行进行打印?,vba,excel,ms-office,excel-2010,Vba,Excel,Ms Office,Excel 2010,我有一个包含多个工作表的电子表格。我需要选择某些工作表中的所有行,以便可以将所有选定工作表中的所有行打印到单个文档中 以下代码用于选择要打印的所有相关工作表和行。在我尝试从第二个工作表中选择行之前,此代码一直有效 Dim no_selected_worksheets As Boolean no_selected_worksheets = True Dim list_choose As Long For list_choose = 0 To FormsToPrint.ListCount - 1

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

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

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

如何修复此错误?

我认为对某个范围使用
。选择
的唯一方法是让工作表处于“活动”状态。这应该能回答你的问题,但我认为你自己把事情弄复杂了

.
.
Else
    .Activate       ' new line
    .Select (False) 
    .Rows.Select
End If
.
.
在Excel宏中,我尽量避免使用。选择并直接引用范围。例如,如果我想将值从一个范围复制到另一个范围,它将类似于:

Worksheets(2).Range("A1").Value = Worksheets(1).Range("A1").Value
此外,看起来您正在按索引号循环浏览工作表,从第二个开始,直到到达ListCount。请注意,图纸索引会根据选项卡顺序进行更改。您最好使用“For Each”循环遍历工作簿中的所有工作表,并将每个工作表的名称与白名单或黑名单进行比较

类似这样:

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

您是否尝试在每张图纸上设置打印区域,而不是打印所选行?尝试在出现问题的代码行之前添加
。激活
。。。换句话说,您需要先激活此工作表,然后才能尝试选择其中的任何行。@TimWilliams。不。我承认,虽然我可以用Excel分析数字,但这个电子表格所做的远比我实现的要多。您介意发布一个带有代码的答案,说明如何在VBA中正确设置打印区域吗?@KazJaw,我添加了activate语句。这个错误消失了,但是,我有另一个问题。正在打印所有工作表。我知道这可能看起来很愚蠢,但我的知识来自于阅读了大量相互矛盾的帮助,而且我发现没有一个解决方案真正起作用。这是我能做到的最近的一次。嘿,蒂姆,我确实试着自己解决这个问题。工作表类似乎没有
PrintArea
属性。如果我移动“.”,以便访问全局PrintArea对象,它将只打印列表中选定的最后一个工作表。
PrintArea
对象是否埋在工作表的其他位置?我在对象浏览器中找不到它。