Чланци

Примери Екцел макроа написаних помоћу ВБА

Следећи једноставни примери Екцел макроа су написани помоћу ВБА 

Предвиђено време читања: 3 минута

ВБА пример који користи низ

Следећа подпроцедура чита вредности из ћелија у колони А активног радног листа, све док не наиђе на празну ћелију. Вредности се чувају у низу. Овај једноставан пример Екцел макроа илуструје употребу:

  • декларације променљивих;
  • Динамички низови;
  • Циклус Do Until;
  • Погледајте ћелије у тренутном Екцел радном листу;
  • ВБА функција 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

Процедура чува вредности у колони А активног радног листа у низу, имајте на уму да:

  • Циклус Do Until издваја вредности сваке ћелије у колони А активног радног листа, занемарујући празне ћелије
  • Услов "If UBound(dCellValues) < iRow” проверава да ли је низ дЦеллВалуес довољно велик да задржи информације, ако није, користите РеДим да повећате величину низа за 10
  • Коначно, образовање​​dCellValues(iRow) = Cells(iRow, 1).Value” Чува тренутну ћелију у низу ЦеллВалуес

ВБА пример са математичким операцијама

Следећа подпроцедура чита вредности из колоне А радног листа под називом „Схеет2“ и изводи аритметичке операције над вредностима. Добијене вредности се штампају у колони А тренутно активног радног листа.

Овај макро илуструје:

Иновациони билтен
Не пропустите најважније вести о иновацијама. Пријавите се да их примате путем е-поште.
  • декларације променљивих;
  • Екцел објекти (конкретно, употреба кључне речи Сет и начин приступа објекту 'Колоне' из објекта 'Схеетс');
  • Циклус Do Until;
  • Приступите радним листовима и опсезима ћелија у тренутној Екцел радној свесци.
' 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

ВБА пример са снимањем датума измене

Хајде да напишемо једноставан ВБА макро који се покреће када се ћелија у одређеном опсегу нашег листа ажурира. Претпоставимо да желите да пратите промене у колони Б (Б4 до Б11) и забележите датум и време промене у колони А.
Хајде да наставимо овако:

  • На картици Developer кликните на опцију "Visual Basic” да бисте отворили ВБА едитор.
  • У ВБА уређивачу двапут кликните на уређивач кода који се односи на Схеет2.
  • Изаберите Радни лист са десне (или леве) картице и изаберите опцију Промени.
  • Додајте ВБА код:
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

Сачувајте радну свеску са омогућеним макроима (на пример, као .клсм датотеку).


Сада, сваки пут када ажурирамо ћелију у колони Б (од реда 1 до реда 10), ћелија у колони А ће аутоматски приказати тренутни датум и време.

Ercole Palmeri

Иновациони билтен
Не пропустите најважније вести о иновацијама. Пријавите се да их примате путем е-поште.

Недавни чланци

Вееам има најсвеобухватнију подршку за рансомваре, од заштите до одговора и опоравка

Цовеваре од Вееам-а ће наставити да пружа услуге одговора на инциденте са сајбер изнудом. Цовеваре ће понудити форензику и могућности санације…

КСНУМКС април КСНУМКС

Зелена и дигитална револуција: Како предиктивно одржавање трансформише индустрију нафте и гаса

Предиктивно одржавање револуционише сектор нафте и гаса, са иновативним и проактивним приступом управљању постројењима.…

КСНУМКС април КСНУМКС

Британски антимонополски регулатор подигао је БигТецх аларм због ГенАИ

УК ЦМА је издао упозорење о понашању Биг Тецх-а на тржишту вештачке интелигенције. Тамо…

КСНУМКС април КСНУМКС

Цаса Греен: енергетска револуција за одрживу будућност у Италији

Уредба „Цасе Греен“, коју је формулисала Европска унија за побољшање енергетске ефикасности зграда, завршила је свој законодавни процес са…

КСНУМКС април КСНУМКС

Прочитајте Иновације на свом језику

Иновациони билтен
Не пропустите најважније вести о иновацијама. Пријавите се да их примате путем е-поште.

Пратите нас