Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
Przesunięty przez: Artik
27-09-2019, 10:47
Nowa karta na wstążce
Autor Wiadomość
pi3cho 
Exceloholic


Posty: 239
Wysłany: 30-10-2018, 11:22   Nowa karta na wstążce

Witam,
W obiekcie Ten_skoroszyt mam odwołanie do procedury wykonywanej podczas zdarzenia Workbook_Open
Kod:
Private Sub Workbook_Open()
     Call CreateToolbar
End Sub

Procedura tworzy niestandardowy pasek narzędzi, działa okej.
Nie rozumiem natomiast dlaczego otworzenie innego skoroszytu, podczas gdy ten z makrem jest zamknięty, powoduje pojawienie się paska narzędzi w innym skoroszycie. Wydawało mi się, że skoro procedura CreateToolbar jest uruchamiana z obiektu ThisWorkbook to będzie aktywna tylko w tym skoroszycie, w którym jest kod.
Jakąś wskazówką może być coś co wyczytałem w internetach:
Cytat:
You need to stick with the 'Application' approach, the worksheet menu bar is an application object.

Oznacza to zatem, że otworzenie dowolnego skoroszytu powoduje uruchomienie kodu umieszczonego wewnątrz zdarzenia Workbook_Open? Ponieważ tylko reakcja na zdarzenie Workbook_Open prowadzi do uruchmienia procedury CreateToolbar
Coś chyba nie gra w moim rozumowaniu :hamer
ID posta: 355394 Skopiuj do schowka
 
 
Tajan


Pomógł: 4646 razy
Posty: 10267
Wysłany: 30-10-2018, 12:03   

Skoro dodajesz pasek narzędziowy do aplikacji to w pozostaje on zapamiętany w aplikacji mimo że skoroszyt jest zamknięty. Jeżeli pasek ma być niedostępny po zamknięciu pliku, należałoby go usunąć w procedurze Workbook_BeforeClose.
Jeżeli pasek ma być dostępny tylko w jednym, konkretnym, skoroszycie to należałoby go tworzyć w procedurze Workbook_Activate i usuwac w Workbook_Deactivate.
ID posta: 355403 Skopiuj do schowka
 
 
pi3cho 
Exceloholic


Posty: 239
Wysłany: 30-10-2018, 12:42   

Dzięki za odpowiedź.
Stosuję się do Twoich odpowiedzi ale skoro nie działa to pewnie nieudolnie (może nie w tym skoroszycie co trzeba jest marko?).
Mój przykład:
Mam skoroszyt makro.xlsm oraz skoroszyt przyklad.xlsx.
W pliku makro.xlsm mam następujący kod w obiekcie Ten_skoroszyt:
Kod:
Private Sub Workbook_Open()
    Call CreateToolbar
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Dim Msg As String

    If Me.Saved = False Then
        Msg = "Czy zapisać zmiany w skoroszycie "
        Msg = Msg & Me.Name & "?"
        Ans = MsgBox(Msg, vbQuestion + vbYesNoCancel)

        Select Case Ans
            Case vbYes
            Me.Save
        Case vbCancel
            Cancel = True
            Exit Sub
        End Select

    End If

    Call DeleteToolbar
    Me.Saved = True

End Sub

Sub DeleteToolbar()
    On Error Resume Next
    CommandBars(TOOLBARNAME).Delete
    On Error GoTo 0
End Sub

Makro CreateToolbar jest w zwykłym module skoroszytu makro.xlsm
Mimo zamknięcia skoroszytu makro.xlsm pasek narzędziowy w skoroszycie przyklad.xlsx wciąż jest obecny.
Załączam przykład.
Pozdrawiam

makro.xlsm
Pobierz Plik ściągnięto 80 raz(y) 15.46 KB

ID posta: 355410 Skopiuj do schowka
 
 
Tajan


Pomógł: 4646 razy
Posty: 10267
Wysłany: 30-10-2018, 12:55   

