Condividi:        

vba excel: redim array all'interno di type

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba excel: redim array all'interno di type

Postdi karug64 » 08/09/16 20:15

Salve a tutti.

Ho questa struttura dati:

Codice: Seleziona tutto
Public Type new_cruci

    parola As String
    lun_parola As Integer
    or_ve As String
    riga As Integer
    rig_iniziale As Integer
    rig_finale As Integer
    colonna As Integer
    col_iniziale As Integer
    col_finale As Integer
    testo As String
    num_parola() As Long
    provata() As String
   
End Type


Poi ho un array della struttura

Codice: Seleziona tutto
Public new_cruci2() As new_cruci


che dopo dei calcoli ed opportuni controlli dimensiono

Codice: Seleziona tutto
ReDim new_cruci2(Sheets(foglio_array).Range("B" & ultrigo).End(xlUp).Row)


Ora dovrei anche dimensionare gli array all'interno della struttura

num_parola() e provata()

ma come si fa ?

Se provo con

Codice: Seleziona tutto
ReDim new_cruci2.num_parola(new_max_lung)


mi da errore : qualificatore non valido.

Ma è possibile dimensionare in maniera diversa l'array della struttura e gli array all'interno della struttura stessa ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Sponsor
 

Re: vba excel: redim array all'interno di type

Postdi karug64 » 08/09/16 23:18

Tra le mille prove ho fatto così:

Codice: Seleziona tutto
For x = 1 To Sheets(foglio_array).Range("B" & ultrigo).End(xlUp).Row
        ReDim new_cruci2(x).provata(new_max_lung)
        ReDim new_cruci2(x).num_parola(new_max_lung)
   Next x


Sembra funzionare.

E' la maniera giusta o c'è un sistema migliore ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: vba excel: redim array all'interno di type

Postdi karug64 » 10/09/16 08:26

Riprendo l'argomento perchè ho un problema.
Col codice che ho postato riesco a dichiarare un array di type al cui interno ci sono altri due array.

Con questo codice assegno valori a caso (giusto per riempirlo) all'array, senza ottenere errori.

Codice: Seleziona tutto
For x = 1 To tot_par
  For y = 1 To nr_max_lung
        new_cruci2(x).provata(y) = "N"
        new_cruci2(x).num_parola(y) = x + y
    Next y
   Next x


infatti se blocco l'esecuzione del programma dopo la routine e in debug controllo l'array new_cruci2() lo trovo perfettamente compilato.

Se subito dopo provo ad accede ad agli elementi dell'erray interno (per esempio provo a stamparlo in debug) con questo codice :
Codice: Seleziona tutto

For x 1 to tot_par
For y = 1 To nr_max_lung
        yy = yy + 1
        Sheets("new_array").Cells(x, yy).Value = new_cruci2(x).pos_parola(yy)
        yy = yy + 1
        Sheets("new_array").Cells(x, yy).Value = new_cruci2(x).provata(yy)
    Next y
Next x


o anche solo con

Codice: Seleziona tutto
 Sheets("new_array").Cells(x, yy).Value = new_cruci2(1).pos_parola(1)


ho errore su .pos_parola "Errore di compilazione. Prevista matrice"

Ma come si accede all'elemento dell'array dentro l'array di type ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: vba excel: redim array all'interno di type

Postdi scossa » 10/09/16 12:06

Ciao,

secondo me, se non alleghi un file difficilmente qualcuno si metterà a ricreare il tuo "ambiente" ex-novo, col rischio poi che sia del tutto diverso da quello effettivo.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: vba excel: redim array all'interno di type

Postdi karug64 » 10/09/16 13:03

In questo momento non ho il Pc con me, appena posso invio il file.

Ma secondo me non c'è bisogno di ricreare il codice: data la struttura (primo post) la domanda è: con quale sintassi si accede ad un membro di una struttura che sia un'array ?

A più tardi ....
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: vba excel: redim array all'interno di type

Postdi karug64 » 10/09/16 14:34

Scusatemi tutti .....

La sintassi è giusta. Il problema era che nel copia incolla avevo dimenticato a cambiare il nome dell'array :oops: :oops:

Codice: Seleziona tutto
 Sheets("new_array").Cells(x, yy).Value = new_cruci2(1).pos_parola(1)


andava scritto

Codice: Seleziona tutto
 Sheets("new_array").Cells(x, yy).Value = new_cruci2(1).NUM_parola(1)


così funziona.

Grazie lo stesso.
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: vba excel: redim array all'interno di type

Postdi Anthony47 » 12/09/16 14:32

Tra le mille prove ho fatto così:

Codice: Seleziona tutto
 For x = 1 To Sheets(foglio_array).Range("B" & ultrigo).End(xlUp).Row
            ReDim new_cruci2(x).provata(new_max_lung)
            ReDim new_cruci2(x).num_parola(new_max_lung)
       Next x

Sembra funzionare.

Per maggiore correttezza dovresti usare
Codice: Seleziona tutto
For x = LBound(new_cruci2) to UBound(new_crici2)

Infatti se Option Base e' impostato su 0 (il valore di default) l'uso di "For x = 1 to" preclude il dimensionamento del primo elemento.
E' vero che poi, se usi "For x =1 to" anche per compilare ed estrarre valori non te ne accorgi, ma le possibilita' di errore sono subdole.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: redim array all'interno di type

Postdi karug64 » 12/09/16 20:20

Ok. Grazie per il consiglio.
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22


Torna a Applicazioni Office Windows


Topic correlati a "vba excel: redim array all'interno di type":


Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti