Multiple Push Buttons on Calc form


I have created a simple form that is called from a push button on sheet. Testing has shown me that if I put more than one push button on the form then the proper macros aren't triggered on the button press. The tests involved using other macro methods triggered by a single button on a copy of the current form - they all worked as expected, properly reading the input data and giving me message boxes for debugging purposes.

I also found that simply assigning the "Execute Action" wasn't enough, I also assigned the same action to "Key Released" and "Mouse Button Released". I figure this covers me if someone presses "enter" while the button is selected.

The form looks like this:

Add Player Form

And in the design area:

The “Add Player” button has the “Button Type” of “OK” and the “Cancel” button has the “Button Type” of “Cancel”

The idea is to have a button that people can use to back out if they do something like launch the wrong form, or the macro that processes the form tells them that the data they are trying to enter is already there. This is simply the first in a series of forms I want to create to insert data into a spreadsheet for the purposes of managing a pool team and it's finances. While I could do this as a database and some perl/c/ code easily the other purpose is to have a calc template that can be distributed to other people for them to use.

For now the action macro just creates a new sheet, once I get it working properly there is more that it will do.

The macro code for launching and reading the form is:

Global Continue as Boolean
Dim Add_Player_Dlg As Object

Sub Start_City_Player_Input()

	Add_Player_Dlg = CreateUnoDialog(DialogLibraries.Standard.City_Player_Input)

End Sub

Sub Read_City_Player_Input()
	DIM oDoc as Object
	DIM oSheets as Object
	Dim SheetNotExist as Boolean
	Dim SheetCount as Integer
	DIM NewSheetNum as Integer
	Dim First_Name as String
	DIM Last_Name as String
	DIM NewSheetName as String
	SheetNotExist = True
	oDoc = ThisComponent
	oSheets = oDoc.Sheets
	' Set Sheet Count and number for new sheet
	SheetCount =  oSheets.Count
	NewSheetNum = SheetCount + 1

	First_Name = Add_Player_Dlg.getControl("FirstName").getText()
	Last_Name = Add_Player_Dlg.getControl("LastName").getText()
	Space = " "
	' Check a value has been entered
	If isNull(First_Name) And isNull(Last_Name) Then
		' No Data raise error
		MsgBox("Please Enter a First Name and/or a Last Name", MB_OK, "Error")
	ElseIf Not isNull(FirstName) And Not isNull(Last_Name) Then
		' Concatenate into new name for sheet
		NewSheetName = First_Name & Space & Last_Name
		MsgBox(NewSheetName, MB_OK, "Debug")
	ElseIf isNull(First_Name) And Not isNull(Last_Name) Then
		NewSheetName = Last_Name	
		MsgBox(NewSheetName, MB_OK, "Debug")
	ElseIf Not isnull(First_Name) and isNull(Last_Name) Then
		NewSheetName = First_Name
		MsgBox(NewSheetName, MB_OK, "Debug")
		' No Data raise error
		MsgBox("Please Enter a First Name and/or a Last Name", MB_OK, "Error")
	End If

	 ' Check if a sheet already has that name
	Do While oSheets.hasByName(NewSheetName)
		SheetNotExist = False
	' If there is no sheet of that name create else raise error
	If SheetNotExist Then
		oSheets.insertNewByName(NewSheetName, NewSheetNum)
		'Raise error window
		MsgBox("Player is already entered.", MB_OK, "Error")
	End If
End Sub

' Clear any values stored in "Add Player" text fields and close the form
sub Add_Player_Clear()
	Add_Player_Dlg.getByName("FirstName").Text = ""
	Add_Player_Dlg.getByName("LastName").Text = ""
end Sub

Can anyone point me in the direction of what I am doing wrong, or the correct way to do this (it would seem silly if a form could only have one button on it).


There are a few problems. This is not a form but actually a dialog. The are many differences between the two and it is important when asking questions.

Button type of Cancel or OK will actually close the dialog. You only need one of these (OK is typically used) although there may be a rare occasion to use both. Probably best to label as Done or Finished.

Now you can have another button (without type assigned) where Execute action is assigned to a macro. You can do this with multiple buttons all pointing to the same or different macros. There is no need to assign multiple events as action occurs whether keyboard or mouse initiated.

For a sample, see my answer in this post → How to know which CommandButton called the macro?