Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [vba di excel] ciclo for each e collection

    Ho un problema.
    Creata una collection la vorrei leggere con un ciclo for each.
    Però vorrei che, durante il ciclo su tale collection mi venisse restituito sia l'indice che il valore.
    Cercando in giro ho trovato solo questa sintassi che, ovviamente, mi restituisce solo i valori:
    codice:
    For Each Valori In my_collection
    Mi chiedo, e lo chiedo anche a voi se c'è un modo per leggere anche l'indice a cui il valore è associato.
    NB
    Uso il VBA di Excel 2003 e, sporadicamente di Excel 2010

  2. #2
    Il codice da te postato in realtà non ti restituisce proprio niente, ma si limita ad inizializzare un ciclo for/next.
    L'indice di un ciclo può essere ottenuto semplicemente tramite una variabile contatore di tipo Integer o Byte, in base alle esigenze del caso: se la collezione contiene sempre e solo per esempio 10 elementi, basterà utilizzare il tipo Byte.

    codice:
    dim cont as Integer
    cont = 0
    for each valori in my_collection
    cont = cont + 1
    next

  3. #3
    Originariamente inviato da MdE2005
    ...
    Mi sa che ti stai confondendo con qualcosa d'altro, lui sta parlando di una Collection VBA, ovvero un container associativo, e vuole enumerare le coppie chiave->valore con un For Each invece di enumerare semplicemente i valori.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Sono stato tratto d'inganno dalla parola "indice", non ripensavo a VBA (ormai dimenticato da tempo..)

  5. #5
    In ogni caso, da quanto leggo qui, pare che non sia possibile fare quello che chiedi direttamente con una Collection; nel link comunque vengono proposte diverse alternative.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Vi ringrazio per le risposte.
    Quello del ciclo For Each era solo per mostrare la sola impostazione, in realtà avrei dovuto scriverlo completo:
    codice:
    For Each Valori In clProps
    Debug.Print Valori
    Next
    Bene, anzi male.
    Da quel che leggo e che ho letto prima di postare mi sembra che tu abbia ragione. Sembra non ci sia nulla da fare.
    Ho provato coi suggerimenti del sito che hai suggerito
    codice:
    For Each K In coll.Keys
        debug.print "Key: " & K , "Value: " & coll.Item(K)
    Next
    ma il coll.Keys mi da errore perchè non supportato.
    Siccome mi serve l'associazione chiave - valore vedo se mi riesce di ripiegare su un array anziche su una collection.

    Grazie per l'attenzione che avete avuto per la mia richiesta


  7. #7
    Originariamente inviato da micdas
    Ho provato coi suggerimenti del sito che hai suggerito
    codice:
    For Each K In coll.Keys
        debug.print "Key: " & K , "Value: " & coll.Item(K)
    Next
    ma il coll.Keys mi da errore perchè non supportato.
    Attenzione, lì infatti si riferisce ad un altro tipo: Dictionary, che diventa disponibile nel momento in cui nel progetto VBA aggiungi il riferimento a Microsoft Scripting Runtime.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Grazie ancora.
    Infatti ora sto provando a mettere nella collection questi dati:
    valore: valore e key come array
    key: la sola key
    sto usando il metodo suggerito nello stesso sito:
    codice:
    col1.add array("first key", "first string"), "first key"
    col1.add array("second key", "second string"), "second key"
    col1.add array("third key", "third string"), "third key"
    per leggere mi limito a leggere l'array che si trova come valore della collection

    codice:
    For Each i In col1
      Debug.Print i(0) & " - " &  i(1)
    Next
    ovviamente usando le mie di variabili.
    Così pare che funzioni bene.
    Purtroppo l'inglese non è il mio forte e quando è così debbo andare per tentativi o tramite traduttore che a volte è peggio della lingua madre

    Grazie di nuovo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.