[Risolto] Identificazione del pulsante di connessione macro
[Risolto] Identificazione del pulsante di connessione macro
Saluti ,
So che quando faccio clic sul pulsante Macro con il tasto destro del mouse, posso facilmente identificare la Macro collegata a questo pulsante, fino a quel momento capisco molto bene .
ora ho bisogno di fare il contrario, se sono all'interno del progetto VBProject e voglio ad esempio cambiare qualche comando da qualche codice VB qualsiasi, quindi chiedo se è possibile identificare quale pulsante del foglio di lavoro che è collegato a questa Macro che sto alterando ?
abbracci amici .
So che quando faccio clic sul pulsante Macro con il tasto destro del mouse, posso facilmente identificare la Macro collegata a questo pulsante, fino a quel momento capisco molto bene .
ora ho bisogno di fare il contrario, se sono all'interno del progetto VBProject e voglio ad esempio cambiare qualche comando da qualche codice VB qualsiasi, quindi chiedo se è possibile identificare quale pulsante del foglio di lavoro che è collegato a questa Macro che sto alterando ?
abbracci amici .
Ultima modifica di chimico il lunedì 4 febbraio 2019, 3:19, modificato 2 volte in totale.
LibreOffice 5.4.4.2 no Windows 7
Re: Identificazione del pulsante di connessione alla macro
Non credo si possa fare, la cosa migliore è inserire un commento prima di ogni sub indicando a quale pulsante è collegata
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
-
- Volontario
- Messaggi: 164
- Iscritto il: venerdì 9 giugno 2017, 13:48
Re: Identificazione del pulsante di connessione alla macro
Ciao a tutti,
Una possibilità sarebbe di percorrere tutti i controlli, cercando gli eventi assegnatigli.
Qualcosa come:
La quale macro va utilizzata così:
Cordiali saluti.
Una possibilità sarebbe di percorrere tutti i controlli, cercando gli eventi assegnatigli.
Qualcosa come:
Codice: Seleziona tutto
function da_macro_verso_formulari(libreria, modulo, macro, sede)
doc = thiscomponent
controlli = chr(10) + "Uso della macro """ + macro + """ della libreria """ +_
libreria + """ (" + sede + ")" + chr(10)
controlli = controlli + string(len(controlli), 95) + string(2, chr(10))
uri = "vnd.sun.star.script:" + libreria + "." + modulo + "." + macro + "?language=Basic&location=" + sede
sheets = doc.Sheets
for each sheet in sheets.ElementNames
drawpage = sheets.GetByName(sheet).DrawPage
forms = drawpage.Forms
for n = 0 to forms.Count -1
form = forms(n)
da_formulario_verso_controlli(sheet, form, uri, controlli)
next n
next sheet
da_macro_verso_formulari = controlli
end function
function da_formulario_verso_controlli(foglio, formulario, uri, controlli)
for n = 0 to formulario.Count -1
control = formulario(n)
controltype = replace(control.ServiceName, "stardiv.one.form.component.", "")
if controltype = "Form" then
da_formulario_verso_controlli(foglio, control, uri, controlli)
end if
scriptevents = formulario.getScriptEvents(n)
if ubound(scriptevents) >= 0 then
for each event in scriptevents
if event.ScriptCode = uri then
controlname = control.Name
if control.PropertySetInfo.hasPropertyByName("Label") then
controlname = control.Label
end if
controlli = controlli + controltype + " """ + controlname + """ (evento """ + event.EventMethod +_
""", foglio """ + foglio + """)" + chr(10)
end if
next event
end if
next n
da_formulario_verso_controlli = controlli
end function
Codice: Seleziona tutto
sub main
uso = da_macro_verso_formulari("Standard", "Module2", "trovami", "document")
msgbox uso
end sub
- Allegati
-
- chimico.ods
- (10.96 KiB) Scaricato 147 volte
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Win7 + LinuxMint
Re: Identificazione del pulsante di connessione alla macro
Saluti sr. hubert lambert
La tua macro è stata fantastica, mi ha aiutato molto, lo sto già usando .
Vorrei fare un'altra domanda, potrei creare un codice che informa il percorso Macro all'interno del progetto VBproject ?
per esempio: il comando InputBox mi chiede il nome della Macro, scrivo il nome della macro, poi il codice indica il percorso di questa macro in VBProject, che informa la libreria e il modulo della Macro che ho digitato nell'InputBox .
Posso farlo all'interno di VBProject usando il comando "Ctrl + H", ma se voglio proteggere con password VBProject, allora quando voglio trovare il percorso della macro, devo rimuovere la protezione .
nota: che il mio file ha più di 100 macros .
Vi abbraccio e vi ringrazio molto per l'aiuto che mi avete già dato .

La tua macro è stata fantastica, mi ha aiutato molto, lo sto già usando .


Vorrei fare un'altra domanda, potrei creare un codice che informa il percorso Macro all'interno del progetto VBproject ?
per esempio: il comando InputBox mi chiede il nome della Macro, scrivo il nome della macro, poi il codice indica il percorso di questa macro in VBProject, che informa la libreria e il modulo della Macro che ho digitato nell'InputBox .
Posso farlo all'interno di VBProject usando il comando "Ctrl + H", ma se voglio proteggere con password VBProject, allora quando voglio trovare il percorso della macro, devo rimuovere la protezione .
nota: che il mio file ha più di 100 macros .
Vi abbraccio e vi ringrazio molto per l'aiuto che mi avete già dato .


LibreOffice 5.4.4.2 no Windows 7
-
- Volontario
- Messaggi: 164
- Iscritto il: venerdì 9 giugno 2017, 13:48
Re: Identificazione del pulsante di connessione alla macro
Ecco una proposta :
Nel file allegato, quella proposta va testata con il nome di macro "trovami" o "main".
Codice: Seleziona tutto
sub uso_macro()
doc = thiscomponent
scriptprovider = createUnoService("com.sun.star.script.provider.ScriptProviderForBasic")
scriptprovider.initialize(array(doc))
macro = trim(inputbox("Nome della macro da trovare:"))
if macro = "" then exit sub
uri = percorso_macro(scriptprovider, macro)
if uri = "" then
msgbox "Macro """ & macro & """ non trovata."
exit sub
end if
controlli = ""
sheets = doc.Sheets
for each sheet in sheets.ElementNames
drawpage = sheets.GetByName(sheet).DrawPage
forms = drawpage.Forms
for n = 0 to forms.Count -1
form = forms(n)
da_formulario_verso_controlli(sheet, form, uri, controlli)
next n
next sheet
if controlli = "" then controlli = "Nessuno"
titolo = chr(10) + "La macro """ + macro + """ è usata da:" + chr(10)
titolo = titolo + string(len(titolo), 95) + string(2, chr(10))
msgbox titolo + controlli
end sub
function da_formulario_verso_controlli(foglio, formulario, uri, controlli)
for n = 0 to formulario.Count -1
control = formulario(n)
controltype = replace(control.ServiceName, "stardiv.one.form.component.", "")
if controltype = "Form" then
da_formulario_verso_controlli(foglio, control, uri, controlli)
end if
scriptevents = formulario.getScriptEvents(n)
if ubound(scriptevents) >= 0 then
for each event in scriptevents
if event.ScriptCode = uri then
controlname = control.Name
if control.PropertySetInfo.hasPropertyByName("Label") then
controlname = control.Label
end if
controlli = controlli + controltype + " """ + controlname + """ (evento """ + event.EventMethod +_
""", foglio """ + foglio + """)" + chr(10)
end if
next event
end if
next n
da_formulario_verso_controlli = controlli
end function
function percorso_macro(sp, themacro)
libraries = sp.ChildNodes
for each library in libraries
if library.hasChildNodes() then
modules = library.ChildNodes
for each module in modules
if module.hasChildNodes() then
macros = module.ChildNodes
for each macro in macros
if macro.Name = themacro then
percorso_macro = "vnd.sun.star.script:" + library.Name + "." + module.Name + "." + themacro + "?language=Basic&location=document"
exit function
end if
next macro
end if
next module
end if
next library
percorso_macro = ""
end function
- Allegati
-
- chimico.ods
- (11.82 KiB) Scaricato 143 volte
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Win7 + LinuxMint
Re: Identificazione del pulsante di connessione alla macro
è perfetto, ottima macro sr. hubert lambert .
ma, penso che tu non mi abbia capito in questo nuovo dubbio, la mia domanda è Se è possibile informare l'indirizzo Macro in VBproject .
Ho creato un piccolo modello nel foglio di lavoro 1 nelle celle "B13", "B16" e "B17", di quello che sto cercando .
Potrei già mettere questo argomento come Risolto, perché il primo dubbio è già stato risolto perfetto .
segue il file .
Molte grazie, amico mio .



ma, penso che tu non mi abbia capito in questo nuovo dubbio, la mia domanda è Se è possibile informare l'indirizzo Macro in VBproject .
Ho creato un piccolo modello nel foglio di lavoro 1 nelle celle "B13", "B16" e "B17", di quello che sto cercando .
Potrei già mettere questo argomento come Risolto, perché il primo dubbio è già stato risolto perfetto .

segue il file .
Molte grazie, amico mio .
- Allegati
-
- chimico_2.ods
- (15.13 KiB) Scaricato 135 volte
LibreOffice 5.4.4.2 no Windows 7
-
- Volontario
- Messaggi: 164
- Iscritto il: venerdì 9 giugno 2017, 13:48
Re: Identificazione del pulsante di connessione alla macro

OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Win7 + LinuxMint
Re: Identificazione del pulsante di connessione alla macro
[Risolto]
sr. hubert lambert ,
la macro è molto perfetta, è stato un finale molto intelligente, è stato bello la macro .
Congratulazioni per la tua grande conoscenza .
e grazie per l'aiuto .
amico abbraccio .
sr. hubert lambert ,
la macro è molto perfetta, è stato un finale molto intelligente, è stato bello la macro .



Congratulazioni per la tua grande conoscenza .



e grazie per l'aiuto .

amico abbraccio .

LibreOffice 5.4.4.2 no Windows 7