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, 00:14
Excel 2010 - Zaznaczanie wybranej pozycji na wstążce
Autor Wiadomość
Marti 
ExcelSpec



Wersja: Win Office 2010
Pomógł: 98 razy
Posty: 988
Wysłany: 14-03-2016, 09:25   Excel 2010 - Zaznaczanie wybranej pozycji na wstążce

Witam!
Przy pomocy Custom UI Editor For Microsoft Office zmodyfikowałem sobie wstążkę, tzn dobudowałem na końcu nową grupę i tam dorzuciłem kilka przycisków.

Na etapie odpalania pliku próbuję jakoś zaznaczyć tą ostatnią pozycję co odpowiada kombinacji Alt+Y, czyli
Kod:
SendKeys "%Y


Ale jest taki problem, że ta nowa pozycja pojawia się dopiero na samym końcu kiedy już cały kod z Workbook_Open się wykona. Jak przechwycić ten moment pojawienia się zmodyfikowanej wstążki?
_________________
Najlepszym dowodem na to, że w kosmosie istnieje inteligencja, jest to, że się z nami nie kontaktują.
ID posta: 286988 Skopiuj do schowka
 
 
OShon 
Excel Expert



Zaproszone osoby: 393
Wersja: Win Office 365
Pomógł: 1638 razy
Posty: 8383
Wysłany: 14-03-2016, 09:37   

Możesz wejść w opcje i dodać menu narzędzi bez czekania aż się one wyświetlą.
A jeśli korzystasz tylko z jednego elementu to wyszukaj go i dodać do szybkiego menu - będzie lepiej się do niego odwołać.

XL_Menu_wstega_Karta_narzedzi.png
Plik ściągnięto 13 raz(y) 100.56 KB

_________________
Oskar Shon - MVP Office System/Development 11/21, 3xMCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA | GL Excel VBA
Dodatki do Office VBATools.pl, aktualne promocje, darmowe artykuły i literatura
ID posta: 286989 Skopiuj do schowka
 
 
Marti 
ExcelSpec



Wersja: Win Office 2010
Pomógł: 98 razy
Posty: 988
Wysłany: 14-03-2016, 09:43   

Ta nowa karta na wstążce nie posiada żadnych standardowych opcji excelowych, tylko tam są odwołania do makr zawartych tylko w tym pliku. Plik obsługuje całe mnóstwo osób, dlatego chcę aby tylko dla tego pliku każdemu pojawiała się moja nowa karta.
_________________
Najlepszym dowodem na to, że w kosmosie istnieje inteligencja, jest to, że się z nami nie kontaktują.
ID posta: 286990 Skopiuj do schowka
 
 
OShon 
Excel Expert



Zaproszone osoby: 393
Wersja: Win Office 365
Pomógł: 1638 razy
Posty: 8383
Wysłany: 14-03-2016, 09:52   

W takim razie nie odwołuj sie do procedury z przycisku wstęgi, czekając na to jak się wyświetli, tylko skoro masz ja uruchomić na starcie pliku to wywołaj ją po prostu w procedurze.
Jeśli chcesz ja ukryć, a jednocześnie odpalić nadaj jej klasyfikację Public sub
_________________
Oskar Shon - MVP Office System/Development 11/21, 3xMCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA | GL Excel VBA
Dodatki do Office VBATools.pl, aktualne promocje, darmowe artykuły i literatura
ID posta: 286992 Skopiuj do schowka
 
 
Marti 
ExcelSpec



Wersja: Win Office 2010
Pomógł: 98 razy
Posty: 988
Wysłany: 14-03-2016, 09:58   

Ja nie chcę wywoływać żadnej procedury z mojej karty, tylko ją aktywować - aby nie była aktywna/zaznaczona standardowo pierwsza z lewej tj. 'Narzędzia główne' , tylko moja ostatnia (pierwsza z prawej). Usunąłem kilka button'ów z arkusza i przełożyłem do wstążki. A ponieważ tylko z nich korzystają użytkownicy mojego pliku, chcę aby już na starcie pliku zobaczyli te przyciski na nowej karcie.
_________________
Najlepszym dowodem na to, że w kosmosie istnieje inteligencja, jest to, że się z nami nie kontaktują.
ID posta: 286993 Skopiuj do schowka
 
 
OShon 
Excel Expert



Zaproszone osoby: 393
Wersja: Win Office 365
Pomógł: 1638 razy
Posty: 8383
Wysłany: 14-03-2016, 10:41   

No to teraz trochę jaśniej się zrobiło. :mrgreen:

