You are on page 1of 67

Visual Basic Course – VBA Excel

1 –Introduction to VBA

2 –VBA Selectors and properties

3 –Variables

4 –Conditions and Loops

5 –Functions and procedures

6 –VBA events and objects

7 –Building graphical user interface :


Forms , buttons , dialogue boxes

8 –Handling strings

9 –Usefull Built-in functions

2
1 – Introduction to vba

3
Introduction

 EXCEL VBA (Visual Basic for Application) is a programming language allowing you to use

Visual Basic code to execute the many EXCEL Application functionalities.

 A program written in VBA is often called a macro.

 Macros allow in particular to automate repetitive tasks performed under EXCEL. They can also be used to create

dialog boxes in order to make an application developed under EXCEL more user-interactive.

 A program written in VBA is often called a macro.

 VBA allows users to build GUI : Graphical user interface / Graphical interactive application .

 VBA has elements to interact with users : Dialogue boxes , buttons , Forms
4
2 –VBA Selectors and properties
Selectors

 VBA is an object oriented programming language attached to a application. Everything is an object

 Example of objects :

 EXCEL is an Application object


 A workbook is a Workbook object ( has extension workbook_name.xlsx )
 A worksheet is a Worksheet object ( sheet1 – Feuil1 -
 A range of cells (which can be limited to one cell) is a Range object

 Objects have methods and properties :

 Example : Range("A8, C5").Select - Range("A8, C5").Value=5

6
Selectors

 To select a full column : Range("B:B").Select // we select the second column B entirely

 To select a full row : Range("2:2").Select // we select the second row entirely

 To select a range between 2 rows : Range("2:5").Select // we select the range between 2 & 5

 To select a range of cells : Range("A1:A5").Select Range("A1:B3").Select

 To select a particular cell : Range("A1").Select -- cells(3,2) .Select = Range("B3").Select

Row indice of the third row 3 : 3 Column indice of B : 2


7
Selectors

 To select a cell in the third sheet ( with name = Sheet3 ) :

Workbooks("workbook_name.xls").Worksheets("Sheet3") .range ("C1") .value= 8

Workbooks("workbook_name.xls").Worksheets("Sheet3") .range ("A1: B3" ) .value= 5

Workbooks("workbook_name.xls").Worksheets("Sheet3") .range ("A1: B3" ) .value= " some text"

You could use activeworkbook to


select the opened workbook that is
active
If only one workbook is opened ,
you could omit this selector
8
Properties

 As we said before , VBA objects have methods and properties

 Range("A7") . Value : value is one of the cell A7 properties ( it’s the value that the user see )

 Text size property : Range("B1:C3").Font .Size = 14


Police name
 Text bold property : Range("B1"). Font .Bold = True

 Text Underline property : Range("B1"). Font . Underline= True

 Text Police name property : Range("A1:A8"). Font .Name = "Arial "

 To add borders : Range("A1:A8").Borders.Value = 1

9
Properties

 Your first VBA macro / Procedure : Exercice

Sub MacroSelection()

Range("A1:B6").Select
Selection.Font.Bold = True
Selection.Value = "Bonjour“

End Sub

10
Properties

 To hide / show a sheet :

Sub hide_sheet()

Sheets(“Sheet5").Visible = 0 // for hiding the sheet


Sheets(“Sheet5").Visible = -1 // for displaying the sheet

End Sub

 To assign a cell value to a range of cells : Range(“A1:A30“) .value = Range(“B6“) .value

 To clear the content of a range : Range("A1:B27").clearcontents

11
Properties

 To change the color of a range : You could choice between using


colotindex or using RGB() for
Range(“A1:A6“) . Font . ColorIndex = 9 setting the color

 To change the color of a tab :

Sheets(“Sheet3").Tab.Color = RGB(255, 0, 0)

 To change the interior color of a range :

Range(“A1:A6“) .Interior.Color = RGB(0, 255, 0)

12
3 –Variables
Variables

 A variable stores a value that can be modified during the execution of a program.

 The Dim keyword is used to explicitly declare a variable:

 Dim VariableName

 where VariableName is a series of characters formed with letters, numbers and the underscore _. The first
character must be a letter.
MacroTestVariable : Macro name
Sub MacroTestVariable()
Valeur is the name of the variable
Dim is the keyword to declare a variable
Dim valeur
valeur = Range("A1").value
If valleur >= 18 And valleur <= 20 Then Range("B1").value = "OK"
End Sub

14
Variables

 A variable stores a value that can be modified during the execution of a program.

 Most programming languages require determining the type of data that can be stored in a variable when
declared. In VBA, It is not mandatory.

 By default, an untyped variable is of type Variant, which allows you to store any type of data.

Dim Name As String You could use variant if you don’t


know the data type of the variable
Dim name as Variant

15
Variables

 Some examples :

Dim str_1 As String


Nom = " abc " & " efg " // & is the concatenation operator

Dim sh_1 As Worksheet // variable of type worksheet


Set sh_1 = ThisWorkbook.Sheets(1) // you could also : Set sh_1 = ThisWorkbook.Sheets("Sheet1" )

Dim rng As Range // Dim rng as object


Set rng = Range("A1:A3")
You could use the
Dim Date_1 As Date Dim x1 As Integer Sheet_name or the
Date_1 = "25.02.2020" x1=789 sheet index

16
Variables

 Some examples of tables variables :


Variable name : Tab_1
Dim Tab_1(10) As Integer

Tab_1 (0)=16
Tab_1 (9)=80 Variable Type : Integer
Variable length : We
could store 10 in the
table , indexing starts
from 0 to 9

Dim Tab_2(7, 8)
A table of 2 dimensions : You could declare an
array without specifying the type - You could
declare an array with the dimensions you want (
3 etc ) 17
Variables

 Some examples of tables variables :

Dim Tab_1() As Integer , size As Integer


We declare a dynamic array
size = 12 without specifying the length

ReDim Tab_1 (12) As Integer // ReDim Tab_1 (size)

We now know the size of


Dim var_Array(9) the array and we can
ReDim Preserve var_Array( Ubound ( varArray) + 10) redimension it.

We will be able to preserve the elements of


var_Array and we increment the size to
store 19 elements 18
Variables Types

19
Data structure

 A user defined type (or data structure) lets you create a single data type that can represent more than one
built-in data type.

Type User_ type _ name Declaring a data type


Field1 As String using keywords in red
Field2 As Integer
Field3 As Boolean
End Type

Dim type_1 As User_ type _ name


type_1.Field1 = “Friday" Declaring an occurrence of the new data ( a
type_1.Field2 = 25 variable of that type and we assign some
type_1.Field3 = True values )

20
Data structure

 A user defined type (or data structure) lets you create a single data type that can represent more than one
built-in data type.

Private Structure employee Attributes of the object


Public firstName As String could be private or
Public lastName As String public
Public phone_number As Long
Private salary As Decimal

Public Sub Raise_ salary(raise As Double)


salary *= raise This is a method to apply on the object
End Sub

End Structure

21
4 –Conditions and Loops
Conditions

 Conditions are very useful in programming, they will help us to perform actions according to precise criteria
(same principle as the IS function).

 The main function is If, this is how it works:

If [CONDITION here] Then ' => If the condition verified


'Instructions if true ;
Else ' => else
'Instructions if false
End If

23
Conditions

 Conditions are very useful in programming, they will help us to perform actions according to precise criteria
(same principle as the IS function).

 The main function is If, this is how it works:

Dim score As Integer, result As String


score = Range(“D1").Value

If score >= 50 Then


result = “OK“
Range(“A1").Value = result
End if

24
Conditions

 Examples :

Sub example_1 ()
Dim result As String
result = InputBox( “ Text ? ", "Title", "write the name “ ) // we ask user for his name
If result <> "" Then
MsgBox result // we display the name of the user if result isn’t empty

End If
End Sub

25
Conditions

 You could also use many if else statements , here is an example :

Sub procedure_1()
'Variables
Dim mark As Integer, str_1 As String
mark = Range("A2")
‘ Comments based on the mark value
If mark >= 7 Then
str_1 = "Excellent !"
ElseIf mark > 5 And mark < 7 Then
str_1 = "You could pass"
Else
str_1 = "Your result is very weak , plz revise your homework "
End If
Range("B2") .Value = str_1
End Sub
26
Conditions

Sub procedure_1()
Dim mark As Integer, str_1 As String
mark = Range("A2")

Select Case mark


Case Is >= 7
str_1 = "Excellent !"
Case Is >5 and <7
str_1 = "You could pass
Case Else
str_1 = "Your result is very weak , plz revise your homework "

End Select
Range("B2") .Value = str_1
End Sub

27
Loops

 Looping is one of the most powerful programming techniques. A loop in Excel VBA enables you to loop
through a range of cells with just a few codes lines.

 You could also use nested loops : A loop Inside another loop .

 Example of a For Loop :


Write some instructions inside the
Dim i As Integer for loop // You could exit a loop
for using Exit For keyword
For i = 1 To 7
Cells(i, i).Value = I // we are filling the diagonal cells A1 – B2 – C3 – D4 – E5 – F6 – G7
Next i

28
Loops

 With While loop as long as the condition is true, the instructions are executed in the loop (be careful not to
create an infinite loop).
Iterator is the loop variable , the
Sub while_Loop() Sub while_Loop() loop end when iterator is equal to
Dim iterator 5>4
iterator=1 - You could exit the loop any time
Cells(1, 2) = 1 While iterator <=4 you want by exit while instruction
Cells(2, 2) = 2 cells(iterator , 2 ) .Value = iterator
Cells(3, 2) = 3 wend
Cells(4, 2) = 4 End sub
End sub

29
Loops

 The do while loop works the same way as While Wend (as long as the condition is true, the loop is executed):

Dim j As Integer
j=1

Do While j < 9
Cells(j, 3).Value = 13
j=j+1
Loop

30
Loops

 Rather than repeating the loop as long as the condition is true, it is possible to exit the loop when the
condition is true by replacing While Loop with do Until Loop :

Dim k As Integer - In this example : You could exit


k=1 the loop any time you want by
exit do instruction
Do Until k> 6
Cells(k , k).Value = 2 // we fill the first five elements in the sheet diagonal by value=2
k=k+1
Loop

31
5 – Functions and procedures

32
Functions and procedures

 If you want Excel VBA to perform a task that returns a result, you can use a function. Place a function into a
module (In the Visual Basic Editor, click Insert, Module). For example, the function with name Product.

 The difference between a function and a sub in Excel VBA is that a function can return a value while a sub
cannot. Functions and subs become very useful as program size increases.

Function Product (x As Double, y As Double) As Double Sub Coloring_Cell ()


Dim Rng As Range
Product = x * y Dim Cell_1 As Range
Dim i As Integer
End Function Set Rng = Range("A1:B5")
For Each Cell_1 In Rng
Type of the Cell_1.Interior .ColorIndex = i
returned value i=i+1
Next Cellule
End Sub 33
Functions and procedures

 Now we will call our functions and procedure to execute / automate a wanted task

Function Product (x As Double, y As Double) As Double Sub Coloring_Cell ()


Dim Rng As Range
Product = x * y - Use sub_name() to call a procedure Dim Cell_1 As Range
- Use Call Function( x1 , x2 ) to call Dim i As Integer
End Function a function
- You could assign the returned value Set Rng = Range("A1:B5")
Dim J of a function to a variable without For Each Cell_1 In Rng
J= Product(3,5) using the call Keyword Cell_1.Interior .ColorIndex = i
Range("A1:B5") .value=J - Place this portion in green of the code i=i+1
in a sub , then exectute the example Next Cellule
End Sub

34
Private vs public

 The terms Public and Private are used in relation to Modules. The basic concept is that Public variables, subs
or functions can be seen and used by all modules in the workbook while Private variables, subs and functions
can only be used by code within the same module.

Private Function Product (x As Double, y As Double) As Double Public Sub Coloring_Cell ()


- Use sub_name() to call a procedure Dim Rng As Range
Product = x * y - Use Call Function( x1 , x2 ) to call a Dim Cell_1 As Range
function Dim i As Integer
End Function - You could assign the returned value of a
function to a variable without using the Set Rng = Range("A1:B5")
Dim J call Keyword For Each Cell_1 In Rng
J= Product(3,5) Cell_1.Interior .ColorIndex = i
Range("A1:B5") .value=J i=i+1
Next Cellule
End Sub
35
6 –Vba events and objects
Objects

 An object is a grouping of data and procedures(i.e. Functions and Subs). The procedures are used to
perform some task related to the data.

 In general, use this code when writing codes to perform actions on objects in external Excel workbooks in the
current workbook : Workbooks(workbook_name).Sheets( Sheet_name ).Range(a range of cells)

37
Events

 An event is an action recognized by an object. The recognition of an event by an object makes it possible to
trigger the execution of a procedure when this event occurs. A mouse click or a keystroke at keyboard are
examples of events that can be interpreted by code VBA.

 We can execute code during certain events in the workbook (opening, closing, etc.).

 For an object to respond to an event, VBA code must be written in the procedure associated with the event in
question.

38
Events

39
List of workbook Events

 Here you find some of VBA workbook


events :

40
List of worksheet Events

 Here you find some of VBA worksheet


events :

41
7–Building graphical user interface :
Forms , buttons , dialogue boxes
UserForms

 User Forms are graphical objects used to create custom dialog boxes. You can add controls to it in order
to set up a User Interface adapted to your project. It will thus be possible to make entries from this
preformatted medium or to visualize very diverse information (Texts, digital data, pictures, videos ...)

 A Userform (also called dynamic form), allows for simple and user-friendly user interfaces for entering,
modifying or viewing data.

43
UserForms

44
Controls

 A GUI is made up of controls. These controls can be used in a Form. The following table shows some
of the most commonly used GUI controls in VBA.

 Controls also have a whole range of properties and events that differ from one control to another, we will
see here only some of the many possibilities related to these controls.

45
Controls

 Control Description
CheckBox Used for true or false values. Multiple check boxes can have true value at the
same time.
ComboBox Used to present a drop down list to the users
CommandButton Used to execute code
Label Used to display static text to the user : ex firstName- lastName
ListBox Allows selection from a list of items , it’s used to present a simple list to the
users – it’s also user to visualize data ( tables ) present in a sheet
Textbox Allows text entry

 Other controls : Image , Toggle Button , Scroll Bar . . .

46
Main properties and methods

 The most commonly properties that are available to all controls are : Enabled , visible , SetFocus.

 You can’t use SetFocus with labels.

 Don’t forget the syntax to set a property of an object : Object.Property = value

 Don’t forget the syntax to get the value of a property of an object : variable_name = Object.Property

Examples :
Value
 To Show/Hide control : listbox1.visible =true // listbox1.visible=false

 To enable/ disable control : textbox1.Enabled = true // textbox1.Enabled = false

 To Sets the focus to the control : combobox1. SetFocus Property


Object 47
Controls events

 Events Description
Click Occurs when the left mouse button is clicked when over the userform.
DblClick Occurs when the left mouse button is double clicked when over the userform.
Desactivate Occurs when the userform loses focus because a subform is displayed.
Initialize Occurs when the userform is loaded into memory, this is before the userform is
displayed.
KeyDown Occurs when any key is pressed while the userform is displayed.
KeyUp Occurs when any key is released while the userform is displayed.
Layout Occurs when the size of a userform is changed at run-time.
KeyPress Occurs when an ANSI key is pressed while the userform is displayed.
MouseDown Occurs when a mouse button is pressed

48
Controls events

Events Description
 MouseMove Occurs when the mouse pointer is moved over the userform at run time.
QueryClose Occurs before a userform is closed or unloaded.
RemoveControl Occurs when a control is removed from the userform at run-time.
Resize Occurs when a userform is resized ( in terms of dimensions )
Scroll Occurs when the userform is scrolled ?
Terminate Occurs when a userform is removed from memory as part of the clean up task
Zoom Occurs when the userform is zoomed
Activate Occurs when the userform is displayed or reactivated. This event will only fire:
if the userform is visible.
AddControl Occurs when a control is added to the userform at run-time.
BeforeDragOver Occurs when a drag and drop operation is in progress while the mouse pointer
is over the userform.
BeforeDropOrPaste Occurs when the left mouse button is released and data is dropped and pasted 49
Dialog boxes

 The dialog boxes allow you to interact with the user. We let's stick to the simpler ones here :

InputBox for input, MsgBox for displaying messages and values.

 The syntax for InputBox is : InputBox("Some text – request to user", "Title of the box" , "an example of value" )

 The syntax for MsgBox is : MsgBox prompt, [ buttons, ] [ title, ] [ helpfile, context ]

Dim x
‘ input
x = InputBox("How old are you ?", "Entering the user age" , "30 ")
‘ display
MsgBox (" Your age is " & x )

50
MsgBox

 The syntax for MsgBox is : MsgBox prompt, [ buttons, ] [ title, ] [ helpfile, context ]

Prompt : A string expression used for displaying as a message. The maximum length of characters is 1024, which depends
on the width of the characters.

[buttons] : You can use this argument to specify buttons, icon style, button’s identity and modality of the message box.

[title] You can use this argument to specify a title text for your dialog box.

[helpfile] This argument will help you to specify a help file for the user. The user can access that help file using the help
button. If you specify a help file, this mandatory to specify a context number.

[context] A numeric expression that uses to assign a help topic from the help menu.

51
MsgBox buttons

 Here you have some possible values for the [buttons] argument of the MsgBox function :

Button Constant Description


vbOKOnly Shows only the OK button
vbOKCancel Shows the OK and Cancel buttons
vbAbortRetryIgnore Shows the Abort, Retry, and Ignore buttons
vbYesNoCancel Shows the Yes, No, and Cancel buttons
vbRetryCancel Shows the Retry and Cancel buttons
vbMsgBoxHelpButton Shows the Help button. For this to work, you need to use the help and context
arguments in the MsgBox function
vbDefaultButton1 Makes the first button default. You can change the number to change the default
button. For example, vbDefaultButton2 makes the second button as the default
52
MsgBox

 Example :

Sub Option_one()

MsgBox Prompt:="Do you want to continue", Buttons:=vbOKCancel , Title:="any title you want "

End Sub

53
MsgBox return values

 MsgBox it’s also a function , it has some return values :

vbOk – vbCancel – vbAbort – vbRetry – vbIgnore - vbYes - vbNo

 You could store the returned value of MsgBox in a variable of type variant

 Example :
Dim X as Integer
X=0
If MsgBox("Do you wish to continue? ", vbYesNo) = vbYes Then ‘’we display a msg & we test if the user had clicked in yes
X=1
MsgBox ( " x is equal now to " & X ) ‘’ display : x is equal now to 1
Else
X=0
MsgBox ( " x is equal now to " & X ) ‘’ display : x is equal now to 0
End if 54
Textbox properties and methods

 Textbox : allows users entry of data , the main property is textbox1 .text Property of the
field
 To set the textbox value : textbox1 .text = " Peter "

 To retrieve the user entered value : Dim str_1 = textbox1 .text


Field name : could
Example : be textbox2 ,
textbox3 , etc
Sub test_1()
Dim str_1 = Userform1 . textbox1 . Text ‘’ we store the textbox entered value in a variable

Range(" B2 ") . Value = str_1 ‘’ we store the entered value in the range B2 of the activesheet
End sub

Sub CommandButton1_click()
test_1 ‘’ we call the function to be excecuted if the event button1_click occurs
End sub 55
Label properties and methods

 Label : allows users to display labels & static text, the main property is Label1 .caption

 To set the label value : Label1 .caption= " Last Name : " Property of the
field
 To retrieve the actual label value : Dim str_1 = Label .Caption
Field name : could
Example : be label2 , label3 ,
etc
Sub test_1()

Label1.caption= " Last Name : " ‘’ we set the label1 value to be Last Name :

Dim str_2 = Userform1 . Label1 . Caption ‘’ we store the label value in a variable

Range(" A2 ") . Value = str_2 ‘’ we store variable str_2 value in the range A2 of the activesheet

End sub 56
ListBox properties and methods

Method Description Example



AddItem Add an item ( a row ) Listbox1.AddItem " Laptop"
Clear Remove all Items ( all rows ) Listbox1.Clear
ColumnCount Set the number of the visible columns Listbox1.ColumnCount = 4
ColumnHeads The first row the RowSource will be displayed Listbox1.ColumnHeads = True
List Exchange Range values to Listbox , you could do Listbox1.List = Range("A1:D7").Value
the opposite
ListCount Get the number of items ( number of rows of the Dim x = Listbox1. ListCount
ListBox )
ListIndex To Get/set the selected item ( row ) Dim x = Listbox1.ListIndex
RowSource Add a range of values from a sheet , we could Listbox1.RowSource =
dispaly those values in the userform to do crud sheet1.Range("A1:D7") . Address
operations ( add , modify , delete rows , etc )
Value Get the value of the selected Item or row Dim x = Listbox1.Value 57
Looping in a ListBox

 If the element is the element (


selected / clicked ) by the user
Example :

& : This operator is used to concatenate


For j = 0 to listbox1. ListCount – 1 two strings

If Listbox1 .selected(j) = true


We retrieve the value of the selected
MsgBox “ You selected the element : “ & ListBox1 . List( j ) element , you could for example call this
script in change event ( in the procedure
End if associated with this event )

Next j

58
Exercice

 Create two UserForms called : Userform1 & UserForm2

 The userform1 display a paire of values ( country , capital ) using a Listbox1 , it contains a command_button1

 If the user click in this button , the userform2 will display : ( Use instructions : userform2 .show / userform2 .hide )

 Userform2 should be used to Modify the selected row in Userform1 .Listbox1 , it contains a CommandButton for

confirmation ( if we click in that button , the userform2 is hidden )

 Display the userfom while opening the workbook : use the procedure of the event workbook_open()

59
8 – Handling strings

60
Handling a string

 Trim : removes spaces from the left and right of a given string

 LTrim : removes spaces from the left of a given string

 Rtrim : removes spaces from the right of a given string

 Len : return the length of the string

 Left (string , n ) : Return n chars starting from the left of the string

 Right (string , n ) : Return n chars starting from the right of the string

 Mid(string , start_position , n ) : Return chars from middle

 StrReverse( string ) : To reverse a string

 To concatenate two strings : "aaa" & " bbb " ‘’ return "aaabbb" 61
Handling a string

Sub string_examples()

Dim str1 = "aaaaa bbbbb ccccc "

MsgBox Len(str1) ‘’ return the string length = 17  15 letters plus 2 spaces

MsgBox Left(str1 , 3) ‘’ return the first 3 chars from left : "aaa"

MsgBox Right(str1 , 4) ‘’ return the first 4 chars from Right : "cccc"

Dim str2=" aaa bbb "

MsgBox LTrim(str2) ‘’ Remove spaces from left  "aaa bbb "


Msgbox Rtrim(str2) ‘’ Remove spaces from Right  " aaa bbb"
Msgbox Trim(str2) ‘’ Remove all spaces  "aaabbb"

End sub 62
9 – Usefull Built-in functions

63
Some Usefull functions

Rnd : generates a random


 To get a random integer number : number between 0 and 1

Dim random_number Int : return the integer part of it’s


Randomize argument ( parameter )
random_number = Int(50 * Rnd) + 1 ‘’ generates a random integer between 1 and 50

 To convert a string to a number : Cint( string_var ) ‘’ Cint( "33" ) gives 33 where "33" is a string

 To convert a number to a string : Str( number_var ) ‘’ Str( 44 ) gives "44" where 44 is a number

 They are others converting functions : Cbool , CDbl , Cdec , etc

 To test if a variable is a numeric nmber : IsNumeric ( Variable_name ) "44" : is a string because you have doub
quottes " "
 To test if a variant type variable is empty : IsEmpty(Variable_name)
64
Return true or false values
Some Usefull functions

 To get the last row in the sheet that contains a text :

Dim LastRow As integer


LastRow = activesheet.Cells ( activesheet.Rows.Count , 1 ).End( xlUp ).Row

 To get the last column in the sheet that contains a text :

Dim Lastcol As integer


Lastcol = activesheet.Cells( 1 , activesheet. Columns.Count ).End( xlToLeft ).Column

 To count the number of empty cells in a range : Worksheetfunction.CountA( Range("B2: D18" )

 To count the number of populated cells in a range : Worksheets("Sheet1").Range ("B2: D18") . Count

 To create a union of two or more ranges : Dim Rng as Range


Rng = Range ("A2: B8" , "E2: F7" , "H4: I9" , "M3: O23" )
65
Webographie et Références :

 https://www.excel-pratique.com/fr/vba
 https://www.excel-easy.com/
 http://eric.univ-lyon2.fr/~ricco/cours/cours_excel.html
 https://www.guru99.com/creating-your-first-visual-basic-for-
applications-vba-in-excel.html
 https://excelmacromastery.com/vba-articles/
 https://excel-malin.com/cours-vba-excel-gratuit-en-ligne/
 Cours excel VBA - Juliette Dibie
 Cours excel VBA - Ricco Rakotomalala
 https://docs.microsoft.com/en-us/office/vba/api/overview/excel
 Others

66
Visual Basic Course – VBA Excel

You might also like