pop3k Posted July 23, 2020 Report Share Posted July 23, 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. Quote Link to comment Share on other sites More sharing options...
perlon Posted July 23, 2020 Report Share Posted July 23, 2020 (edited) 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 Edited July 23, 2020 by perlon Quote Link to comment Share on other sites More sharing options...
pop3k Posted July 23, 2020 Author Report Share Posted July 23, 2020 (edited) OK, dzięki, a jakieś porady jak to podpiąć pod skrót? 😄 Edited July 23, 2020 by pop3k Quote Link to comment Share on other sites More sharing options...
pop3k Posted July 23, 2020 Author Report Share Posted July 23, 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! Quote Link to comment Share on other sites More sharing options...
pop3k Posted July 24, 2020 Author Report Share Posted July 24, 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ć? Quote Link to comment Share on other sites More sharing options...
perlon Posted July 24, 2020 Report Share Posted July 24, 2020 No to może czas, żeby pokazać kod Quote Link to comment Share on other sites More sharing options...
pop3k Posted July 25, 2020 Author Report Share Posted July 25, 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ć. Quote Link to comment Share on other sites More sharing options...
perlon Posted July 25, 2020 Report Share Posted July 25, 2020 (edited) 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 Edited July 25, 2020 by perlon Quote Link to comment Share on other sites More sharing options...
pop3k Posted July 26, 2020 Author Report Share Posted July 26, 2020 Działa! Serdecznie dziekuję. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.