【问题标题】:ThisWorkbook.Sheets(1).Select (False) Not WorkingThisWorkbook.Sheets(1).Select (False) 不工作
【发布时间】:2016-08-02 15:09:24
【问题描述】:

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

非常很简单,我希望它是一个简单的解决方案(或者可能是 Microsoft 更新破坏了它)

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

这将始终选择 Sheet #1 和 Sheet #2。现在似乎“(False)”不起作用,它只会选择Sheet#1。我已经在 5 台不同的计算机上尝试过这个(所有 Excel 2013)请让我知道发生了什么。

谢谢! -迈克

编辑: 这也不再起作用了。就像乔丹在 cmets 中所说的那样,它只是不执行。

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

显然这是行不通的,但它应该能说明我的意思。

解决方案:

感谢 Ralph,我摘录了一些内容并创建了这个:

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 中选择实际的工作表#,并允许定义工作表以按实际工作表顺序进行选择。

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

【问题讨论】:

  • 如果没有False 周围的括号,它是否可以工作?一定有什么改变?你有一个 Office 更新,操作系统更新,你不再有两张表吗?
  • 您是否收到错误消息?您是否尝试过使用 Array("Sheet1","Sheet2") 进行测试?
  • 我猜他们在更新中破坏了一些东西,正如@GaryEvans 提到的那样。
  • 自己试了下代码,基本上只选择了Sheet(1),第二条语句什么都不做。
  • 仅供参考 - 高度推荐给avoid using .Select

标签: vba excel


【解决方案1】:

以下代码行将 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 两张表分别命名为Sheet1Sheet3。我选择了分隔符/,因为该字符不能用于工作表名称。

顺便说一句:我同意@BruceWayne。你应该尽量避免完全使用select(如果可能的话)。

【讨论】:

  • 谢谢!检查我原始帖子的最后编辑以获取解决方案。
  • 当答案已经在这里时,不确定为什么要编辑帖子以包含答案。这似乎是多余和奇怪的(当有人新阅读您的帖子时想知道):为什么有答案的人会发布问题?!因此,我建议(下一次)您不要编辑您的初始帖子以包含已发布的答案。本网站上至少 99.9% 的其他帖子都遵循这种格式。
  • 我猜是因为它是你所拥有的东西的变体,而不是确切的东西。我的代码使用不同的“工作表”而不是“工作表”。我也习惯了其他隐藏答案的网站,因此 OP 总是将答案放在主帖中。不过,我会牢记这一点……谢谢拉尔夫!
【解决方案2】:

我的 VBA 一直运行良好,直到 8 月的第一周,然后我的 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

【讨论】:

    【解决方案3】:

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

    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.
    

    会。

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 2016-10-04
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      相关资源
      最近更新 更多