Sostieni Excel VBA con una donazione! Con la tua donazione potrai contribuire al mantenimento del servizio.
Le donazioni sono eseguite con PayPal, il modo più facile, comodo e sicuro per pagare online.
Paypal accetta anche carta di credito o carte prepagate.

Struttura Dati e Array

  • FILE ALLEGATI:
  • Struttura Dati e Array (excel 2010) di pregiudicato_83 (Utente non iscritto) data: 28/12/2016 17:56:07 



    ciao, questa volta non so da dove da dove iniziare e non so la terminologia corretta, premesso ciò vado al punto:

    esiste un modo per dichiarare a priori un array di variabili o (qualcosa di simile) in modo tale da assegnare alle variabili un valore direttamente tramite un array?
    so che non si capisce niente



     
    'codice concettuale
    'array di variabili 
    dim nome as string
    dim cognome as string
    dim eta as integer
    
    persona [nome, cognome, eta]  'questa sarebbe l'array di variabili pronto a ricevere i dati
    
    'quello che vorrei è che con un'istruzione di questo tipo:
    persona = array("mario", "rossi", 35)
    'mi ritrovassi i valori dell'array rispettivamente nelle variabili
    'nome, cognome, eta
    
    'senza dover passare da qualcosa tipo:
    nome = persona(0)
    cognome = persona(1)
    eta = persona(2)
  • di scossa (Utente esperto) data: 28/12/2016 22:21:51 



    cit. pregiudicato_83: "esiste un modo per dichiarare a priori un array di variabili o (qualcosa di simile) in modo tale da assegnare alle variabili un valore direttamente tramite un array? "

    forse, però prima aspetto un tuo riscontro all'ultimo mio post in questa tua discussione: Altezza di Range di celle unite, quanto meno per sapere che l'hai letto.


    scossa's web site
    Se tu hai una mela, ed 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)
  • di pregiudicato_83 (Utente non iscritto) data: 28/12/2016 22:23:59 



    urca, corro a vedere, di solito rispondo e do riscontro,
    sarà stata una certa....vado
  • di pregiudicato_83 (Utente non iscritto) data: 29/12/2016 01:05:37 



    quello che sono riuscito a fare è qualcosa di un po contorto che piu o meno fa quello che vorrei,
    ma mi costringe a fare il doppio lavoro:
    1) creare una variabile personalizzata (semmai si chiama così) di tipo "Persona"
    2 creare una sub con gli stessi "dati" della variabile per assegnare i valori alle variabili

    cosi facendo assegno i valori con una stringa corta simile ad una struttura array

    spero esista qualcosa di più semplice
     
    'definisco la struttura o variabile di tipo Persona
    Public Type Persona
        nome As String
        cognome As String
        eta As Integer
    End Type
    
    'dichiaro la variabile Persona1
    Public persona1 As Persona
    
    'creo la sub di assegnazione
    Public Sub FILL_PERS(ByRef PERS As Persona, nom, cog, eta)
    With PERS: .nome = nom: .cognome = cog: .eta = eta:  End With
    End Sub
    
    
    'nel codice scrivo solo:
    Call FILL_PERS(persona1, "mario", "rossi", 36)
    
    
    
    
    
  • di scossa (Utente esperto) data: 29/12/2016 08:37:31 



    Ciao,

    cit.: "quello che sono riuscito a fare è qualcosa di un po contorto"

    la strada è quella: utilizzare un UDT (User Defined Type), vedi codice sotto.


    scossa's web site
    Se tu hai una mela, ed 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)

     
    ' in un modulo standard
    
    Option Explicit
      Private Type tyPersona
        Nome As String
        Cognome As String
        Eta As Byte
      End Type
    
     Private Function FeedPersona(sNome As String, sCognome As String, nEta As Byte) As tyPersona
      Dim uPersona As tyPersona
      
      With uPersona
        .Nome = sNome
        .Cognome = sCognome
        .Eta = nEta
      End With
      FeedPersona = uPersona
      
    End Function
    
    
    Sub prova()
      Dim Persona As tyPersona
      
      Persona = FeedPersona("mario", "Rossi", 35)
      Debug.Print Persona.Nome & " " & Persona.Cognome & " (anni " & Persona.Eta & ")"
    End Sub
    
    Sub prova2()
      Dim Persona(1 To 3) As tyPersona
      Dim j As Long
      
      Persona(1) = FeedPersona("Mario", "Rossi", 35)
      Persona(2) = FeedPersona("Pippo", "Bianchi", 46)
      Persona(3) = FeedPersona("Luigi", "Verdi", 72)
      For j = 1 To 3
        Debug.Print Persona(j).Nome & " " & Persona(j).Cognome & " (anni " & Persona(j).Eta & ")"
      Next
      Erase Persona
    End Sub
    
  • di pregiudicato_83 (Utente non iscritto) data: 29/12/2016 18:00:14 



    ciao, sto impostando tutto come da tuo esempio (grazie), ci lavoro da stamattina e mi ci vorrà ancora qualche giorno.
    ho iniziato ad usare per la prima volta
    - Debug.Print (bello...non so come ho fatto senza fino ad oggi)
    - espressioni di controllo (ancora + bello)

    inoltre vorrei conferma di questo metodo che utilizzo per cancellare tutti i dati contenuti all'interno della variable UDT "Persona"
    vedi codice

    se esiste un modo migliore mi piacerebbe impararlo....qualcosa tipo Persona = empty , clear Persona o altro
     
    'nelle variabili dichiaro una persona 
    'dalle mie prove credo abbia tutti i suoi valori nulli
    Public Persona_vuota As tyPersona
    
    'così in qualunque momento voglia cancellare tutti i dati
    'contenuti all'interno della variable UDT "Persona", utilizzo
    Persona = Persona_vuota 
    
    
  • di scossa (Utente esperto) data: 29/12/2016 19:05:43 



    cit.: "Persona = Persona_vuota"

    Può andare bene come hai fatto, oppure potresti scrivere (nel caso del mio esempio) Persona = FeedPersona("", "", 0)


    scossa's web site
    Se tu hai una mela, ed 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)
  • di pregiudicato_83 (Utente non iscritto) data: 30/12/2016 11:39:38 



    Ok, perfetto.
    ho usato
    Persona = Persona_vuota
    perché nel mio codice reale ho molte più "proprietà" nell' UDT Persona.
    Grazie mille ciao buon anno
  • torna su

Sostieni Excel VBA con una donazione! Con la tua donazione potrai contribuire al mantenimento del servizio.
Le donazioni sono eseguite con PayPal, il modo più facile, comodo e sicuro per pagare online.
Paypal accetta anche carta di credito o carte prepagate.