ThisWorkbook.Sheets(1).Select(False)Not Working

我有一段代码已经运行了3年多了。 突然在2016年7月28日,它停止工作。

这是非常简单的,我希望这是一个简单的解决scheme(或者微软更新可能会破坏它)

ThisWorkbook.Sheets(1).Select ThisWorkbook.Sheets(2).Select (False) ' like holding ctrl 

这将始终select工作表#1和工作表#2。 现在看起来“(False)”不起作用,只会selectSheet#1。 我已经在5台不同的电脑上试过这个(所有的Excel 2013)请让我知道是怎么回事。

谢谢! -麦克风

编辑:这也不能工作了。 就像约旦在评论中所说的,它只是不执行。

 y = 9 ThisWorkbook.Sheets(1).Select For y = 2 To x ThisWorkbook.Sheets(y).Select (False) ' like holding ctrl Next y 

编辑2:因为似乎没有一个明确的答案,我会问,如果有人可以帮我一个解决方法:

 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中select实际的工作表编号,并允许通过实际工作表顺序来定义工作表。

仍然不知道最初的问题的根源,但解决方法是一样的好。

以下代码行将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来创build一个像这样的数组:

 ThisWorkbook.Worksheets(Split("Sheet1/Sheet3", "/")).Select 

这一行代码将select名称为Sheet1Sheet3两张表。 我select了分隔符/因为这个字符不能用在表格的名字中。

只是在旁注:我同意@BruceWayne。 你应该尽量避免使用select (如果可能的话)。

直到八月的第一个星期,我的VBA工作才完成,然后我的PDF只有第一页。 我正在使用类似的方法 – 在那里我select了许多工作表。 我做了一个使用数组的工作。 我的代码是在一个表单中,但我会在这里发布供参考。

 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 

今天我有同样的问题。 可能因为我公司的更新时间表而延误; 可能仍然是同样的更新。 我发现你的线程,然后就在实施你的解决方法之前,我发现了一个更简单的:

 ThisWorkbook.Sheets(1).Select ThisWorkbook.Sheets(2).Select (False) ' like holding ctrl ThisWorkbook.Sheets(3).Select (False) 

不工作了,但是

 ThisWorkbook.Sheets(1).Select ThisWorkbook.Sheets(2).Select (False) ' like holding ctrl ThisWorkbook.Sheets(3).Select (False) ThisWorkbook.Sheets(2).Select (False) ' line 2 again; essential sacrifice for the vba-gods. 

确实。