[Risolto] Inibizione altri pulsanti mentre la macro e' in esecuzione

Non sapete dove scrivere? Scrivete qui!
Regole del forum
Solo richieste di aiuto. Per saluti e presentazioni utilizzate il forum Discussioni Generali e Presentazioni.
Rispondi
MERE2206
Messaggi: 8
Iscritto il: domenica 19 maggio 2024, 9:03

[Risolto] Inibizione altri pulsanti mentre la macro e' in esecuzione

Messaggio da MERE2206 »

Buongiorno a tutti. Ho provato a cercare nel forum ma non ho trovato soluzione al mio problema.
Come nel file allegato di esempio avrei la necessita' che, nel momento in cui venga premuto il pulsante "A" associato alla macro "TestA",
i pulsanti "B" e "C" risultino inibiti e non sia possibile quindi lanciare le macro associate a loro finche' l' esecuzione
della macro associata al pulsante "A" non risulti terminata.
Vale lo stesso discorso se come primo pulsante si preme "B" oppure "C".
Per inibizione del pulsante intendo che la macro ad esso associata non venga eseguita, quindi se sia possibile configurare il pulsante in qualche modo particolare oppure il risultato lo si possa raggiungere modificando le macro stesse.
Premetto che il file allegato e' solo al fine di esempio, la soluzione al problema mi servirebbe per applicarla a un file molto piu' complesso.
Ringrazio anticipatamente chi volesse affrontare la questione.
ESEMPIO.ods
(9.87 KiB) Scaricato 36 volte
Ultima modifica di MERE2206 il domenica 19 maggio 2024, 19:51, modificato 1 volta in totale.
OpenOffice 4.1.6 su Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8965
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Inibizione altri pulsanti mentre la macro e' in esecuzione

Messaggio da charlie »

Ciao, Calc non è il campo in cui sono più ferrato, tuttavia ho voluto provare aiutandomi con ChatGPT e ho trovato che questa macro funziona:

Codice: Seleziona tutto

Sub TestA

    Dim oDoc As Object
    Dim oSheet As Object
    Dim oForm As Object
    Dim oButtonB As Object
    Dim oButtonC As Object
    
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Se i pulsanti sono nel primo foglio
    oForm = oSheet.DrawPage.Forms.getByIndex(0)
    
    oButtonB = oForm.getByName("B")
    oButtonB.Enabled = False  ' Disattiva pulsante B
    
    oButtonC = oForm.getByName("C")
    oButtonC.Enabled = False  ' Disattiva pulsante C
  	
    oSheet.getCellRangeByName("C37").string = "A"
    oSheet.getCellRangeByName("H37").string = "A"
    oSheet.getCellRangeByName("M37").string = "A"
    wait 5000    
   
    oButtonB.Enabled = True  ' Riattiva pulsante B  
    oButtonC.Enabled = True  ' Riattiva pulsante C
       
End Sub
    
Sub TestB
    
    Dim oDoc As Object
    Dim oSheet As Object
    Dim oForm As Object
    Dim oButtonA As Object
    Dim oButtonC As Object
    
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Se i pulsanti sono nel primo foglio
    oForm = oSheet.DrawPage.Forms.getByIndex(0)
    
    oButtonA = oForm.getByName("A")
    oButtonA.Enabled = False  ' Disattiva pulsante A
    
    oButtonC = oForm.getByName("C")
    oButtonC.Enabled = False  ' Disattiva pulsante C
  	
    oSheet.getCellRangeByName("C37").string = "B"
    oSheet.getCellRangeByName("H37").string = "B"
    oSheet.getCellRangeByName("M37").string = "B"
    wait 5000
    
    oButtonA.Enabled = True  ' Riattiva pulsante A
    oButtonC.Enabled = True  ' Riattiva pulsante C
    
End Sub
    
Sub TestC
   
    Dim oDoc As Object
    Dim oSheet As Object
    Dim oForm As Object
    Dim oButtonA As Object
    Dim oButtonB As Object
    
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Se i pulsanti sono nel primo foglio
    oForm = oSheet.DrawPage.Forms.getByIndex(0)
    
    oButtonA = oForm.getByName("A")
    oButtonA.Enabled = False  ' Disattiva pulsante A
    
    oButtonB = oForm.getByName("B")
    oButtonB.Enabled = False  ' Disattiva pulsante B
  	
    oSheet.getCellRangeByName("C37").string = "C"
    oSheet.getCellRangeByName("H37").string = "C"
    oSheet.getCellRangeByName("M37").string = "C"
    wait 5000
    
    oButtonA.Enabled = True  ' Riattiva pulsante A
    oButtonB.Enabled = True  ' Riattiva pulsante B
    
