Salve a tutti
non sono pratico di sintassi array, quindi vi chiedo cortesemente (visto che questo codice era una prova ma in realtà le dimensioni saranno molto maggiori) come si può scrivere in maniera più compatta questo codice?
grazie a tutti e buona pasqua
Sub SelezionaM
Doc = thisComponent
Foglio1 = Doc.sheets(0)
for i=1 to 5
x1=Foglio1.getCellByPosition (4,i)
y1=Foglio1.getCellByPosition (5,i)
z1=Foglio1.getCellByPosition (6,i)
x1.String=""
y1.string=""
z1.string=""
j=j+1
next
j=1
for i=1 to 5
a1=Foglio1.getCellByPosition (0,i)
b1=Foglio1.getCellByPosition (1,i)
c1=Foglio1.getCellByPosition (2,i)
a2=Foglio1.getCellByPosition (4,i)
b2=Foglio1.getCellByPosition (5,i)
c2=Foglio1.getCellByPosition (6,i)
If b1.String = "M" Then
a2=Foglio1.getCellByPosition (4,j)
b2=Foglio1.getCellByPosition (5,j)
c2=Foglio1.getCellByPosition (6,j)
a2.String=a1.string
b2.string=b1.string
c2.string=c1.string
j=j+1
End if
next
end sub
Ultima modifica di Raoul Duke il sabato 27 aprile 2019, 1:31, modificato 1 volta in totale.
Ciao, cosa c'entrano gli array ? tu stai usando celle, magari range di celle, faresti meglio ad allegare un file di esempio con i dati di partenza, il risultato desiderato e qualche spiegazione sul tuo obiettivo.
Per cancellare un range puoi usare questo codice invece di fare un ciclo.
hai ragione, credo di fare un pò di confusione...
cmq ho cambiato leggermente la funzione che deve eseguire il codice.
così com'è non mi funziona perché non sono capace a creare un array di valori (misti numeri e stringhe), e poi selezionarli per inserirli in un range di celle.
allego il file che forse si capisce meglio....
Intanto buona Pasqua, poi premetto che io non so scrivere codice, ma quello che vorresti fare tu si può ottenere con delle formule matriciali:
in A2 di Foglio2 metti
non capisco la tua ostinazione nell'usare array, è inutile salvare il contenuto di un range in un array e poi trasferire l'array in altro range, i range sono già array, nel tuo caso io copierei il range che ti interessa nel foglio 2 e poi eliminerei le righe che non vuoi vedere:
sub copia
Doc = thisComponent
oSheet1 = Doc.Sheets.getByIndex(0)
oSheet2 = Doc.Sheets.getByIndex(1)
CellaSesso = oSheet1.getCellByPosition (1,14)
Sex = CellaSesso.String
oRange = oSheet1.getCellRangeByName("A1:C8").RangeAddress ' range da copiare
oCellCpy = oSheet2.getCellByPosition(0,0).CellAddress ' destinazione
oSheet1.CopyRange(oCellCpy, oRange) ' copia il range
for riga = 5 to 1 step -1
if oSheet2.getCellByPosition (1,riga).String <> Sex then
oSheet2.getRows.removeByIndex(riga, 1)
end if
next
End Sub
-------------------
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
, ho fatto come mi dicevi, in effetti funziona.
ora ho un problema però con le call... come mai quando avvio la sub main non mi esegue la coll alle sub degli altri moduli?
grazie della pazienza
Mettere le varie sub in altri moduli non è la cosa miglore per un principiante, non ti rendi conto se le variabili che usi sono valorizzate. Qundo c'è qualcosa che non funziona avvia la sub Main con F8 step by step, così vedi il flusso del programma e posizionando il cursore sulle variabili ne vedi il valore.
-------------------
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
col cursore mi mostra solo il valore delle variabili numeriche (non le variabili Doc, sheet, ecc... che sono quelle messe in argomento alle funzioni che chiamo).
ma cmq sono talmente poche le variabili che ho impostato che mi sembra strano che sia un problema di dimenticanza di valorizzazione.
resta il fatto che anch'io, con un codice così frammentato, non riesco a capire cosa c'è che non funziona.
Cosa vuoi fare dopo aver copiato i dati filtrati nel foglio2 ?
-------------------
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
capisco, scusami.
ho creato un doc di prova molto più semplificato (che mi da lo stesso problema con le call). per caso potresti vedere se riesci a capire dove starebbe il problema adesso?
grazie mille in ogni caso.
Ma allora parlo al vento, non si tratta del documento semplificato o no, ti ho chiesto cosa vuoi fare e tu mi alleghi un nuovo file con le macro sempre sparpagliate in moduli diversi
-------------------
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
ah, beh, dentro la macro main ho inserito una riga "call selezione", ma quando eseguo la main sembra che questa chiamata la salti proprio. invece vorrei che la eseguisse.
la sub selezione dovrebbe copiarmi i dati nel foglio TRATT, ma invece non me lo fa: rimane vuota la pagina TRATT.
non so come mai ma è bastato nominare il modulo dove c'è il main con un nome che alfabeticamente viene prima di quello dove ci stanno le sub che vengono chiamate e ora funziona... bah.
grazie a tutti in ogni caso