Подредете променливи с помощта на VBA в Microsoft Excel 2010

Съдържание:

Anonim

Как да използвам Excel VBA Array?

Можете да стартирате макросите или от редактора на Visual Basic, като поставите курсора в макроса и натиснете клавиша F5, или от Excel, като отворите диалоговия прозорец Макроси (ALT+F8), изберете макроса за изпълнение и щракнете върху Изпълни. Най -добре е да стартирате тези макроси от редактора на Visual Basic, като използвате Отстраняване на грешки> Стъпка навътре (чрез натискане на F8) за да можете да ги гледате докато работят. Инструкция Ако разделът за програмисти не е в лентата …

  • Отворете Excel.
  • Отидете на VBA Editor (натиснете Alt + F11)
  • Отидете на Незабавен прозорец. (Ctrl + G)
  • Напишете по -долу код.
    • Application.ShowDevTools = Вярно

Как да вмъкнете VBA код в Excel

  • Отидете на Разработчик Tab> Код Група> Visual Basic
  • Щракнете Вмъкване > Модул.
  • Ще отвори празен модул за вас.
  • Напишете / поставете предоставения код в този модул

Как да стартирате VBA код в Excel

  • Изберете навсякъде между кода, Sub… Край Sub
  • Щракнете върху Изпълни & Стартирайте Sub или F5

Променливи на статичен масив

Вместо да използвате няколко уникални променливи за съхраняване на информация, можете да използвате променлива от масив.

Когато знаете колко елемента трябва да съхранявате в масива, можете да използвате променлива статичен масив като тази:

Код


Sub TestStaticArray ()
'съхранява 10 имена в работната книга в променливата на масива MyNames ()
Dim MyNames (1 до 10) As String 'декларира променлива на статичен масив
Затъмнете iCount като цяло число
За iCount = 1 към ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Следващ iCount
Erase MyNames () 'изтрива съдържанието на променливата, освобождава малко памет
End Sub

Декодиране

Dim MyNames (1 до 10) като низ

Имаме измерение на единично променящо се MyNames като низ, което може да съдържа 10 елемента в него. Така че MyNames veriable е тип Array.

Затъмнете iCount като цяло число

Декларирахме единична променлива iCount като цяло число, което може да съдържа само числова стойност на цяло число

За iCount = 1 към ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count ще ни даде брой листове в работна книга. Тази работна книга се отнася до работната книга, в която е написан код.

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

Използвайки цикъл, ние присвояваме името на всеки лист на единична променлива, наречена MyNames. MyNames е променлив тип Array, така че той ще съхранява името на всеки лист във всеки елемент от масива.

Debug.Print MyNames (iCount)

Точно след присвояване на стойността на всеки елемент от масив, той ще отпечата същото в ImmediateWindow, по подразбиране в долната част на прозореца VBA. Можете да видите присвояването на всяка стойност и да покажете нейната стойност в ImmediateWindow.

Следващ iCount

Next се използва, за да се каже For Loop в Excel VBA, да повтори същата задача отново, като увеличи брояча на iCount, докато iCount достигне Общ брой листове, в работната книга.

Променливи на динамичен масив

Променливите на динамичен масив са полезни, когато предварително не знаете за колко елемента трябва да съхранявате информация.

Декларирате променливи на динамичен масив точно като променлива на статичен масив, с изключение на това, че не давате никаква информация за размера на масива.

В горния пример (Dim MyNames (1 до 10) като низ) ако Брой листове по -голям от 10, това ще стане чрез грешка, тъй като MyNames няма да може да съхранява повече от 10 елемента.

Код

Sub TestDynamicArray ()
'съхранява всички имена в работната книга в променливата на масива MyNames ()
Dim MyNames () As String 'декларира променлива на динамичен масив
Затъмнете iCount като цяло число
Dim Max като цяло число
Max = ThisWorkbook.Sheets.Count 'намира максималния размер на масива
ReDim MyNames (1 To Max) 'декларира променливата на масива с необходимия размер
За iCount = 1 до Макс
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox Моите имена (iCount)
Следващ iCount
Erase MyNames () 'изтрива променливото съдържание, освобождава малко памет
End Sub

