使用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
对象是否埋在工作表的其他位置?我在对象浏览器中找不到它。