VBA Add-ons – Creating Add-ons in Excel

How do you write an Excel add-in in VBA?

Creating a simple add-on in VBA Excel is primarily about writing a good VBA macro code. In this chapter you will learn how to install such a macro as an Excel add-in. The add-on will consist of two macros:

  • Macro 1 – opening the file saving window and inserting the current date in the file name
  • Macro 2 – generating an example data table from the chapter on the loop Do Loop VBA

Below is a window with ready-made codes of both macros. Copy them to the module in a new Excel file. Save everything as an Excel add-in (.xlam) . When writing to xlam, you should automatically suggest a folder for storing Excel extras. The most common is in this location: C: \ Users \ YOUR_LOGIN \ AppData \ Roaming \ Microsoft \ Extras. Specify the name of the additive as  my_add.xlam .

'OfficeInside.Org
Sub SaveAsWithDate()
    Dim strFilename As String
    strFilename = ActiveWorkbook.Name
    Application.Dialogs(xlDialogSaveAs).Show Format(Date, "yyyymmdd") & "_" & strFilename
End Sub

Sub GenerujDane()

Dim intCounter As Integer
Dim intColumn As Integer
Dim intRow As Integer

'wstawiamy nagłówki kolumn
Cells(1, 1) = "Liczba porządkowa"
Cells(1, 2) = "Numer indeksu"
Cells(1, 3) = "Data egzaminu"
Cells(1, 4) = "Wynik egzaminu"
Cells(1, 5) = "Ocena słowna"

'wypełniamy kolumnę Liczba porządkowa liczbami od 1 do 30
intCounter = 1
Do While intCounter <= 30
Cells(intRow + 2, 1) = intCounter
intCounter = intCounter + 1
intRow = intRow + 1
Loop

'wypełniamy kolumnę numer indeksu
intCounter = 1 'do licznika przypisujemy wartość 1
intRow = 0 'do licznika wierszy przypisujemy wartość początkową

Do While intCounter <= 30
Cells(intRow + 2, 2) = Int(90000 + Rnd() * 10000) 'Całkowita liczba losowa od 90kdo 100k
intCounter = intCounter + 1
intRow = intRow + 1
Loop

'wypełniamy kolumnę data egzaminu
intCounter = 1 'do licznika przypisujemy wartość 1
intRow = 0 'do licznika wierszy przypisujemy wartość początkową

Do While intCounter <= 30
Cells(intRow + 2, 3) = Date - 10 ' wstawiamy datę w 3 kolumnę
intCounter = intCounter + 1
intRow = intRow + 1
Loop

'wypełniamy kolumnę wynik egzaminu
intCounter = 1 'do licznika przypisujemy wartość 1
intRow = 0 'do licznika wierszy przypisujemy wartość początkową

Do While intCounter <= 30
Cells(intRow + 2, 4) = Int(Rnd() * 100) 'mnożymy liczbę losową przez 100 i zaokrąglamy
intCounter = intCounter + 1
intRow = intRow + 1
Loop
'wypełniamy ocenę słowną
Dim StrResult As String 'wstawiamy zmienną reprezentującą oceną słowną
intCounter = 1 'do licznika przypisujemy wartość 1
intRow = 0 'do licznika wierszy przypisujemy wartość początkową

Do While intCounter <= 30

'instrukcja warunkowa przypisuje wynik słowny na podstawie pkt. z kolumny Wynik
If Cells(intRow + 2, 4) <= 33 Then
StrResult = "Poprawka"
ElseIf Cells(intRow + 2, 4) > 33 And Cells(intRow + 2, 4) <= 67 Then
StrResult = "Zdał"
ElseIf Cells(intRow + 2, 4) > 67 Then
StrResult = "Zdał z wyróżnieniem"
End If

Cells(intRow + 2, 5) = StrResult

intCounter = intCounter + 1
intRow = intRow + 1
Loop

End Sub

 

Installing your own VBA add-in to Excel

To install your own Excel add-in, go to the Developer tab . Under the Excel Add-ons icon you can choose your add-on as per the screenshot below. Check my_address and click OK.

We install the VBA Excel add-ons in the tabs in the Excel menu. Go to File> Options> Customize the ribbon. Now we should do the following:

  • On the left, set “Selecting a command from” to Macro
  • On the right side, create a new tab and automatically a new group
  • Move your 2 macros on the left to the new group on the right
  • On the right, change the names of your macros by clicking the right button> Rename.
  • By changing the name, set the icons for your macros
  • Also change the names for the group and cards to be more friendly
  • Move your add-on down the tabs to display at the end of the cards
  • Finished !!!

Now you can use your own Excel extras.

Leave a comment

Your email address will not be published. Required fields are marked *

%d bloggers like this: