[RISOLTO] Macro provoca crash

Creare una macro - Scrivere uno script - Usare le API
Rispondi
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

[RISOLTO] Macro provoca crash

Messaggio da amax »

Buongiorno, ho un file con delle macro che hanno sempre funzionato, una in particolare adesso si blocca e manda in crash.
In particolare la macro, salva alcuni dati (celle) in un file esterno. Lancio la macro che fa il suo dovere, apre il file di destinazione e copia le celle al loro posto, però a questo punto si blocca tutto. ho la sensazione come se ci fosse qualcosa che va in loop, ma non riesco a capire cosa.
Allego la macro, Uso MacOs 13.1

Grazie

Codice: Seleziona tutto

Sub SalvaInContabilita

Dim DocName as object, DocUlr as string, dummy(), range as object, sVar as Integer
Doc = ThisComponent
sheet = Doc.currentcontroller.getActiveSheet() 'Seleziona il foglio visualizzato
NomeFoglioArchivio = sheet.getCellRangeByName("A3").String ' il nome del foglio di destinazione

sVar = MsgBox( "Vuoi continuare con il salvataggio [ " & NomeFoglioArchivio &  " " & sheet.getCellRangeByName("A4").string & " ]  nel file di contabilità?",   MB_YESNO )

If sVar = IDYES  Then
sFileName ="/Users/utente/Documents/Contabilità/2023/23-Riepilogo-Contabilità.ods"  ' file destinazione NAS
'sFileName ="/Users/utente/Desktop/Contabilità-2020.ods" 'file destinazione test
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Dummy() )
'Preventivo = DocName.Sheets.getbyname("Preventivi") ' il nome del foglio di destinazione

If NomeFoglioArchivio = "Preventivo n°" Then
Archivio = DocName.Sheets.getbyname("Ultima Preventivo")
Else
Archivio = DocName.Sheets.getbyname("Ultima Fattura")
End if

REM ---Loop che controlla celle di colonna A ...
'incrementando il valore della variabile “Riga” fino a trovare il valore della prima riga libera
Riga = 1
Do while Archivio.getCellByPosition(0,Riga).string <> ""
Riga = Riga + 1
Loop
Archivio.getCellByPosition(0,Riga).String = Sheet.getCellRangeByName("E4").String 		'Riferimento
Archivio.getCellByPosition(2,Riga).String = Sheet.getCellRangeByName("F3").String 			'Cliente
Archivio.getCellByPosition(3,Riga).String = Sheet.getCellRangeByName("F4").String			'Nome
Archivio.getCellByPosition(15,Riga).String = Sheet.getCellRangeByName("A4").String		'N°
Archivio.getCellByPosition(5,Riga).Formula = Sheet.getCellRangeByName("C4").Formula	'Data
Archivio.getCellByPosition(6,Riga).String = Sheet.getCellRangeByName("A1").String			'Descrizione
Archivio.getCellByPosition(7,Riga).Value = Sheet.getCellRangeByName("A8").Value		'Imponibile
Archivio.getCellByPosition(8,Riga).Value = Sheet.getCellRangeByName("C8").Value		'IVA
Archivio.getCellByPosition(9,Riga).Value = Sheet.getCellRangeByName("D8").Value		'Totale
DocName.store
DocName.Close(true)
MsgBox (" Archiviazione  [ " & NomeFoglioArchivio & " " & sheet.getCellRangeByName("A4").string & " ]  EFFETTUATA con successo nel file di contabilità.")
Else
MsgBox (" Archiviazione  [ " & NomeFoglioArchivio & " " & sheet.getCellRangeByName("A4").string & " ]  NON effettuata nel file di contabilità.")
End If

End Sub
Ultima modifica di amax il martedì 12 dicembre 2023, 19:49, modificato 1 volta in totale.
macOS 14 Sonoma: LibreOffice 24.2.1
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro provoca crash

Messaggio da patel »

Allega un file di esempio da testare, la macro sembra OK, altrimenti avvia la macro con F8 e procedi step by step per seguire il percorso.
-------------------
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
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Macro provoca crash

Messaggio da nickGiard »

Mi sento di dare un piccolo suggerimento, almeno dal punto di vista formale:
sostituire getCellRangeByName con getCellByName, anche se l'oggetto restituito sembra comunque una cella.
Nel caso fosse un Range, le proprietà esposte sarebbero errate.
Nicola con LibreOffice 7.1 (x64) su Windows 11
Gaetanopr
Volontario
Volontario
Messaggi: 3291
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro provoca crash

Messaggio da Gaetanopr »

nickGiard ha scritto: giovedì 16 marzo 2023, 19:10
sostituire getCellRangeByName con getCellByName, anche se l'oggetto restituito sembra comunque una cella.
Nel caso fosse un Range, le proprietà esposte sarebbero errate.
Il metodo da te indicato non esiste, sia per cella che per range si usa getCellRangeByName, solo in caso di utilizzo delle coordinate con la numerazione si distingue la cella dal range, ma in questo modo

Codice: Seleziona tutto

getCellRangeByPosition
e

Codice: Seleziona tutto

getCellByPosition
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Macro provoca crash

Messaggio da unlucky83 »

Forse è sufficiente mettere un WAIT tra questi due comandi

Codice: Seleziona tutto

DocName.store
DocName.Close(true)
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
amax
Messaggi: 98
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Macro provoca crash

Messaggio da amax »

grazie a tutti per le risposte e mi scuso se non ho risposto prima.
Il problema era legato all'aggiornamento del software, ho cancellato tutti i file e reinstallato e non ho avuto più problemi.
macOS 14 Sonoma: LibreOffice 24.2.1
Rispondi