我已经有一段代码在运行超过3年了。突然在2016年7月28日,它停止了工作。
非常简单,我希望这是一个简单的解决方案(或者微软的更新可能会破坏它)
ThisWorkbook.Sheets(1).Select
ThisWorkbook.Sheets(2).Select (False) ' like holding ctrl
这将始终选择Sheet#1 AND Sheet#2。现在似乎"(假)"没有工作,它只会选择Sheet#1。我在5台不同的计算机上试过这个(所有Excel 2013)请告诉我发生了什么。
谢谢! -Mike
编辑: 这也不再适用。就像乔丹在评论中所说,它只是没有执行。
y = 9
ThisWorkbook.Sheets(1).Select
For y = 2 To x
ThisWorkbook.Sheets(y).Select (False) ' like holding ctrl
Next y
EDIT2: 由于似乎不是一个明确的答案,我会问有人可以帮助我解决方法:
ThisWorkbook.Sheets(Array(1 to x)).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
FolderName & "\" & QuoteFilename, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
显然这不起作用,但它应该得到我的观点。
解决方案:
感谢拉尔夫,我采取了一些摘录并创造了这个:
Private Sub Tester()
x = 5
ReDim SheetstoSelect(1 To x) As String
For y = 1 To x
SheetstoSelect(y) = ThisWorkbook.Sheets(y).Name
Next y
ThisWorkbook.Sheets(SheetstoSelect).Select
End Sub
这将从1-5中选择实际的Sheet#,并允许定义工作表以按实际工作表顺序进行选择。
仍然不知道最初问题的根源,但解决方法同样出色。
答案 0 :(得分:3)
以下几行代码将select
调用宏的工作簿中的所有工作表:
Option Explicit
Public Sub SelectAllSheetsInThisFile()
Dim x As Long
Dim SheetstoSelect() As String
ReDim SheetstoSelect(1 To ThisWorkbook.Worksheets.Count)
For x = 1 To ThisWorkbook.Worksheets.Count
SheetstoSelect(x) = ThisWorkbook.Worksheets(x).Name
Next x
ThisWorkbook.Worksheets(SheetstoSelect).Select
End Sub
以下子只会select
您在原始帖子中要求的两张纸:
Option Explicit
Public Sub SelectYourSheets()
Dim SheetstoSelect(1 To 2) As String
SheetstoSelect(1) = ThisWorkbook.Worksheets(1).Name
SheetstoSelect(2) = ThisWorkbook.Worksheets(2).Name
ThisWorkbook.Worksheets(SheetstoSelect).Select
End Sub
如果您希望将它全部放在一行中,那么您也可以使用split
动态创建一个数组:
ThisWorkbook.Worksheets(Split("Sheet1/Sheet3", "/")).Select
这行代码将select
两张名为Sheet1
和Sheet3
的表格。我选择了分隔符/
,因为这个字符不能用在工作表的名称中。
只是旁注:我同意@BruceWayne。您应该尽量避免完全使用select
(如果可能)。
答案 1 :(得分:1)
我的VBA在八月的第一周完美运行,然后我的PDF只有第一页。我正在使用与您类似的方法 - 我选择了许多工作表。我做了一个使用数组的工作。我的代码在表单中,但我会在此处发布以供参考。
Private Sub CommandButton2_Click()
Dim PrintArray() As Variant
'I used a form to select with checkboxes which worksheets to print, so this code would go inside the form linked to a command button
ReDim Preserve PrintArray(1 To 1)
PrintArray(1) = "Sheet 1 Name"
j = 1
If Sheet2.Value = True Then 'I used a checkbox to select which worksheets to print, but you could use any conditional statement here
j = j + 1
ReDim Preserve PrintArray(1 To j)
PrintArray(j) = "Sheet 2 Name"
End If
If Sheet3.Value = True Then 'I used a checkbox to select which worksheets to print, but you could use any conditional statement here
j = j + 1
ReDim Preserve PrintArray(1 To j)
PrintArray(j) = "Sheet 3 Name"
End If
'You could add as many pages and conditions as you need....
Unload Me 'because I was using a form
Sheets(PrintArray).Select
'Creates the PDF file name
FileNameforSave = "Name of New File" & ".pdf"
'Save file as a PDF
ActiveSheet.ExportAsFixedFormat xlTypePDF, Filename:= _
FileNameforSave, _
Quality:=xlQualityStandard, IncludeDocProperties:= _
True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End Sub
答案 2 :(得分:0)
我今天遇到了同样的问题。 由于我公司的更新时间表,可能会推迟;可能仍然是相同的更新。 我找到了你的线程,然后在实现你的解决方法之前我找到了一个更简单的线程:
private extractData(res: Response) {
if (res.status < 200 || res.status >= 300) {
throw new Error('Bad response status: ' + res.status);
}
let body = res.json();
return body || { }; // here
}
不再有效,但
ThisWorkbook.Sheets(1).Select
ThisWorkbook.Sheets(2).Select (False) ' like holding ctrl
ThisWorkbook.Sheets(3).Select (False)
确实