2016-08-02 25 views
6

Posiadałem kod działający przez ponad 3 lata. Nagle 28 lipca 2016 r. Przestał działać.ThisWorkbook.Sheets (1). Wybierz (False) Nie działa

Jest bardzo prosty i mam nadzieję, że jest to proste rozwiązanie (a może zmiana Microsoft złamał)

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

to zawsze wybiera Arkusz # 1 i # 2 arkuszy. Teraz wydaje się, że "(False)" nie działa i wybierze tylko Arkusz # 1. Próbowałem tego na 5 różnych komputerach (wszystkie Excel 2013) Proszę dać mi znać, co się dzieje.

Dzięki! -Mike

Edytuj: To również nie działa. Tak jak powiedział Jordan w komentarzach, po prostu się nie wykonuje.

y = 9 
ThisWorkbook.Sheets(1).Select 

For y = 2 To x 

     ThisWorkbook.Sheets(y).Select (False) ' like holding ctrl 

Next y 

Edit2: Ponieważ nie wydaje się być ostateczną odpowiedź będę zapytać, czy ktoś może mi pomóc z obejścia:

ThisWorkbook.Sheets(Array(1 to x)).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
    FolderName & "\" & QuoteFilename, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
    IgnorePrintAreas:=False, OpenAfterPublish:=False 

Oczywiście to nie zadziała, ale powinien dostać mój punkt widzenia.

rozwiązanie:

Dzięki Ralph, wziąłem kilka fragmentów i stworzył w ten sposób:

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 

to wybranie właściwej warstwy # od 1-5 i umożliwia zdefiniowanie arkuszy, aby wybrać ich rzeczywistej kolejności arkuszy .

Nadal nie znam źródła pierwszego problemu, ale obejścia są równie dobre.

+3

Czy działa bez nawiasów wokół 'Fałszywe'? Coś musiało się zmienić? miałeś aktualizację pakietu Office, aktualizację systemu operacyjnego, czy nie masz już dwóch arkuszy? –

+0

Czy pojawia się komunikat o błędzie? czy próbowałeś użyć Array ("Sheet1", "Sheet2") do testowania? –

+0

Zgaduję, że coś się zepsuło w aktualizacji, o której wspomnieli @GaryEvans. – Rory

Odpowiedz

3

następujących linii kodu będzie select wszystkie arkusze w skoroszycie makr jest wywoływana z:

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 

Poniższy sub będzie zaledwie select dwa arkusze prosiłeś w swoim pierwotnym stanowisku:

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 

Jeśli wolisz mieć wszystko w jednym wierszu, możesz również użyć split do utworzenia tablicy w locie w ten sposób:

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

Ta linia kodu będzie zawierała select dwa arkusze o nazwach Sheet1 i Sheet3. Wybrałem separator /, ponieważ tego znaku nie można użyć w nazwie arkusza.

Tylko na marginesie: zgadzam się z @BruceWayne. Powinieneś całkowicie unikać korzystania z usługi select (jeśli to możliwe).

+0

Dzięki! Sprawdź ostatnią zmianę w moim oryginalnym wpisie dotyczącą rozwiązania. – mxc1090

+0

Nie wiem, dlaczego edytowałeś swój wpis, aby uwzględnić odpowiedź, gdy odpowiedź już tu jest. Wydaje się zbędne i dziwne (kiedy ktoś nowy czyta twój post zastanawia się): dlaczego ktoś z odpowiedzią powinien zadać pytanie ?! Sugeruję więc, aby (następnym razem) nie edytować swojego pierwszego postu, aby uwzględnić zamieszczone odpowiedzi. Co najmniej 99,9% wszystkich innych postów na tej stronie jest zgodnych z tym formatem. – Ralph

+0

Chyba dlatego, że była odmianą tego, co miałeś, a nie dokładną rzeczą. Mój kod używa "Arkuszy", a nie "Arkuszy roboczych", które działają inaczej. Jestem również przyzwyczajony do innych stron, gdzie odpowiedź zostaje pochowana, więc OP zawsze umieszcza odpowiedź w głównym poście. Będę o tym pamiętać w przyszłości ... dzięki Ralph! – mxc1090

1

Miałem VBA, który działał idealnie do pierwszego tygodnia sierpnia, wtedy moje pliki PDF miały tylko pierwszą stronę. Używałem podobnej metody jak ty - gdzie wybrałbym wiele arkuszy. Zrobiłem pracę przy użyciu tablicy. Mój kod był w formularzu, ale post zamieszczę tutaj w celach informacyjnych.

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 
0

Miałem ten sam problem dzisiaj. Prawdopodobnie opóźniony ze względu na aktualizację harmonogramu mojej firmy; prawdopodobnie wciąż ta sama aktualizacja. znalazłem swój wątek, a następnie tuż przed wdrażaniu swoją obejście znalazłem wiele prostsze:

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

już nie działa, ale

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. 

robi.