Kiedyś też tak chciałem, ale zrezygnowałem z tego na rzecz komunikatu ("W menu XX znajdziesz opcje.."), tylko dla tego, że na PC działało wszystko ok, a na notebookach ten sam SendKeys włączał klawiaturę numeryczną, po czym następował chaos.

Spróbuj wywołać polecenie na zdarzeniu aktywowania Workbook_SheetActivate albo Workbook_Activate, ponieważ Workbook_Open może faktycznie realizować czynności przed wszystkimi innymi opcjami, w tym wstęgi.
_________________
Oskar Shon - MVP Office System/Development 11/21, 3xMCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA | GL Excel VBA
Dodatki do Office VBATools.pl, aktualne promocje, darmowe artykuły i literatura
ID posta: 287004 Skopiuj do schowka
 
 
Marti 
ExcelSpec



Wersja: Win Office 2010
Pomógł: 98 razy
Posty: 988
Wysłany: 14-03-2016, 14:28   

Uwielbiam takie wyzwania ://
Co za masakra.

Akurat ani Workbook_SheetActivate albo Workbook_Activate w moim pliku nie rozwiązują tego mojego problemu.
Na razie podpiąłem się pod Worksheet_SelectionChange głównego arkusza.

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If wstazka = False Then
Call zaznacz_wstazke
wstazka = True
Else
End If
End Sub


Dałem zmienną globalną aby tylko raz wykonać akcję zaznaczenia karty na wstążce

Kod:
Public wstazka As Boolean
Sub zaznacz_wstazke()
SendKeys "%Y"
SendKeys "{ESC}"
SendKeys "{ESC}"
End Sub


Ale nie jestem zadowolony z takich kombinacji :-|
_________________
Najlepszym dowodem na to, że w kosmosie istnieje inteligencja, jest to, że się z nami nie kontaktują.
ID posta: 287034 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2939 razy
Posty: 9712
Wysłany: 14-03-2016, 20:08   

Od wersji 2010 dodano metodę ActivateTab dla obiektu Ribbon.
Kod:
    If Val(Application.Version) > 12 Then
        On Error Resume Next
        Rib.ActivateTab "Tab1"
    Else
        On Error Resume Next
        Application.SendKeys "%y", True
        Application.SendKeys "{ESC}{ESC}"
    End If

Kod jest niepełny. Nie wiem czy masz w kodzie odwołanie do wstążki (bo będzie potrzebne).

Artik
ID posta: 287071 Skopiuj do schowka
 
 
Marti 
ExcelSpec



Wersja: Win Office 2010
Pomógł: 98 razy
Posty: 988
Wysłany: 14-03-2016, 21:15   

Nie wiem o który dokładnie fragment chodzi. Skrócona wersja kodu tworzącego moją kartę we wstążce wygląda tak:

Kod:
<customUI xmlns='http://schemas.microsoft.com/office/2009/07/customui'>
<ribbon>
<tabs>
<tab id="CustomTab" label="Aktualizacja">
    <group id="Group1" label="Tylko dla ADMINa">
        <button id="Button1"
        label="AKTUALIZACJA"
        size="normal"
        onAction="x_aktualizacja"
        imageMso="BlogPublish" />
        <button id="Button2"
        label="Test nr 1"
        size="normal"
        onAction="x_aktualizacja_auto"
        imageMso="AcceptInvitation" />
        <button id="Button3"
        label="Test nr 2"
        size="normal"
        onAction="x_zablokowane"
        imageMso="AcceptInvitation" />
    </group>
</tab>
</tabs>
</ribbon>
</customUI>   
_________________
Najlepszym dowodem na to, że w kosmosie istnieje inteligencja, jest to, że się z nami nie kontaktują.
ID posta: 287085 Skopiuj do schowka
 
 
Marti 
ExcelSpec



Wersja: Win Office 2010
Pomógł: 98 razy
Posty: 988
Wysłany: 14-03-2016, 21:58   

Znalazłem taki kod w sieci

Kod:
Public myRibbon As IRibbonUI
 
Sub tabActivate(ByVal control As IRibbonControl)
 myRibbon.ActivateTab (control.ID)
End Sub


Tylko co jest moim control ID? Podstawiam różne rzeczy i cały czas "zima" :-?
_________________
Najlepszym dowodem na to, że w kosmosie istnieje inteligencja, jest to, że się z nami nie kontaktują.
ID posta: 287089 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2939 razy
Posty: 9712
Wysłany: 14-03-2016, 22:22   

Eee, trzeba trochę więcej. :-)

