2013-08-27 10 views
5

, aby użyć przycisku Obrót (kontrolka ActiveX), aby wyświetlić poprzedni lub następny arkusz. Po kliknięciu przycisku zdarzenie zostaje pomyślnie uruchomione, a żądany arkusz jest aktywowany, ale zawiera niektóre elementy (polecenia, wykresy itp.) Z oryginalnego arkusza i pokazuje je jako dołączane zdjęcie.Uruchom inny arkusz za pomocą przycisku Spin

wrongly loaded sheet initial sheet with Spin buttons (right) Przykładowy kod przypadku przycisku w dół:

Private Sub SpinButton_JumpToWeek_SpinDown() 

Dim sh_num As String 
Dim tmp_num As Integer 

    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

    SpinButton_JumpToWeek.Value = Range("B27").Value - 1 
    tmp_num = SpinButton_JumpToWeek.Value 

    ' Activate desired KTx sheet 
    sh_num = "KT" & tmp_num 

    Range("F27").Value = "" 'reset to blank 

    Sheets(sh_num).Activate 

    Application.ScreenUpdating = True 
    Application.EnableEvents = True 

End Sub 

obejście działanie trzeba ręcznie wyboru (aktywacja) innego arkusza, a następnie ponownie wybrać żądany arkusz. Próbowałem również zautomatyzować to obejście makrem, ale niestety to nie działa.

To ciekawe, że ten problem nie występuje, jeśli wykonuję kod w trybie debugowania (przy użyciu punktu przerwania i linii krokowej po linii).

Co zaskakujące, nie mam takiego problemu, jeśli próbuję wyświetlić poprzedni/następny arkusz, pisząc wartość (indeks nazwy arkusza) do zdefiniowanej komórki (to znaczy za pomocą zdarzenia Worksheet_Change). Żądana strona jest poprawnie wyświetlana. Zobacz zdjęcia.

enter image description here

Przykładowy kod dla tej evententer opis obrazu tutaj:

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim sh_num As String 

    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

    If Range("F27").Value > 0 Then 
' Activate desired KTx sheet 
    sh_num = "KT" & Range("F27").Value 
    Range("F27").Value = "" 'reset to blank 

    Sheets(sh_num).Activate 
    End If 


    Application.ScreenUpdating = True 
    Application.EnableEvents = True 

End Sub 

muszę użyć przycisku Spin, ponieważ jest to szybsze i pozwala mi pominąć niektóre arkusze (na przykład, jeśli te nie mieć dane). Problem występuje w programie Excel w wersji 32- i 64-bitowej.

Czy ktoś ma pomysł, dlaczego ten problem występuje i obejście problemu? Czy muszę zmienić niektóre ustawienia lub właściwości systemu w programie Excel? Każda pomoc będzie bardzo ceniona.

@mehow Dołączam tutaj mój commenst ze względu na dużą liczbę słów.

  1. Poszedłem za twoją sugestią i wypróbowałem przykład UserForm z wstawioną aktywną kontrolką "Arkusz kalkulacyjny Microsoft Office". Dowiedziałem się, że nie byłoby to dobre rozwiązanie dla mojej sprawy, ponieważ odpowiedź takiego arkusza jest stosunkowo powolna (nawet na szybkim komputerze, takim jak mój), gdy użytkownik wstawia wartości do komórek. Ponadto bardzo skomplikowałoby to mój dość prosty skoroszyt * * .xlsm, który ma więcej niż 50 arkuszy (1 arkusz na każdy tydzień, zawartość tych arkuszy jest następnie połączona z głównym arkuszem) i całkowicie spełnia moje podstawowe potrzeby (z oczywiście z wyjątkiem tego przycisku spin).

Moim zdaniem prawdopodobnie zachodzi potrzeba manipulowania jakimś rodzajem własności systemowej (jak na przykład sztuczka Application.ScreenUpdating), ale nie mam wystarczającej wiedzy VBA, aby ją znaleźć.

  1. Aby jednoznacznie wyjaśnić moje pytanie, musiałbym udostępnić mój przykładowy skoroszyt, ale nie wiem, jak go załadować na to forum. Niestety nie jestem w stanie przesyłać/wyświetlać obrazów z powodzeniem na tym forum (ze względu na moją niską ocenę), co również bardzo pomogłoby.

BTW, nie widzę zdjęć w innych pytaniach na tym forum. . Czy ten problem może wystąpić z powodu braku wtyczek w przeglądarce?

+0

Czy można uznać za pomocą UserForm i wyświetlanie części arkusze na nim? Aby uzyskać pomysł, zobacz [to] (http://stackoverflow.com/questions/17406319/display-a-part-of-an-excel-sheet-on-a-userform-using-vba/17407415#17407415) –

+0

Co masz na myśli mówiąc "niestety to nie działa?" - w jakiej linii zawodzi? – enderland

+0

@mehow napisałem kod VBA, który emuluje moje "ręczne" obejście, ale jego odpowiedź niestety nie była skuteczna – mcerna2

Odpowiedz

1

Można użyć prostego triku ... przed „Application.screenupdating = true” można wstawić dwie linie:

ActiveWindow.SmallScroll Down:=-100
ActiveWindow.SmallScroll Up:=100

+0

Niestety to nie jest dla mnie skuteczne - tak jak moja próba z przełączaniem następnego arkusza – mcerna2

Powiązane problemy