End Sub
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
MERE2206
Messaggi: 8
Iscritto il: domenica 19 maggio 2024, 9:03

Re: Inibizione altri pulsanti mentre la macro e' in esecuzione

Messaggio da MERE2206 »

Grazie mille, faccio subito qualche test e vi faccio sapere se tutto ok.
OpenOffice 4.1.6 su Windows 10
MERE2206
Messaggi: 8
Iscritto il: domenica 19 maggio 2024, 9:03

[Risolto] Inibizione altri pulsanti mentre la macro e' in esecuzione

Messaggio da MERE2206 »

Grazie charlie, funziona tutto a dovere. ho semplicemente inserito anche il blocco sul pulsante premuto che lancia la macro, ho notato che premendolo piu' volte andava non so per quale ragione a riabilitare gli altri pulsanti.
Con il codice di seguito funziona tutto perfettamente.
Grazie per il supporto, anche di Domenica ! :D


Codice: Seleziona tutto

Sub TestA

    Dim oDoc As Object
    Dim oSheet As Object
    Dim oForm As Object
    Dim oButtonA As Object
    Dim oButtonB As Object
    Dim oButtonC As Object
    
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Se i pulsanti sono nel primo foglio
    oForm = oSheet.DrawPage.Forms.getByIndex(0)
    
    oButtonA = oForm.getByName("A")
    oButtonA.Enabled = False  ' Disattiva pulsante B
    oButtonB = oForm.getByName("B")
    oButtonB.Enabled = False  ' Disattiva pulsante B
    oButtonC = oForm.getByName("C")
    oButtonC.Enabled = False  ' Disattiva pulsante C
  	
    oSheet.getCellRangeByName("C37").string = "A"
    oSheet.getCellRangeByName("H37").string = "A"
    oSheet.getCellRangeByName("M37").string = "A"
    wait 5000    
   
    oButtonA.Enabled = True  ' Riattiva pulsante A
    oButtonB.Enabled = True  ' Riattiva pulsante B
    oButtonC.Enabled = True  ' Riattiva pulsante C
       
End Sub
    
Sub TestB
    
    Dim oDoc As Object
    Dim oSheet As Object
    Dim oForm As Object
    Dim oButtonA As Object
    Dim oButtonB As Object
    Dim oButtonC As Object
    
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Se i pulsanti sono nel primo foglio
    oForm = oSheet.DrawPage.Forms.getByIndex(0)
    
    oButtonA = oForm.getByName("A")
    oButtonA.Enabled = False  ' Disattiva pulsante A
    oButtonB = oForm.getByName("B")
    oButtonB.Enabled = False  ' Disattiva pulsante B
    oButtonC = oForm.getByName("C")
    oButtonC.Enabled = False  ' Disattiva pulsante C
  	
    oSheet.getCellRangeByName("C37").string = "B"
    oSheet.getCellRangeByName("H37").string = "B"
    oSheet.getCellRangeByName("M37").string = "B"
    wait 5000
    
    oButtonA.Enabled = True  ' Riattiva pulsante A
    oButtonB.Enabled = True  ' Riattiva pulsante B
    oButtonC.Enabled = True  ' Riattiva pulsante C
    
End Sub
    
Sub TestC
   
    Dim oDoc As Object
    Dim oSheet As Object
    Dim oForm As Object
    Dim oButtonA As Object
    Dim oButtonB As Object
    Dim oButtonC As Object
    
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' Se i pulsanti sono nel primo foglio
    oForm = oSheet.DrawPage.Forms.getByIndex(0)
    
    oButtonA = oForm.getByName("A")
    oButtonA.Enabled = False  ' Disattiva pulsante A
    oButtonB = oForm.getByName("B")
    oButtonB.Enabled = False  ' Disattiva pulsante B
    oButtonC = oForm.getByName("C")
    oButtonC.Enabled = False  ' Disattiva pulsante C
  	
    oSheet.getCellRangeByName("C37").string = "C"
    oSheet.getCellRangeByName("H37").string = "C"
    oSheet.getCellRangeByName("M37").string = "C"
    wait 5000
    
    oButtonA.Enabled = True  ' Riattiva pulsante A
    oButtonB.Enabled = True  ' Riattiva pulsante B
    oButtonC.Enabled = True  ' Riattiva pulsante C
    
End Sub
OpenOffice 4.1.6 su Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8965
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Inibizione altri pulsanti mentre la macro e' in esecuzione

Messaggio da charlie »

I tag [Risolto] vanno messi sul primo messaggio.
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Rispondi