Howard Kaikow
05-19-2005, 02:21 AM
Anybody with Word 97 able to reproduce the following problem?
Code module is followed by a class module.
' The following works in Word 2000, Word 2002, and Word 2003, but not in Word 97.
' Code fails on the OnAction method in SetToolbar and SetMenu.
Option Explicit
Private clsTest As clsTestCommandbars
Private Sub TestMe()
Dim docWord As Word.Document
Dim gappWord As Word.Application
Set gappWord = New Word.Application
Set docWord = gappWord.Documents.Add(newtemplate:=True)
Set clsTest = New clsTestCommandbars
With clsTest
.SetToolbar True, docWord
.SetMenu docWord
End With
With docWord
.SaveAs FileName:="I:\Word-Hodgepodge\Tests\Word97-OnAction\X.dot"
.Close
End With
Set docWord = Nothing
gappWord.Quit
Set gappWord = Nothing
Set clsTest = Nothing
End Sub
Option Explicit
Private cbarToolbar As Office.CommandBar
Private cmdMenu As Office.CommandBarControl
Private strMacros() As String
Private strUserButtonNames() As String
Private strUserMenuItemLabel() As String
Private Const strToolbarname As String = "Bagels"
Private Const strMenuName As String = "&Lox"
Private Const strTag As String = "You're it!"
Private Const lngMaxbutton As Long = 2
Public Sub SetToolbar(blnToolbarBottom As Boolean, docWord As Word.Document)
Dim cmdControl As Office.CommandBarControl
Dim i As Long
With docWord
On Error Resume Next
.CommandBars(strToolbarname).Delete
On Error GoTo 0
If blnToolbarBottom Then
Set cbarToolbar = .CommandBars.Add(Name:=strToolbarname, _
Position:=Office.msoBarBottom, menubar:=False, temporary:=False)
Else
Set cbarToolbar = .CommandBars.Add(Name:=strToolbarname, _
Position:=Office.msoBarTop, menubar:=False, temporary:=False)
End If
End With
With cbarToolbar
For i = 0 To lngMaxbutton
Set cmdControl = .Controls.Add(Type:=Office.msoControlButton, temporary:=False)
With cmdControl
.Style = Office.msoButtonCaption
.Caption = strUserButtonNames(i)
.OnAction = strMacros(i)
.TooltipText = strMacros(i)
.Tag = strTag
End With
Next i
.Enabled = True
.Visible = True
End With
Set cmdControl = Nothing
End Sub
Public Sub SetMenu(docWord As Word.Document)
Dim cmdControl As Office.CommandBarControl
Dim i As Long
With docWord
On Error Resume Next
.CommandBars(strMenuName).Delete
On Error GoTo 0
Set cmdMenu = .CommandBars.ActiveMenuBar.Controls.Add(Type:=Office.msoControlPopup, _
temporary:=False)
End With
With cmdMenu
.Caption = strMenuName
.Visible = True
End With
With cmdMenu
For i = 0 To lngMaxbutton
Set cmdControl = .Controls.Add(Type:=Office.msoControlButton, temporary:=False)
With cmdControl
.Style = Office.msoButtonCaption
.TooltipText = strMacros(i)
.Tag = strTag
.Caption = strUserMenuItemLabel(i)
.Visible = True
.OnAction = strMacros(i)
End With
Next i
' Add item to end of menu
Set cmdControl = .Controls.Add(Type:=Office.msoControlButton, temporary:=False)
With cmdControl
.BeginGroup = True
.Style = Office.msoButtonCaption
.Caption = "About Howard Kaikow's macros"
.OnAction = "RunHelpAbout"
.Tag = strTag
End With
End With
Set cmdControl = Nothing
End Sub
Private Sub Class_Initialize()
ReDim strUserButtonNames(lngMaxbutton)
ReDim strUserMenuItemLabel(lngMaxbutton)
ReDim strMacros(lngMaxbutton)
strMacros(0) = "RunHelpAbout"
strMacros(1) = "RunHelpAbout"
strMacros(2) = "RunHelpAbout"
strUserButtonNames(0) = "Pasta"
strUserButtonNames(1) = "Veggies"
strUserButtonNames(2) = "Orange Juice"
strUserMenuItemLabel(0) = "&" & strUserButtonNames(0)
strUserMenuItemLabel(1) = "&" & strUserButtonNames(1)
strUserMenuItemLabel(2) = "&" & strUserButtonNames(2)
End Sub
Code module is followed by a class module.
' The following works in Word 2000, Word 2002, and Word 2003, but not in Word 97.
' Code fails on the OnAction method in SetToolbar and SetMenu.
Option Explicit
Private clsTest As clsTestCommandbars
Private Sub TestMe()
Dim docWord As Word.Document
Dim gappWord As Word.Application
Set gappWord = New Word.Application
Set docWord = gappWord.Documents.Add(newtemplate:=True)
Set clsTest = New clsTestCommandbars
With clsTest
.SetToolbar True, docWord
.SetMenu docWord
End With
With docWord
.SaveAs FileName:="I:\Word-Hodgepodge\Tests\Word97-OnAction\X.dot"
.Close
End With
Set docWord = Nothing
gappWord.Quit
Set gappWord = Nothing
Set clsTest = Nothing
End Sub
Option Explicit
Private cbarToolbar As Office.CommandBar
Private cmdMenu As Office.CommandBarControl
Private strMacros() As String
Private strUserButtonNames() As String
Private strUserMenuItemLabel() As String
Private Const strToolbarname As String = "Bagels"
Private Const strMenuName As String = "&Lox"
Private Const strTag As String = "You're it!"
Private Const lngMaxbutton As Long = 2
Public Sub SetToolbar(blnToolbarBottom As Boolean, docWord As Word.Document)
Dim cmdControl As Office.CommandBarControl
Dim i As Long
With docWord
On Error Resume Next
.CommandBars(strToolbarname).Delete
On Error GoTo 0
If blnToolbarBottom Then
Set cbarToolbar = .CommandBars.Add(Name:=strToolbarname, _
Position:=Office.msoBarBottom, menubar:=False, temporary:=False)
Else
Set cbarToolbar = .CommandBars.Add(Name:=strToolbarname, _
Position:=Office.msoBarTop, menubar:=False, temporary:=False)
End If
End With
With cbarToolbar
For i = 0 To lngMaxbutton
Set cmdControl = .Controls.Add(Type:=Office.msoControlButton, temporary:=False)
With cmdControl
.Style = Office.msoButtonCaption
.Caption = strUserButtonNames(i)
.OnAction = strMacros(i)
.TooltipText = strMacros(i)
.Tag = strTag
End With
Next i
.Enabled = True
.Visible = True
End With
Set cmdControl = Nothing
End Sub
Public Sub SetMenu(docWord As Word.Document)
Dim cmdControl As Office.CommandBarControl
Dim i As Long
With docWord
On Error Resume Next
.CommandBars(strMenuName).Delete
On Error GoTo 0
Set cmdMenu = .CommandBars.ActiveMenuBar.Controls.Add(Type:=Office.msoControlPopup, _
temporary:=False)
End With
With cmdMenu
.Caption = strMenuName
.Visible = True
End With
With cmdMenu
For i = 0 To lngMaxbutton
Set cmdControl = .Controls.Add(Type:=Office.msoControlButton, temporary:=False)
With cmdControl
.Style = Office.msoButtonCaption
.TooltipText = strMacros(i)
.Tag = strTag
.Caption = strUserMenuItemLabel(i)
.Visible = True
.OnAction = strMacros(i)
End With
Next i
' Add item to end of menu
Set cmdControl = .Controls.Add(Type:=Office.msoControlButton, temporary:=False)
With cmdControl
.BeginGroup = True
.Style = Office.msoButtonCaption
.Caption = "About Howard Kaikow's macros"
.OnAction = "RunHelpAbout"
.Tag = strTag
End With
End With
Set cmdControl = Nothing
End Sub
Private Sub Class_Initialize()
ReDim strUserButtonNames(lngMaxbutton)
ReDim strUserMenuItemLabel(lngMaxbutton)
ReDim strMacros(lngMaxbutton)
strMacros(0) = "RunHelpAbout"
strMacros(1) = "RunHelpAbout"
strMacros(2) = "RunHelpAbout"
strUserButtonNames(0) = "Pasta"
strUserButtonNames(1) = "Veggies"
strUserButtonNames(2) = "Orange Juice"
strUserMenuItemLabel(0) = "&" & strUserButtonNames(0)
strUserMenuItemLabel(1) = "&" & strUserButtonNames(1)
strUserMenuItemLabel(2) = "&" & strUserButtonNames(2)
End Sub