[Risolto] Identificazione del pulsante di connessione macro
							 [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
- 
				hubert lambert
- 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 functionCodice: 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
			
						- 
				hubert lambert
- 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
			
						- 
				hubert lambert
- Volontario 
- Messaggi: 164
- Iscritto il: venerdì 9 giugno 2017, 13:48
Re: Identificazione del pulsante di connessione alla macro
Buona sera adesso   .
 .
			
			
									
						
							 .
 .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
						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
			
						