I save my toolbar setting to the regestry so the user can move it where they want it. So when I create the toolbar I read the regestry and put the toolbar where ever it points.
The below is MY prefered method. I say MY because I have seen several different ways to do this, I have copied several ways to do this, I have changed, edited, deleted, added, so I have no idea who actually wrote what or where I got some of it. I use this a lot and I also use it for a base when adding toolbars in the VBIDE or COM ADD-INs. So in a nutshell this works very well for me
Option Explicit
Public Const TOOLBAR_NAME As String = "Certification Letter"
Public MyButton As CommandBarButton
Public MyButton1 As CommandBarButton
Public MyButton2 As CommandBarButton
Public Sub AddToolBar()
On Error Resume Next
Dim I As Integer
Dim J As Integer
Dim sToolBar As String
On Error Resume Next
sToolBar = Application.CommandBars(TOOLBAR_NAME).Name
If Err.Number <> 0 Then
Application.CommandBars.Add TOOLBAR_NAME, , , True
Call SetLocation(TOOLBAR_NAME)
End If
Application.CommandBars(TOOLBAR_NAME).Visible = True
I = Application.CommandBars(TOOLBAR_NAME).Controls.Count
For J = I To 1 Step -1
Application.CommandBars(TOOLBAR_NAME).Controls(J).Delete
Next
On Error GoTo 0
If MyButton Is Nothing Then
Set MyButton = Application.CommandBars(TOOLBAR_NAME).Controls.Add(1)
End If
With MyButton
.Caption = "Enter Data"
.Style = msoButtonIconAndCaption 'icon and caption
'.Style = msoButtonCaption 'caption only
'.Style = msoButtonIcon 'icon only
.Tag = "VBA CustomButtons"
.OnAction = "ShowFillIn"
.FaceId = 362
.Visible = True
End With
If MyButton1 Is Nothing Then
Set MyButton1 = Application.CommandBars(TOOLBAR_NAME).Controls.Add(1)
End If
With MyButton1
.Caption = "Add Contact"
.Style = msoButtonIconAndCaption
.Tag = "VBA CustomButton1"
.OnAction = "AddContact"
.FaceId = 3732
.Visible = True
End With
If MyButton2 Is Nothing Then
Set MyButton2 = Application.CommandBars(TOOLBAR_NAME).Controls.Add(1)
End If
With MyButton2
.Caption = "Change Contact"
.Style = msoButtonIconAndCaption
.Tag = "VBA CustomButton2"
.OnAction = "ChangeContact"
.FaceId = 3732
.Visible = True
End With
End Sub
Public Sub DeleteToolBar()
Dim I As Integer
Dim J As Integer
On Error Resume Next
Call SaveLocation(TOOLBAR_NAME)
I = Application.CommandBars(TOOLBAR_NAME).Controls.Count
For J = I To 1 Step -1
Application.CommandBars(TOOLBAR_NAME).Controls(J).Delete
Next
Set MyButton = Nothing
Set MyButton1 = Nothing
Application.CommandBars(TOOLBAR_NAME).Delete
Set RghtHer = Nothing
On Error GoTo 0
End Sub
Sub SetLocation(BarName As String)
Dim lToolbarPosition As Long
Dim lToolbarIndex As Long
Dim lToolbarTop As Long
Dim lToolbarLeft As Long
lToolbarPosition = CLng(GetSetting(TOOLBAR_NAME, "Settings", "ToolbarPosition", CStr(msoBarTop)))
lToolbarIndex = CLng(GetSetting(TOOLBAR_NAME, "Settings", "ToolbarIndex", "0"))
lToolbarLeft = CLng(GetSetting(TOOLBAR_NAME, "Settings", "ToolbarLeft", "0"))
lToolbarTop = CLng(GetSetting(TOOLBAR_NAME, "Settings", "ToolbarTop", "0"))
With Application.CommandBars(TOOLBAR_NAME)
.Position = lToolbarPosition
Select Case lToolbarPosition
Case msoBarTop, msoBarBottom
.RowIndex = lToolbarIndex
.Left = lToolbarLeft
Case msoBarLeft, msoBarRight
.RowIndex = lToolbarIndex
.Top = lToolbarTop
Case Else
.Top = lToolbarTop
.Left = lToolbarLeft
End Select
.Visible = True
End With
End Sub
Sub SaveLocation(BarName As String)
With Application.CommandBars(TOOLBAR_NAME)
SaveSetting TOOLBAR_NAME, "Settings", "ToolbarPosition", CStr(.Position)
SaveSetting TOOLBAR_NAME, "Settings", "ToolbarIndex", CStr(.RowIndex)
SaveSetting TOOLBAR_NAME, "Settings", "ToolbarLeft", CStr(.Left)
SaveSetting TOOLBAR_NAME, "Settings", "ToolbarTop", CStr(.Top)
.Visible = False
End With
End Sub
Function ShowFillIn()
frmFillIn.Show
End Function