Декодиране

Dim MyNames () като String

Имаме измерение на единично променяемо MyNames като низ, което е тип масив, поради отваряне и затваряне на Paranthesis, след променящото се име, но няма да можем да съхраняваме никакви данни в него, тъй като не сме предоставили UpperLevel.

ReDim MyNames (от 1 до Макс)

Redim се използва за преоразмеряване на масива. Сега той ще присвои горното ниво на версията тип масив.

В този случай общият брой листове в работната книга (Макс = ThisWorkbook.Sheets.Count)

MsgBox Моите имена (iCount)

В последния пример отпечатахме Стойността в променливите в непосредствения прозорец, този път отпечатваме стойността в MessageBox, който ще изглежда така …

Ако знаете, че ще ви е необходима променлива с масив с 1000 елемента, използвайте статична променлива. Недостатъкът е, че всеки път ще използвате памет за 1000 елемента, също и в случаите, когато съхранявате информация само за 10 елемента. Ако използвате променлива с динамичен масив, ще използвате паметта по -ефективно.

Понякога не е възможно да се изчисли колко голяма трябва да бъде променливата на масива. В тези случаи размерът на променливата на масива трябва да се увеличи, ако е необходимо. Когато използвате a ReDim-заявление за промяна на размера на променливата на масива, съдържанието на променливата също се изтрива, за да се избегне изтриването на съдържанието на променливата, когато вие Възстановяване променливата на масива, която ще трябва да използвате ReDim Preserve-декларация.

Код

Sub GetFileNameList ()
'съхранява всички имена на файлове в текущата папка
Dim FolderFiles () As String 'декларира променлива на динамичен масив
Dim tmp As String, fCount As Integer
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Докато tmp празен
fCount = fCount + 1
ReDim Preserve FolderFiles (1 към fCount)
'декларира променливата на масива отново (размер+1)
FolderFiles (fCount) = tmp
tmp = Dir
Венд
MsgBox fCount & "имена на файлове се намират в папката" & CurDir
Erase FolderFiles 'изтрива променливото съдържание, освобождава малко памет
End Sub

Декодиране

Dim FolderFiles () As String

Имаме измерение на единични променяеми FolderFiles като низ, който е тип Array, поради отваряне и затваряне на Paranthesis, след променящото се име, но няма да можем да съхраняваме никакви данни в него, тъй като не сме предоставили UpperLevel.

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

Командата Dir работи като изследовател, който може да съдържа имената на всички файлове и папки в директория. Можете също да ограничите всички файлове до някои специфични критерии. Dir ("D: \ Test \*. Pdf") ще ограничи от всички файлове само до PDF файлове или разширение.

Докато tmp празен

Вместо цикъл For в Excel VBA, този път повтаряме едно и също действие, използвайки Excel VBA WHILE LOOP, където критериите за завършване на цикъла бяха зададени като tmp, а не равно на празно. Така че, докато има някаква стойност в tmp veriable, цикълът ще работи.

ReDim Preserve FolderFiles (1 към fCount)

Променливите файлове с папки нямат горно ниво в началната позиция. Но при всяко повторение тя ще повишава горното си ниво чрез командата ReDim. При първо стартиране 1, след това 2 … и така нататък, до fCount. Въпреки това с всяко увеличаване на горното ниво, той ще загуби всички вече зададени променливи. Използвайки командата Preserve, можем да задържим или съхраним вече зададената стойност.

Венд

Wend казваше For Loops във VBA, да повтори същата задача отново, докато критериите не отговарят.

MsgBox fCount & "имена на файлове се намират в папката" & CurDir

При всяко повторение fcout ще се увеличава с +1 и крайната му стойност ще бъде брой файлове, намерени в тази директория / папка. Командата CurDir дава името на текущата директория. В този случай „D: \ Test“