Variabili di array che utilizzano VBA in Microsoft Excel 2010

Sommario:

Anonim

Come utilizzare l'array VBA di Excel?

È possibile eseguire le macro sia dall'editor di Visual Basic posizionando il cursore nella macro e premendo il tasto F5, sia da Excel aprendo la finestra di dialogo Macro (ALT+F8) scegliendo la macro da eseguire e facendo clic su Esegui. È meglio eseguire queste macro da Visual Basic Editor usando Debug > Entra in (premendo F8) così puoi guardarli mentre funzionano. Istruzione Se la scheda Sviluppatore non è nella barra multifunzione…

  • Apri Excel.
  • Vai all'editor VBA (premi Alt + F11)
  • Vai alla finestra immediata. ( Ctrl + G)
  • Scrivi sotto Codice.
    • Application.ShowDevTools = True

Come inserire il codice VBA in Excel

  • Vai a Sviluppatore Scheda > Codice Gruppo > Visual Basic
  • Clic Inserire > Modulo.
  • Aprirà un modulo vuoto per te.
  • Scrivi/incolla il codice fornito in quel modulo

Come eseguire il codice VBA in Excel

  • Seleziona un punto qualsiasi tra il Codice, Sotto… Fine Sotto
  • Fare clic su Esegui e Esegui Sub o F5

Variabili array statiche

Invece di utilizzare diverse variabili univoche per memorizzare le informazioni, è possibile utilizzare una variabile di matrice.

Quando sai quanti elementi devi memorizzare nell'array, puoi usare una variabile array statica come questa:

Codice


Sub TestStaticArray()
' memorizza 10 nomi nella cartella di lavoro nella variabile array MyNames()
Dim MyNames (da 1 a 10) As String 'dichiara una variabile array statica
Dim iCount As Integer
Per iCount = 1 a ThisWorkbook.Sheets.Count
MyNames(iCount) = ThisWorkbook.Sheets(iCount).Nome
Debug.Print MyNames(iCount)
Successivo iCount
Erase MyNames() ' cancella il contenuto della variabile, libera un po' di memoria
Fine sottotitolo

Decodificare

Dim MyNames (da 1 a 10) come stringa

Abbiamo dimensionato un singolo MyNames veriable come una stringa, che può contenere 10 elementi al suo interno. Quindi MyNames veriable è un tipo Array.

Dim iCount As Integer

Abbiamo dichiarato una singola variabile iCount come Integer, che può contenere solo Numeric Integer type Value

Per iCount = 1 a ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count ci darà il numero di fogli in una cartella di lavoro. ThisWorkbook, si riferisce alla Workbook, in cui è stato scritto il codice.

MyNames(iCount) = ThisWorkbook.Sheets(iCount).Nome

Usando un ciclo, stiamo assegnando, il nome di ogni foglio a un singolo veriable chiamato MyNames. MyNames è un tipo di array veriable, quindi memorizzerà il nome di ogni foglio in ogni elemento dell'array.

Debug.Print MyNames(iCount)

Subito dopo aver assegnato il valore a ciascun elemento di un array, stamperà lo stesso in ImmediateWindow, per impostazione predefinita nella parte inferiore della finestra VBA. È possibile visualizzare l'assegnazione di ciascun valore e visualizzarne il valore in ImmediateWindow.

Successivo iCount

Next viene utilizzato per dire a For Loop in Excel VBA, di ripetere nuovamente la stessa attività, aumentando il contatore iCount, fino a quando iCount ha raggiunto il numero totale di fogli, nella cartella di lavoro.

Variabili array dinamiche

Le variabili array dinamiche sono utili quando non si sa in anticipo di quanti elementi è necessario memorizzare le informazioni.

Dichiari variabili array dinamiche proprio come una variabile array statica, tranne per il fatto che non fornisci alcuna informazione sulla dimensione dell'array.

Nell'esempio sopra (Dim MyNames (da 1 a 10) come stringa) se Numero di fogli maggiore di 10, lo farà tramite un errore, poiché MyNames non sarà in grado di memorizzare più di 10 articoli.

Codice

Sub TestDynamicArray()
' memorizza tutti i nomi nella cartella di lavoro nella variabile array MyNames()
Dim MyNames() As String 'dichiara una variabile array dinamica
Dim iCount As Integer
Dim Max As Integer
Max = ThisWorkbook.Sheets.Count ' trova la dimensione massima dell'array
ReDim MyNames(1 To Max) 'dichiara la variabile array con la dimensione necessaria
Per iCount = da 1 a Max
MyNames(iCount) = ThisWorkbook.Sheets(iCount).Nome
MsgBox MyNames(iCount)
Successivo iCount
Erase MyNames() ' elimina il contenuto della variabile, libera un po' di memoria
Fine sottotitolo

