Pagina 1 di 1
[Risolto] Sintassi array
Inviato: domenica 21 aprile 2019, 13:49
da Raoul Duke
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
Codice: Seleziona tutto
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
Re: Sintassi array
Inviato: domenica 21 aprile 2019, 21:01
da patel
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.
Codice: Seleziona tutto
Doc = ThisComponent
Sheet = Doc.Sheets(0)
CellRange = Sheet.getCellRangeByName("A2:C20")
CellRange.clearContents(5) ' value + string VALUE = 1 STRING = 4
Re: Sintassi array
Inviato: domenica 21 aprile 2019, 21:28
da Raoul Duke
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....
Re: Sintassi array
Inviato: domenica 21 aprile 2019, 21:49
da gioh66
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
Codice: Seleziona tutto
=SE(VAL.ERRORE(INDICE(Foglio1!A$2:A$6;PICCOLO(SE(Foglio1!$B$2:$B$6=Foglio1!$B$15;RIF.RIGA(Foglio1!$A$2:$A$6)-1);RIF.RIGA($A1))));"";INDICE(Foglio1!A$2:A$6;PICCOLO(SE(Foglio1!$B$2:$B$6=Foglio1!$B$15;RIF.RIGA(Foglio1!$A$2:$A$6)-1);RIF.RIGA($A1))))
inserisci la formula nella cella conferma con
ctrl+maiuscolo+invio e copia incolla in basso
In B2 invece metti
Codice: Seleziona tutto
=SE(VAL.ERRORE(INDICE(Foglio1!C$2:C$6;PICCOLO(SE(Foglio1!$B$2:$B$6=Foglio1!$B$15;RIF.RIGA(Foglio1!$A$2:$A$6)-1);RIF.RIGA($A1))));"";INDICE(Foglio1!C$2:C$6;PICCOLO(SE(Foglio1!$B$2:$B$6=Foglio1!$B$15;RIF.RIGA(Foglio1!$A$2:$A$6)-1);RIF.RIGA($A1))))
matriciale come la prima.
Re: Sintassi array
Inviato: domenica 21 aprile 2019, 22:22
da Raoul Duke
Grazie gioh,
Si so che si può fare con le matriciali, ma avrei bisogno di farlo col codice. Grazie comunque della disponibilità!
Re: Sintassi array
Inviato: domenica 21 aprile 2019, 22:32
da gioh66
Di nulla, allora confidiamo in chi il codice lo sa scrivere
Re: Sintassi array
Inviato: lunedì 22 aprile 2019, 8:23
da patel
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:
Codice: Seleziona tutto
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
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 2:09
da Raoul Duke
grazie
patel
, 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
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 8:16
da patel
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.
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 10:35
da Raoul Duke
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.
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 10:49
da patel
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 ?
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 11:05
da Raoul Duke
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.
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 11:15
da patel
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
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 11:27
da Raoul Duke
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.
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 16:13
da Raoul Duke
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
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 19:16
da patel
bene, spero che la prossima volta metterai tutte le sub in module1
Re: Sintassi array
Inviato: martedì 23 aprile 2019, 21:05
da Raoul Duke
ma se le metto tutte in un modulo quando il codice si allunga poi per trovarle devo scorrere migliaia di righe no? non è più comodo usare più moduli?
Re: Sintassi array
Inviato: mercoledì 24 aprile 2019, 17:40
da patel
usando più moduli come fai a ricordarti in quale modulo hai messo le sub ? comunque se ti trovi bene così continua pure.