Членове

Примери за макроси на Excel, написани с VBA

Следните прости примери за макроси на Excel са написани с помощта на VBA 

Очаквано време за четене: 3 Minuti

VBA пример с използване на Array

Следната подпроцедура чете стойности от клетки в колона A на активния работен лист, докато срещне празна клетка. Стойностите се съхраняват в масив. Този прост пример за макрос на Excel илюстрира използването на:

  • Декларации на променливи;
  • Динамични масиви;
  • Цикъл Do Until;
  • Обърнете се към клетките в текущия работен лист на Excel;
  • Функцията VBA Ubound вграден (който връща най-високия индекс на масив).
' Sub procedure store values in Column A of the active Worksheet
' into an array
Sub GetCellValues()
Dim iRow As Integer            ' stores the current row number
Dim dCellValues() As Double  ' array to store the cell values
iRow = 1
ReDim dCellValues(1 To 10)
' Do Until loop to extract the value of each cell in column A
' of the active Worksheet, as long as the cell is not blank
Do Until IsEmpty(Cells(iRow, 1))
   ' Check that the dCellValues array is big enough
   ' If not, use ReDim to increase the size of the array by 10
   If UBound(dCellValues) < iRow Then
      ReDim Preserve dCellValues(1 To iRow + 9)
   End If
   ' Store the current cell in the CellValues array
   dCellValues(iRow) = Cells(iRow, 1).Value
   iRow = iRow + 1
Loop
End Sub

Процедурата съхранява стойностите в колона A на активния работен лист в масив, имайте предвид, че:

  • Цикълът Do Until извлича стойностите на всяка клетка в колона A на активния работен лист, като игнорира празните клетки
  • Условието "If UBound(dCellValues) < iRow” проверява дали масивът dCellValues ​​е достатъчно голям, за да побере информацията, ако не, използвайте ReDim, за да увеличите размера на масива с 10
  • И накрая, образованието​​dCellValues(iRow) = Cells(iRow, 1).Value” Съхранява текущата клетка в масива CellValues ​​​​

VBA пример с математически операции

Следващата подпроцедура чете стойностите от колона A на работния лист с име „Sheet2“ и извършва аритметични операции върху стойностите. Получените стойности се отпечатват в колона A на текущия активен работен лист.

Този макрос илюстрира:

Иновационен бюлетин
Не пропускайте най-важните новини за иновациите. Регистрирайте се, за да ги получавате по имейл.
  • Декларации на променливи;
  • Обекти на Excel (по-конкретно, използване на ключовата дума Set и как да получите достъп до обекта „Колони“ от обекта „Листове“);
  • Цикъл Do Until;
  • Достъп до работни листове и диапазони от клетки в текущата работна книга на Excel.
' Sub procedure to loop through the values in Column A of the Worksheet
' "Sheet2", perform arithmetic operations on each value, and write the
' result into Column A of the current Active Worksheet ("Sheet1")
Sub Transfer_ColA()
Dim i As Integer
Dim Col As Range
Dim dVal As Double
' Set the variable 'Col' to be Column A of Sheet 2
Set Col = Sheets("Sheet2").Columns("A")
i = 1
' Loop through each cell of the column 'Col' until
' a blank cell is encountered
Do Until IsEmpty(Col.Cells(i))
   ' Apply arithmetic operations to the value of the current cell
   dVal = Col.Cells(i).Value * 2 + 1
   ' The command below copies the result into Column A
   ' of the current Active Worksheet - no need to specify
   ' the Worksheet name as it is the active Worksheet.
   Cells(i, 1) = dVal
   i = i + 1
Loop
End Sub

VBA пример със запис на датата на модификация

Нека напишем прост VBA макрос, който се задейства, когато клетка в определен диапазон от нашия лист се актуализира. Да предположим, че искате да проследите промените в колона B (B4 до B11) и да запишете датата и часа на промяната в колона A.
Да продължим така:

  • В раздела Developer кликнете върху опцията "Visual Basic”, за да отворите VBA редактора.
  • В редактора на VBA щракнете двукратно върху редактора на код, свързан с Sheet2.
  • Изберете Работен лист от десния (или отляво) раздел и изберете опцията Промяна.
  • Добавяне на VBA код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
        Target.Range("A1:A1").Value = Now
    End If
End Sub

Запазете работната книга с активирани макроси (например като .xlsm файл).


Сега всеки път, когато актуализираме клетка в колона B (от ред 1 до ред 10), клетката в колона A автоматично ще показва текущите дата и час.

Ercole Palmeri

Иновационен бюлетин
Не пропускайте най-важните новини за иновациите. Регистрирайте се, за да ги получавате по имейл.

Последни статии

Veeam разполага с най-цялостната поддръжка за ransomware, от защита до отговор и възстановяване

Coveware от Veeam ще продължи да предоставя услуги за реакция при инциденти с кибер изнудване. Coveware ще предлага криминалистика и възможности за възстановяване...

23 април 2024

Зелена и цифрова революция: как предсказуемата поддръжка трансформира петролната и газовата индустрия

Прогнозната поддръжка революционизира сектора на петрола и газа с иновативен и проактивен подход към управлението на инсталациите.…

22 април 2024

Британският антитръстов регулатор повдига тревога на BigTech за GenAI

CMA на Обединеното кралство издаде предупреждение относно поведението на Big Tech на пазара на изкуствен интелект. Там…

18 април 2024

Casa Green: енергийна революция за устойчиво бъдеще в Италия

Указът „Case Green“, формулиран от Европейския съюз за повишаване на енергийната ефективност на сградите, приключи своя законодателен процес с...

18 април 2024

Прочетете Иновация на вашия език

Иновационен бюлетин
Не пропускайте най-важните новини за иновациите. Регистрирайте се, за да ги получавате по имейл.

Следвайте ни