Kod XML:
Kod:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"
          onLoad="RibbonOnLoad">
    <ribbon>
        <tabs>
            <tab id="CustomTab"
                 <!-- jeżeli chcesz CustomTab na początku, to odkomentuj poniższą linię-->
                 <!-- insertBeforeMso="TabHome"-->
                 label="Aktualizacja">
                <group id="Group1" label="Tylko dla ADMINa">
                    <button id="Button1"
                        Label = "AKTUALIZACJA"
                        Size = "normal"
                        OnAction = "x_aktualizacja"
                        imageMso="BlogPublish" />
                    <button id="Button2"
                        Label = "Test nr 1"
                        Size = "normal"
                        OnAction = "x_aktualizacja_auto"
                        imageMso="AcceptInvitation" />
                    <button id="Button3"
                        Label = "Test nr 2"
                        Size = "normal"
                        OnAction = "x_zablokowane"
                        imageMso="AcceptInvitation" />
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

W module stadardowym:
Kod:

Option Explicit

Public Rib          As IRibbonUI

Public Sub RibbonOnLoad(ribbon As IRibbonUI)
    Set Rib = ribbon
End Sub


Sub AktywujTab()

    If Val(Application.Version) > 12 Then
        On Error Resume Next
        Rib.ActivateTab "CustomTab"
    Else
        On Error Resume Next
        Application.SendKeys "%y", True
        Application.SendKeys "{ESC}{ESC}"
    End If
End Sub
Być może, że należy zrezygnować z SendKeys-ów na wersji 2007 z powodów o których wspomina OShon. Prawdopodobnie, jak swój Tab będziesz miał na początku, skoroszyt będzie się otwierał już z nim uaktywnionym (przynajmniej przy pierwszym otwarciu :-) )

W module ThisWorkbook (Ten_skoroszyt):
Kod:

Private Sub Workbook_Open()
    Application.OnTime Now, "AktywujTab"
End Sub

Artik
ID posta: 287092 Skopiuj do schowka
 
 
Marti 
ExcelSpec



Wersja: Win Office 2010
Pomógł: 98 razy
Posty: 988
Wysłany: 15-03-2016, 15:47   

Dzięki Artik, dzięki Tobie wróciłem z dalekiej podróży ;-)
Nieźle namieszałem wczoraj tym podpięciem się pod Worksheet_SelectionChange.
Zrobiłem literówkę i... pliki popłynęły
Na szczęście sytuacja została już opanowana, dokonałem zmian w kodzie Ribbon oraz VBA i teraz śmiga aż miło. Zostawiłem swoją kartę jako ostatnią bo kod działa znakomicie i zaraz po starcie pliku ona się automatycznie aktywuje.

Jeszcze raz BIG THX!!! :beer
_________________
Najlepszym dowodem na to, że w kosmosie istnieje inteligencja, jest to, że się z nami nie kontaktują.
ID posta: 287215 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2939 razy
Posty: 9712
Wysłany: 15-03-2016, 15:53   

Marti napisał/a:
Nieźle namieszałem wczoraj
Nie przejmuj się, ja też często błądzę. :-)

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 287216 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2939 razy
Posty: 9712
Wysłany: 16-03-2016, 11:06   

Artik napisał/a:
ja też często błądzę
Nie trzeba było długo czekać.
Analizując ponownie Twój kod XML zauważyłem, że w VBA, warunek o wersji Excela jest bez sensu. Przestrzeń nazw w XML wyraźnie wskazuje na wersję 2010 (i wyższą). W związku z tym karta nie pojawi się w wersji 2007. Dlatego bez sensu jest warunek w procedurze AktywujTab. Wystarczy
Kod:
Sub AktywujTab()

         On Error Resume Next
         Rib.ActivateTab "CustomTab"
End Sub


Ale nie ma tego złego, co by na dobre nie wyszło. Zaparłem się, by poszukać jakiegoś pewniejszego rozwiązania dla aktywacji karty w 2007, innego niż SendKeys. Piszę o tym w nowym wątku.

Artik
ID posta: 287326 Skopiuj do schowka
 
 
Marti 
ExcelSpec



Wersja: Win Office 2010
Pomógł: 98 razy
Posty: 988
Wysłany: 16-03-2016, 11:17   

Cześć.
Na początku miałem świadomość, że kartę przypisuję tylko do wersji 2010, więc w ogóle nie wpisywałem tego warunku w VBA. Potem asekuracyjnie go wpisałem za Twoim przykładem ale rzeczywiście jest zbędny ;-)
Co nie zmienia faktu, że teraz wszystko "gra i buczy" :mrgreen:
Jeszcze raz dzięki Artik
_________________
Najlepszym dowodem na to, że w kosmosie istnieje inteligencja, jest to, że się z nami nie kontaktują.
ID posta: 287328 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