Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2022
    Messaggi
    5

    [VBS] Variabili con array dinamici multipli (multidimensionali)

    Buongiorno,
    ho effettuato delle ricerche senza esito. Il programma che uso utilizza VBScript per la creazione di Script. Il mio obiettivo sarebbe richiamare all'interno dello Script delle variabili che cambiano solo per la presenza di un indice o numero: es. vettore1(10) ... vettoreN(10)

    In Excel ho trovato il modo ma in VBS no.

    Qualcuno sa come si potrebbe fare? Vi ringrazio.

    Esempio di script attuale:
    codice:
    Dim vettore1(10), vettore2(10), vettore3(10), vettore4(10)   ' vettoreN(10)
    
    
    Sub main()
        For i = 1 To 10
            vettore1(i) = i
        Next
    End Sub

    Esempio di script desiderato:

    codice:
    Dim vettore1(10), vettore2(10), vettore3(10), vettore4(10)   ' vettoreN(10)
    
    
    Sub main()
        For j = 1 To N
            For i = 1 To 10
                vettore"richiamo j"(i) = i  'vorrei richiamare l indice del nome variabile
            Next
        Next
    End Sub

  2. #2
    tutti i vettori sono da 10 elementi? dimensiona un array multidimensionale DIM myArray(10,40) così avrai 40 (anzi 41) vettori da 10 (anzi, 11)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2022
    Messaggi
    5
    Ho diversi vettori con lunghezza diversa legati all'indice j. Devo processarli in modo sequenziale e volevo almeno richiamarli con il nome indice se possibile. Attualmente uso dei vettori base che svuoto e riempio con i dati da processare seguendo un select case indice ma si allunga davvero molto il codice e non mi permette di creare funzioni semplici sui dati che devo analizzare.

  4. #4
    strano comunque che tu riesca a farlo in excel, ma non in vbs, visto che excel usa vbs... puoi postare il codice excel?

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2022
    Messaggi
    5
    Non è proprio lo stesso utilizzo che ne feci su Excel, hai ragione. Anche perchè Excel lo usavo all'inizio per interagire con la mole di dati (demografici, climatici, finanziari poco importa) poi sono passato a visualizzarli su un programma ad ho che usa VBS ma ho bisogno di programmarlo per vedere ciò che mi interessa.

    In Excel puoi richiamare il contenuto di un una cella di un foglio dinamicamente attraverso il contenuto di una altra cella, il problema è simile ma non lo stesso:
    codice:
    =STRINGA.ESTRAI(INDIRETTO(B2&"!B5");9;2)
    qui B2 contiene il nome del foglio e B2&"!B5" crea un link dinamico di contenuto tra il nome del foglio e la sua cella B5

    Oppure, ma sempre non è la stessa cosa, modificare l'aspetto di alcune celle a seconda del contenuto di alcuni vettori:
    codice:
    Worksheets("DATI.BASE").Range(alertdati(indice)).Font.Color = RGB(166, 166, 166)

  6. #6
    ok, ma fammi capire. I vari vettori li analizzi tutti alla stessa maniera, indipendentemente dal "nome" che assegni?

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2022
    Messaggi
    5
    per adesso li ho riempiti alla stessa maniera, sono solo 6 macro famiglie, ognuna delle quali ha diversi vettori di lunghezza diversa ma sempre legati al numero della famiglia, li ho riempiti con un select case su indice variabile da 1 a 6 che a seconda dell'indice riempie i dati di quella famiglia da una famiglia generica in cui inserisco i dati.

    Questo modo di lavorare va bene se devi inserire solo dati non se devi processarli, io ho bisogno di modificare i dati della famiglia X seconda dei dati della famiglia Y e viceversa e con i nomi statici dei vettori non riesco a creare cicli ricorsivi e/o dinamici.

  8. #8
    mi sono spiegato male

    diciamo per esempio che devi fare la somma di tutti gli elementi di un vettore; ti prepari una function che accetta in ingresso un array e lo processa, indipendentemente dal nome. es

    codice:
    totale_pippo=somma(vettore_pippo)
    
    Function somma(mioVettore)
       totale=0
       FOR i=0 TO UBOUND(mioVettore)
          totale=totale+mioVettore(i)
       NEXT
       somma=totale
    END Function
    (l'ho scritto al volo, eh, magari è sbagliato, ma era per il concetto )

    così il codice "grosso" lo scrivi una volta sola, e poi lo richiami come ti serve

    codice:
    totale_pippo=somma(vettore_pippo)
    totale_pluto=somma(vettore_pluto)
    ....
    lo stesso se devi riempire un vettoreX con i dati di un vettoreY

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2022
    Messaggi
    5
    Se i vettori fossero 4 da richiamare tramite j, così funziona:

    codice:
    Dim vector1(10), vector2(10), vector3(10), vector4(10)   ' vectorN(10)
    
    Sub main()
    N = 4
        For j = 1 To 4
            For i = 1 To 10
                stringx = "vector" & j & "(" & i & ") = " & i
                Call ExecuteGlobal(stringx)
            Next
        Next
    End Sub
    Oppure ragionare in termini di matrici a più dimensioni e lavorare sugli indici, seguendo il primo consiglio
    vettore_i(n) --> matrice(i, n)
    matrice_2d_i(n1, n2) --> matrice_3d(i, n1, n2)

    Grazie

  10. #10
    vedi se un codice del genere ti può ispirare

    codice:
        Sub Main()
            Dim a1, a2
            a1="Prima stringa"
            a2="Seconda stringa"
    	For i=1 to 2
    	   Execute ("ShowMessage(a" & i & ")")
    	Next
        End Sub
    
    
        Sub ShowMessage(myString)
            MsgBox(myString)
        End Sub
    
    
        Call Main
    sono due stringhe, non vettori, ma il concetto è lo stesso: focus sull'istruzione Execute

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.