[Risolto] Modifica macro

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
solitariopc
Messaggi: 63
Iscritto il: mercoledì 1 febbraio 2012, 12:36

[Risolto] Modifica macro

Messaggio da solitariopc »

Buongiorno a tutti e serena giornata di lavoro.
Nel file allegato ho due tabelle con nomi (ma possono essere anche numeri) dove con una macro che cortesemente (hubert lambert) tempo addietro rese fattibile la mia richiesta di aiuto, dove la tabella nuova veniva aggiunta a una tabella fissa. Quella richiesta cancellava le righe superiori, spostava le celle restanti sopra e aggiungeva le righe della nuova tabella sotto. Quello che chiedo ora è avere la azione opposta, cancellare le righe sotto, spostare giù le celle che restano e aggiungere sopra la nuova tabella. La macro è commentata, e la parte da modificare penso di conoscerla ma non conosco la sintassi per poter operare e tentare io stesso la modifica. Grazie per la risposta che mi sarà data.
Ancora buona una giornata.
Allegati
macro_da_modificare.ods
(25.42 KiB) Scaricato 76 volte
Ultima modifica di solitariopc il lunedì 14 novembre 2022, 7:46, modificato 2 volte in totale.
LibreOffice 5.1.6.2 su LinuxMint 18
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Modifica macro

Messaggio da patel »

prova questa

Codice: Seleziona tutto

sub main
	doc = thiscomponent
	tabella_fissa = doc.NamedRanges.getByName("vecchia").ReferredCells
	dati_fissi = tabella_fissa.DataArray
	tabella_nuova = doc.NamedRanges.getByName("nuova").ReferredCells
	dati_nuovi = tabella_nuova.DataArray
	max = ubound(dati_fissi)+1 
	for n = max -1 to 1 step -1
           dati_fissi(n) =  dati_fissi(n-1)
        next
	dati_fissi(0) =  dati_nuovi(0)
	tabella_fissa.setDataArray(dati_fissi)
	tabella_nuova.clearContents(7)
end sub
Ho spostato le righe nella matrice con un ciclo, ma mi piacerebbe sapere se il risultato può essere ottenuto utilizzando REDIM
-------------------
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
solitariopc
Messaggi: 63
Iscritto il: mercoledì 1 febbraio 2012, 12:36

Re: [Risolto] Modifica macro

Messaggio da solitariopc »

Si. La soluzione e la riscrittura della macro è la soluzione che chiedevo e ringrazio molto Patel per la sua disponibilità. Per una risposta alla curiosità esposta non oso neanche aprire bocca non ho la conoscenza quindi ad altri la parola. Ancora grazie per l'aiuto.
LibreOffice 5.1.6.2 su LinuxMint 18
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Modifica macro

Messaggio da patel »

La mia domanda ovviamente non era rivolta a te, ti prego di togliere temporaneamente il risolto in attesa di altre soluzioni.
-------------------
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
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8954
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Modifica macro

Messaggio da charlie »

patel ha scritto: venerdì 11 novembre 2022, 17:17 ti prego di togliere temporaneamente il risolto in attesa di altre soluzioni.
L'ho fatto io.
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Rafkus_pl
Messaggi: 52
Iscritto il: domenica 19 settembre 2021, 15:45

Re: Modifica macro

Messaggio da Rafkus_pl »

patel ha scritto: giovedì 10 novembre 2022, 21:01 Ho spostato le righe nella matrice con un ciclo, ma mi piacerebbe sapere se il risultato può essere ottenuto utilizzando REDIM
Domanda interessante che dovevo controllare... puoi; P.

Codice: Seleziona tutto

sub main2
	doc = thiscomponent
	tabella_fissa = doc.NamedRanges.getByName("vecchia").ReferredCells
	dati_fissi = tabella_fissa.DataArray	
	tabella_nuova = doc.NamedRanges.getByName("nuova").ReferredCells
	dati_nuovi = tabella_nuova.DataArray

	ReDim Preserve  dati_fissi(-1 to 2) 
	dati_fissi(-1) =  dati_nuovi(0)	

	tabella_fissa.setDataArray(dati_fissi)
	tabella_nuova.clearContents(7)
end sub
Riflettendo per una dimensione dell'array sconosciuta:

Codice: Seleziona tutto

sub main3
	doc = thiscomponent
	tabella_fissa = doc.NamedRanges.getByName("vecchia").ReferredCells
	dati_fissi = tabella_fissa.DataArray	
	tabella_nuova = doc.NamedRanges.getByName("nuova").ReferredCells
	dati_nuovi = tabella_nuova.DataArray

	diff = ubound(dati_nuovi)+1
'	min =LBound(dati_fissi) - diff		rem LBound(dati_fissi)=0
	max = ubound(dati_fissi)-diff 
	ReDim Preserve  dati_fissi(-diff to max) 
	for n = -diff to -1
		dati_fissi(n) = dati_nuovi(diff + n)
	next n

	tabella_fissa.setDataArray(dati_fissi)
	tabella_nuova.clearContents(7)
end sub
OpenOffice 4.1.6 / LibreOffice 7.1.6.2 (x64)/ Windows 10

Sto scrivendo con google traduttore mi scuso per eventuali errori.
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Modifica macro

Messaggio da patel »

Grazie Rafkus, io non osavo provare con indici negativi.
A questo punto penso si possa considerare il problema RISOLTO
-------------------
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
solitariopc
Messaggi: 63
Iscritto il: mercoledì 1 febbraio 2012, 12:36

Re: Modifica macro

Messaggio da solitariopc »

Come proposto da Patel metto risolto.
Grazie ancora a tutti per l'aiuto reso, faccio mio il ringraziamento di Patel a Rafkus.
Buona giornata.
LibreOffice 5.1.6.2 su LinuxMint 18
Rispondi