Przenieś procedurę "DeleteToolbar" do Module1 i zmień:
Kod:
CommandBars(TOOLBARNAME).Delete
na:
Kod:
Application.CommandBars(TOOLBARNAME).Delete
ID posta: 355412 Skopiuj do schowka
 
 
pi3cho 
Exceloholic


Posty: 239
Wysłany: 30-10-2018, 13:26   

A jak usunąć utworzone wcześniej dodatkowe paski narzędzi z poziomu aplikacji?
Wykomentowałem kod tworzący dodatkowe paski ale wciąż po uruchomieniu skoroszytu te paski są widoczne. Bałagan mi się tu robi:(
ID posta: 355419 Skopiuj do schowka
 
 
Tajan


Pomógł: 4646 razy
Posty: 10267
Wysłany: 30-10-2018, 13:45   

Jezeli chcesz "hurtem" tu zrobić, to uruchom makro:
Kod:
Sub usunPaski()
Dim cmdBar As CommandBar
For Each cmdBar In Application.CommandBars
    If Not cmdBar.BuiltIn Then cmdBar.Delete
Next
End Sub
ID posta: 355423 Skopiuj do schowka
 
 
pi3cho 
Exceloholic


Posty: 239
Wysłany: 30-10-2018, 13:59   

O, i to jest to czego szukałem!
Usunąłem wszystkie zbudowane wcześniej paski narzędzi i spróbuję dodać jeszcze raz stosując się do Twoich wskazówek.

pi3cho w dniu: 30-10-2018, 14:25 napisał/a:
Jeżeli dobrze zrozumiałem, to jeśli chcę aby pasek narzędzi był widoczny w danym skoroszycie to muszę go utworzyć w procedurze Workbook_Activate i usuwac w Workbook_Deactivate tego konkretnego skoroszytu? Tym samym skoroszyt zmieni się z xlsx na xlsm? Zgadza się?

edycja Zbiniek:
Proszę korzystać z opcji edytowania wypowiedzi – przycisk „edytuj”. Opcja jest dostępna bodajże przez 30 minut od momentu wysłania wypowiedzi.
ID posta: 355425 Skopiuj do schowka
 
 
Tajan


Pomógł: 4646 razy
Posty: 10267
Wysłany: 30-10-2018, 20:18   

Zgadza się!
ID posta: 355438 Skopiuj do schowka
 
 
pi3cho 
Exceloholic


Posty: 239
Wysłany: 31-10-2018, 12:31   

@Tajan dziękuję za pomoc i odpowiedzi

Ostatecznie udało się zrobić to czego potrzebowałem czyli dodatek xlam tworzący paski narzędzi w odpowiednich skoroszytach. Żeby jednak dodatek odpowiednio reagował na zdarzenia Workbook_Activate trzeba było zbudować moduł klasowy, co znalazłem na internetach.

Tak czy siak, dzięki!
Pozdrawiam
ID posta: 355475 Skopiuj do schowka
 
 
Tajan


Pomógł: 4646 razy
Posty: 10267
Wysłany: 31-10-2018, 13:26   

Nic nie pisałeś, że to ma być dodatek. Nie wiem co rozumiesz pod nazwą moduł klasowy, ale w takim przypadku można w module ThisWorkbook dodatku zadeklarować zmienną typu Application i sterować zdarzeniami tej zmiennej. Coś takiego:
Kod:
Dim WithEvents app As Application

Const SKOROSZYT As String = "nazwaPliku.xlsx"


Private Sub Workbook_Open()

Set app = Application

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Set app = Nothing

End Sub




Private Sub app_WorkbookActivate(ByVal Wb As Workbook)

If Wb.Name = SKOROSZYT Then
   
   'tworzymy pasek

End If

End Sub


Private Sub app_WorkbookDeactivate(ByVal Wb As Workbook)

If Wb.Name = SKOROSZYT Then
   
   'usuwamy pasek

End If

End Sub

ID posta: 355482 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe