Discussion:
Add - in w excelu
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Melon
2006-10-03 19:53:22 UTC
Permalink
Witam,

czy ktokolwiek sie zajmowal tworzeniem Add - in'ów w excelu. Jesli tak
to prosze o wskazówki, jak za to sie zabrac, cos dla poczatkujacego,
moze jakies proste przyklady, strony z odpowiednimi kursami, itp, itd?

Z góry dzieki.
Pozdrawiam.
pxd74
2006-10-04 21:15:27 UTC
Permalink
Post by Melon
Witam,
czy ktokolwiek sie zajmowal tworzeniem Add - in'ów w excelu. Jesli tak
to prosze o wskazówki, jak za to sie zabrac, cos dla poczatkujacego,
moze jakies proste przyklady, strony z odpowiednimi kursami, itp, itd?
A dokladnie to o jakie infromacje Ci chodzi?
Bo przeciez dodatek, to zwykly skoroszyt Excela, który ma ukryte okna. Kazdy
skoroszyt mozesz zapisac jako "Dodatek programu Microsoft Excel (*.xla)"
poprzez polecenie menu Plik -> Zapisz jako. Kazdy dodatek, z którego chce
sie skorzystac, nalezy zainstalowac poprzez zaznaczenie go liscie dodatków w
oknie otwartym przy pomocy polecenia menu Narzedzia -> Dodatki. Na liscie
dodatków sa tylko dodatki, które znajduja sie w folderze dodatków (np. dla
Windowsów opartych o jadro NT, to sciezka: C:\Documents and
Settings\<nazwa_uzytkownika>\Application Data\Microsoft\AddIns). Pozostale
dodatki, których nie ma na liscie nalezy slokalizowac naciskajac przycisk
"Przegladaj" w oknie "Dodatki". Makra, które znajduja sie w dodatkach nie sa
widoczne po wybraniu polecenia menu Makro -> Makra.

To wlasciwie wszystko o dodatkach.
--
Pozdrowienia
pxd74
Melon
2006-10-05 20:59:15 UTC
Permalink
Ponowne dzieki za pomoc.

Mam jeszcze jednak kilka pytan odnosnie ad-in'ów. Czy można stworzyc
takiego Ad-in'a, którego efektem bedzie nowe rozwijane menu (np. na
pasku menu obok 'Dane' pojawi sie 'Ad-in'). Jezeli istnieje taka
możliwość to w jaki sposób sie do tego zabrac?

Pozdrawiam
Tajan
2006-10-06 05:58:37 UTC
Permalink
Witam!
Post by Melon
Ponowne dzieki za pomoc.
Mam jeszcze jednak kilka pytan odnosnie ad-in'ów. Czy można stworzyc
takiego Ad-in'a, którego efektem bedzie nowe rozwijane menu (np. na
pasku menu obok 'Dane' pojawi sie 'Ad-in'). Jezeli istnieje taka
możliwość to w jaki sposób sie do tego zabrac?
Pozdrawiam
Wykonanie tego jest w sumie dość proste. Musisz utworzyć dwie procedury, jedna
tworzącą, i drugą usuwającą menu.
Przykładowy kod tych makr może wygladac tak:

Sub DodajMenu()
Dim cbWSMenuBar
Dim iIndex As Integer

Set cbWSMenuBar = CommandBars("Worksheet Menu Bar")
UsunMenu
iHelpIndex = cbWSMenuBar.Controls("&Dane").Index

With cbWSMenuBar.Controls.Add(Type:=msoControlPopup, _
before:=iHelpIndex)
.Caption = "Add-In"
With .Controls.Add(Type:=msoControlButton)
.Caption = "Polecenie1"
.OnAction = "Makro1_Sub"
.FaceId = 6916
End With
With .Controls.Add(Type:=msoControlPopup)
.Caption = "Lista1"
With .Controls.Add(Type:=msoControlButton)
.Caption = "Polecenie2"
.OnAction = "Makro2_Sub"
End With
With .Controls.Add(Type:=msoControlButton)
.BeginGroup = True
.Caption = "Polecenie3"
.OnAction = "Makro3_Sub"
.FaceId = 1155
End With
End With
End With
End Sub

Oczywiście, dodatkowo nalezy utworzyć własne makra uruchamiane kontrolkami z
menu. Ich nazwy sa przypisane do ich właściwości OnAction posczególnych
kontrolek.
Aby menu było automatycznie tworzone w momencie uruchamiania dodatku, należy w
jego module ThisWorbook, w procedurze Workbook_Open uruchomić procedurę
dodającą menu. Usunięcie menu powinno nastąpić przy zamykaniu dodatku, w
procedurze zdarzenia Workbook_BeforeClose, tego samego modułu:

Private Sub Workbook_Open()
DodajMenu
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
UsunMenu
End Sub


Tajan
Tajan
2006-10-06 07:23:54 UTC
Permalink
Sorry, ale nie wkleiła się procedura UsunMenu:

Sub UsunMenu()
On Error Resume Next
CommandBars("Worksheet Menu Bar").Controls("Add-In").Delete
End Sub

Tajan
pxd74
2006-10-06 08:43:48 UTC
Permalink
Post by Tajan
Private Sub Workbook_Open()
DodajMenu
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
UsunMenu
End Sub
Proponwałbym użyć w takim wypadku zdarzeń Workbook_AddinInstall i
Workbook_AddinUninstall zamiast Workbook_Open i Workbook_BeforeClose. Te dwa
ostatnie bedą uruchamiały się przy każdym otwarciu/zamknięciu aplikacji
Excel, natomiast te pierwsze tylko przy instalowaniu/odinstalowaniu dodatku.
--
Pozdrowienia
pxd74
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Tajan
2006-10-06 09:14:48 UTC
Permalink
Witam!
Post by pxd74
Proponwałbym użyć w takim wypadku zdarzeń Workbook_AddinInstall i
Workbook_AddinUninstall zamiast Workbook_Open i Workbook_BeforeClose. Te dwa
ostatnie bedą uruchamiały się przy każdym otwarciu/zamknięciu aplikacji
Excel, natomiast te pierwsze tylko przy instalowaniu/odinstalowaniu dodatku.
Teoretycznie masz rację, ale spotkałem sie z sytuacjami, gdy na skutek
usunięcia pliku lub jego dezaktywacji poprzez rejestr, dodatek był nieaktywny,
ale jego menu nadal było widoczne. Mój sposób jest pewniejszy, bo menu jest
zawsze usuwne, gdy plik jest zamykany.

Tajan
pxd74
2006-10-06 13:15:34 UTC
Permalink
Post by Tajan
Teoretycznie masz rację, ale spotkałem sie z sytuacjami, gdy na skutek
usunięcia pliku lub jego dezaktywacji poprzez rejestr, dodatek był nieaktywny,
ale jego menu nadal było widoczne. Mój sposób jest pewniejszy, bo menu jest
zawsze usuwne, gdy plik jest zamykany.
No tak, jak ktoś bezmyślnie grzebie w rejestrze lub usuwa pliki, których
sensu nie zna, to rzeczywiście może sie takie coś zdarzyć - oby jak najmniej
takich użyszkodników :-)
No ale zawsze można w takim wypadku ręcznie usunąć ten pasek.
--
Pozdrowienia
pxd74
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Melon
2006-10-08 13:32:20 UTC
Permalink
Witam ponownie,

jest maly problem z przytoczonym kodzie: .FaceId = 6916 - komunikat,
obiekt nie posiada metody.....

Mam jeszcze kilka pytan:
Czy znacie moze godne polecenia kursy VBA (ksiazka, www) zwiazany z
excel'em i formularzami?
Czym sie rozni Private Sub Workbook_BeforeClose() od Sub
Workbook_BeforeClose() (podobnie jest przy deklaracji zmiennych)?
Czy mozecie podac liste nazw procedur, ktore sa wywolywane przy akcjach
zwiazanych z arkuszami, plikiem xls?

Z gory dzieki.
Pozdrawiam.
Tajan
2006-10-08 15:18:44 UTC
Permalink
Witam!
Post by Melon
Witam ponownie,
jest maly problem z przytoczonym kodzie: .FaceId = 6916 - komunikat,
obiekt nie posiada metody.....
Hmm.. Dziwne. Nic nie zmieniałeś w kodzie? W sumie ta linia jest opcjonalna,
mało istotna dla działania całej procedury (wyświetla okresloną ikonę przy
nazwie polecenia) więc można ją pominąć, ale to, że nie działa jest
zastanawiające. Jakiej wersji Excela używasz?
Post by Melon
Czy znacie moze godne polecenia kursy VBA (ksiazka, www) zwiazany z
excel'em i formularzami?
Dla początkujących niezły jest kurs VBA na: http://dzono4.w.interia.pl/
Post by Melon
Czym sie rozni Private Sub Workbook_BeforeClose() od Sub
Workbook_BeforeClose() (podobnie jest przy deklaracji zmiennych)?
W uproszczeniu, do zmiennych lub procedur czy funkcji, poprzedzonych słowem
Private mozna się odwoływać tylko z modułu, w którym zostały zadeklarowane.
Jeżeli chcemy odwoływać się do nich z innych modułów, to nalezy je
zadeklarować jako Public. Przy czym, jeżeli nie ma żadnej z tych deklaracji,
to domyśnie procedury i funkcje są typu Public a zmienne typu Private.
Post by Melon
Czy mozecie podac liste nazw procedur, ktore sa wywolywane przy
akcjach zwiazanych z arkuszami, plikiem xls?
W edytorze VBA, jeżeli wybierzesz moduł arkusza lub skoroszytu, to z u góry,
z lewej strony masz listę rozwijalną z której mozesz wybrać obiekt (np.
Worksheet lub Workbook). Wtedy, na liście z prawej strony, pojawią się
dostępne dla niego procedury zdarzeń. Wybranie którejś z nich spowoduje
wstawienie jej szablonu do edytora.

Tajan
Melon
2006-10-14 09:35:34 UTC
Permalink
Dzięki za wszystkie informacje.

Mam jeszcze jedną prośbę, poszukuje kursow programowania (moga byc
ksiazki, lub www) odnosnie VBA.

Z gory dzięki.
Pozdrawiam.

Loading...