pop3k Opublikowano 23 Lipca 2020 Zgłoś Udostępnij Opublikowano 23 Lipca 2020 Witam, stworzyłem kilka mniejszych programików w VBA, każdy ma swoją ikonkę, która otwiera odpowiednie makro. Wszystko działa. Przydatne byłoby jednak, aby po użyciu makro, powtórzyć je klawiszem ENTER, jak inne komendy Zwcada. Niestety poleceniem otwierającym dane makro po kliknięciu ikonki jest "-vbarun" a program pyta o nazwę makra VBA. Czytałem, że da się to zrobić jedynie przez Lisp, ale nikt nie wytłumaczył tego w prosty sposób. Łącznie z ustawieniem skrótu dla ikonki. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
perlon Opublikowano 23 Lipca 2020 Zgłoś Udostępnij Opublikowano 23 Lipca 2020 (edytowane) Może wystarczy command : (defun c:nazwa_makra (/) (command "-VBARUN" "nazwa_makra") ) (command "nazwa_makra") Takie coś podpiąć pod toolbarsa i będzie powtarzalne po enterze Tak na marginesie w wersji EN jest literówka Edytowane 23 Lipca 2020 przez perlon Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 23 Lipca 2020 Autor Zgłoś Udostępnij Opublikowano 23 Lipca 2020 (edytowane) OK, dzięki, a jakieś porady jak to podpiąć pod skrót? 😄 Edytowane 23 Lipca 2020 przez pop3k Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 23 Lipca 2020 Autor Zgłoś Udostępnij Opublikowano 23 Lipca 2020 OK, poradziłem sobie w ten sposób: 1. Utworzyłem plik z rozszerzeniem hot.lsp a w nim: (defun c:ZPP (/) (command "-VBARUN" "D:/Programy/vba/KonstruktorAP.zvb!ZP_plus.STR_ZP") ) (command "ZPP") 2. Wciągnąłem plik hot.lsp w ZWCAD -> Narzędzia -> Wczytaj aplikacje 3. Utworzyłem też ikonkę w ZWCAD -> Narzędzia -> Dostosuj interfejs -> i tam, gdzie wybiera się nazwę czy grafikę ikonki w polu Makro wpisałem "ZPP". Efekt jest taki, że mogę w linii poleceń wpisać ZPP lub kliknąć w ikonkę aby wywołać makro. W celu wywołania go jeszcze raz, mogę kliknąć ENTER. O to chodziło! Dzięki! Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 24 Lipca 2020 Autor Zgłoś Udostępnij Opublikowano 24 Lipca 2020 No i pojawił się problem. Program: 1. Otwiera UserForm 2. Z formularza można wyjść albo klikając button "Anluluj "lub "Rysuj" 3. W obydwu przypadkach się chowa UserForm.Hide, tylko w przypadku buttonu "Rysuj" każe użytkownikowi wybrać kilka punktów w modelu, po czym rysuje coś w modelu 4. Koniec. Program jest schowany i czeka na kolejne wywołanie. Przez to, że kazał użytkownikowi wybrać punkty, po skończeniu procedury i kliknięciu ENTER Zwcad znowu pyta o nazwę makra. Co mogę z tym zrobić? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
perlon Opublikowano 24 Lipca 2020 Zgłoś Udostępnij Opublikowano 24 Lipca 2020 No to może czas, żeby pokazać kod Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 25 Lipca 2020 Autor Zgłoś Udostępnij Opublikowano 25 Lipca 2020 OK, więc tak. Na początku ustawienia przycisku w ZWCAD w "Dostosuj Interfejs użytkownika" Jak już pisałem wcześniej mam utworzony skrót w poleceniu Makro: "ZPP". ZWCAD wie co otworzyć dzięki wspomnianemu już wcześniej lispowi wczytanego do programu: (defun c:ZPP (/) (command "-VBARUN" "D:/Programy/vba/KonstruktorAP.zvb!ZP_plus.STR_ZP") ) (command "ZPP") Dzięki temu procesowi, ZWCAD otwierał makro z ikonki a po wykonaniu i zakończeniu prostych czynności, mogłem te makro otworzyć jeszcze raz ENTEREM. W/w lisp otwiera mi oczywiście moduł o nazwie "ZP_plus" i procedurę "STR_ZP": Sub STR_ZP() frm_ZP.show End Sub frm_ZP jest to UserForm między innymi z buttonem o nazwie " b_draw" Problem się pojawił, gdy moje makro wymaga od użytkownika dodatkowych czynności jak np. wskazanie punktów w modelu ZWCAD. Private Sub b_draw_Click() frm_ZP.Hide Dim PIERWSZY, DRUGI, TRZECI, CZWARTY As Variant Dim Points(3) As Double Dim Dlugosc As Integer Dim FileToInsert As String Dim punktyBlok(0 To 2) As Double Dim skala, skalajednostki As Double Dim BlockRef As ZcadBlockReference Dim BlockAttributes As Variant PIERWSZY = ThisDrawing.Utility.GetPoint(, "Podaj punkt P1 (początek pręta):") DRUGI = ThisDrawing.Utility.GetPoint(PIERWSZY, "Podaj punkt P2 (koniec pręta):") TRZECI = ThisDrawing.Utility.GetPoint(, "Podaj punkt P3 (poczatek rozkładu:") CZWARTY = ThisDrawing.Utility.GetPoint(TRZECI, "Podaj punkt P4 (koniec rozkładu):") If PIERWSZY(0) < DRUGI(0) Then 'punkt P1 jest na lewo od P2 Points(0) = PIERWSZY(0) - Int(txt_zakotwienie.Value) / skalajednostki Points(1) = PIERWSZY(1) Points(2) = DRUGI(0) + Int(txt_zakotwienie.Value) / skalajednostki Dlugosc = RoundUp(Points(2) - Points(0), Int(txt_zaokr.Value) / skalajednostki) Points(2) = Points(0) + Dlugosc Points(3) = PIERWSZY(1) punktyBlok(0) = (Points(0) + Points(2)) / 2 - 30 * skala: punktyBlok(1) = Points(1): punktyBlok(2) = 0 Else Points(0) = PIERWSZY(0) + Int(txt_zakotwienie.Value) / skalajednostki Points(1) = PIERWSZY(1) Points(2) = DRUGI(0) - Int(txt_zakotwienie.Value) / skalajednostki MsgBox Points(0) - Points(2) Dlugosc = RoundUp(Points(0) - Points(2), Int(txt_zaokr.Value) / skalajednostki) Points(2) = Points(0) - Dlugosc MsgBox Points(0) - Points(2) Points(3) = PIERWSZY(1) punktyBlok(0) = (Points(0) + Points(2)) / 2 - 30 * skala: punktyBlok(1) = Points(1): punktyBlok(2) = 0 End If Set newlayer = ThisDrawing.Layers.Add("PRETY") ThisDrawing.ActiveLayer = newlayer Set ZcadPolyline = ThisDrawing.ModelSpace.AddLightWeightPolyline(Points) ZcadPolyline.ConstantWidth = Int(cmb_srednica.Value) / WczytajSkale()(3) Call ZapiszUstawienia(frm_ZP.Controls, "ZP_plus") End Sub Po tej procedurze moje okienko UserForm "frm_ZP" jest schowane (pierwsze linijki tekstu) i po skończeniu rysowania znajduję się już w modelu ZWCAD. Klikając ENTER w celu wywołania funkcji ZWCAD nie włącza jeszcze raz procedury o nazwie "ZP_plus" a co za tym idzie mojego UserForm, tylko pyta się o nazwę makra. Dzięki za zaangażowanie, może uda się to szybko poprawić. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
perlon Opublikowano 25 Lipca 2020 Zgłoś Udostępnij Opublikowano 25 Lipca 2020 (edytowane) Jak na moje oko (choć nie programuję na co dzień VBA) to powinno działać. Enter powinien powtórzyć ostatnią komendę czyli ZPP. Pod ikonkę w toolbarsie powinna być podpięta komenda z lispa czyli zpp. Sprawdź taki test. U mnie działa. Musisz tylko poprawić ścieżkę do pliku Project.zvb. Konfiguracja buttona w toolbarsie: project.lsp Project.zvb Edytowane 25 Lipca 2020 przez perlon Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pop3k Opublikowano 26 Lipca 2020 Autor Zgłoś Udostępnij Opublikowano 26 Lipca 2020 Działa! Serdecznie dziekuję. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.