Decodificare

Dim MyNames() As String

Abbiamo dimensionato un singolo MyNames veriable come String, che è un tipo Array, a causa dell'apertura e della chiusura di Paranthesis, dopo il nome veriable, ma non saremo in grado di memorizzare alcun dato in esso, poiché non abbiamo fornito il suo UpperLevel.

ReDim MyNames (da 1 a max)

Redim viene utilizzato per ridimensionare l'array, ora assegnerà il livello superiore dell'array Type Veriable.

In questo caso, numero totale di fogli nella cartella di lavoro (Max = ThisWorkbook.Sheets.Count)

MsgBox MyNames(iCount)

Nell'ultimo esempio, abbiamo stampato il valore in Variabili nella finestra immediata, questa volta stiamo stampando il valore in un MessageBox, che apparirà così …

Se sai che avrai bisogno di una variabile array con 1000 elementi, usa una variabile statica. Il rovescio della medaglia è che utilizzerai la memoria per 1000 elementi ogni volta, anche nei casi in cui memorizzi solo informazioni su 10 elementi. Se usi una variabile array dinamica utilizzerai la memoria in modo più efficiente.

A volte non è possibile calcolare quanto grande dovrà essere la variabile dell'array. In questi casi la dimensione della variabile array deve essere aumentata secondo necessità. Quando usi a ReDim-istruzione per modificare la dimensione della variabile dell'array, anche il contenuto della variabile viene cancellato per evitare di eliminare il contenuto della variabile quando si Redim la variabile dell'array che dovrai usare ReDim Preserve-dichiarazione.

Codice

Sub GetFileNameList()
'memorizza tutti i nomi di file nella cartella corrente
Dim FolderFiles() As String 'dichiara una variabile array dinamica
Dim tmp As String, fCount As Integer
fCount = 0
tmp = Dir("D:\Test\*.*")
Mentre tmp vuoto
fCount = fCount + 1
ReDim Preserve FolderFiles(1 a fCount)
'dichiara di nuovo la variabile array (size+1)
FolderFiles(fCount) = tmp
tmp = Dir
Wend
MsgBox fCount & " i nomi dei file si trovano nella cartella " & CurDir
Erase FolderFiles ' elimina il contenuto della variabile, libera un po' di memoria
Fine sottotitolo

Decodificare

Dim FolderFiles() As String

Abbiamo dimensionato un singolo FolderFiles veriable come String, che è un tipo Array, a causa dell'apertura e della chiusura di Paranthesis, dopo il nome veriable, ma non saremo in grado di memorizzare alcun dato in esso, poiché non abbiamo fornito il suo UpperLevel.

tmp = Dir("D:\Test\*.*")

Il comando Dir funziona come un esploratore, che può contenere il nome di tutti i file e le cartelle in una directory. Puoi anche limitare tutti i file ad alcuni criteri specifici. Dir("D:\Test\*.pdf") limiterà tutti i file solo ai file PDF o all'estensione.

Mentre tmp vuoto

Invece di For loop in Excel VBA, questa volta stiamo ripetendo la stessa azione, utilizzando Excel VBA WHILE LOOP, in cui i criteri per terminare il ciclo sono stati impostati come tmp non uguale a vuoto. Quindi, finché non c'è stato un valore in tmp veriable, il ciclo funzionerà.

ReDim Preserve FolderFiles(1 a fCount)

I FolderFiles verificabili dell'array non hanno alcun livello superiore nella posizione iniziale. Ma in ogni ripetizione aumenterà il suo livello superiore con il comando ReDim. Nella prima esecuzione 1, poi 2… e così via, fino a fCount. Tuttavia, aumentando ogni volta il livello superiore, perderà tutte le variabili già assegnate. Usando il comando Preserve, possiamo mantenere o memorizzare il valore già assegnato.

Wend

Wend era solito dire a For Loops in VBA, di ripetere di nuovo la stessa attività, fino a quando i criteri non erano soddisfatti.

MsgBox fCount & " i nomi dei file si trovano nella cartella " & CurDir

Ad ogni ripetizione, fcout aumenterà con +1 e il suo valore finale sarà il numero di file trovati in quella directory / cartella. Il comando CurDir fornisce il nome della directory corrente. In questo caso “D:\Test”