Macros record a series of user actions and replay them as needed.

You can view/edit macros at: Tools menu > Macros > Organize Macros > OpenOffice Basic

A macros can contain multiple procedures.
Running the macros will run "Sub Main".

Macros can be run
- Manually: Tools menu > Macros > Run Macro
- Toolbar Button Click: Tools menu > Customize > Customize Toolbar > ...
- Keyboard Shortcut: Tools menu > Customize > Keyboard Tab > ...

Event Handler

A macro can be called when an event occurs. This macros is called an event handler.

1) Write your macro

2) Tools menu > Customize > Events Tab
- events can be saved to OpenOffice Calc, or to a specific file


Custom user functions determine the contents of a cell.

Function written in Basic:

Function Cube( cellA ) As Integer
    Cube = cellA * cellA * cellA
End Function

Function SimpleSum( cellA, cellB ) As Decimal
    SimpleSum = cellA + cellB
End Function

Cell contents:


Functions provide a return value by assigning to a variable with the same name as the function.
Functions will continuing executing after their "return" variable has been assigned to, and that value can be overwritten.
Functions return 0 if nothing is assigned.


aka Sub
aka User Routine

Procedures can be run from any point in the program.
Procedures have no return value.

Procedure written in Basic:

Sub Test
    ' ... here is the actual code of the procedure
End Sub



' these are comments


' Default is pass by reference
Sub Test (A As Integer, B As String)
End Sub

' Specify pass by value
Sub Test (ByVal A As Integer)
End Sub

' Optional parameters
Sub Test (Optional A As Integer)
End Sub

Return type

Function Cube( cellA ) As Integer
    Cube = cellA * cellA * cellA
End Function


Dim ErrorOccured As Boolean


If MyVar Then
    ' code
End If

If MyVar Then
    ' code
    ' code
End If


If Not MyVar Then
    ' code
End If

If A OR B Then
    ' code
End If

Exit function

Exit Function

Exit procedure

Exit Sub


Set focus on a particular cell

Sheet = ThisComponent.Sheets.getByName("Sheet1")
Cell = Sheet.getCellRangeByName("B3")