Hi Folks,

I'm using the code below to create toolbars based on toolbar settings in
another template (for my own reasons) which are stored in an ini file.

Everything works great (toolbars are created with all the appropriate
details) except they do not execute my required styles. The buttons
which have macros assigned to them work fine but the buttons I used for
style shortcuts do not. I assumed that the name of the style assigned
to a macro being the same as a style would be enough but it seems I'm a
muppet.

Any pointers??

Cheers

J

CustomizationContext = ActiveDocument

i = 0
For x = 0 To UBound(strMainCBInfo()) - 1

Set oCMdBar = CommandBars.Add(Name:=strMainCBInfo(i, 2),
Position:=msoBarFloating, Temporary:=False)
j = 1

With oCMdBar
.Height = strMainCBInfo(i, 0)
.Left = strMainCBInfo(i, 1)
.Name = strMainCBInfo(i, 2)
.NameLocal = strMainCBInfo(i, 3)
.Position = strMainCBInfo(i, 4)
.RowIndex = strMainCBInfo(i, 5)
End With
y = 1

For j = 0 To UBound(strControlInfo()) - 1
If strControlInfo(j, 1, i) <> "" Then

With oCMdBar
.Controls.Add Type:=msoControlButton
With .Controls.Item(y)
.BeginGroup = strControlInfo(j, 0, i)
.Caption = strControlInfo(j, 1, i)
.DescriptionText = strControlInfo(j, 2, i)
.Enabled = True

.FaceId = strControlInfo(j, 3, i)
.Height = strControlInfo(j, 4, i)
'.ID = strControlInfo(j, 5, i)
.OnAction = strControlInfo(j, 6, i)
.Parameter = strControlInfo(j, 7, i)
.Priority = strControlInfo(j, 8, i)
.ShortcutText = strControlInfo(j, 9, i)
.State = strControlInfo(j, 10, i)
.Style = strControlInfo(j, 11, i)
.Tag = strControlInfo(j, 12, i)
.TooltipText = strControlInfo(j, 13, i)
.Width = strControlInfo(j, 14, i)

End With
.Visible = True
End With
End If
y = y + 1
Next j
i = i + 1
Next x

Re: Programming toolbar buttons by Shauna

Shauna
Sat Aug 28 06:19:46 CDT 2004

Hi JB

> I assumed that the name of the style assigned to a macro being the same as
> a style would be enough

No, it doesn't work like that. Try something like the following:

Sub AddToolbarWithStyle()

Dim oBar As CommandBar
Dim oButton As CommandBarButton
Dim sStyle As String

Set oBar = Application.CommandBars.Add(Name:="My command bar")

sStyle = "Body Text"
Set oButton = oBar.Controls.Add(Type:=msoControlButton, _
ID:=2321, Parameter:=sStyle)
oButton.Caption = sStyle

End Sub

Hope this helps.

Shauna Kelly. Microsoft MVP.
http://www.shaunakelly.com/word


"JB" <no@way.com> wrote in message
news:uJIkDdEjEHA.3348@TK2MSFTNGP12.phx.gbl...
>
> Hi Folks,
>
> I'm using the code below to create toolbars based on toolbar settings in
> another template (for my own reasons) which are stored in an ini file.
>
> Everything works great (toolbars are created with all the appropriate
> details) except they do not execute my required styles. The buttons which
> have macros assigned to them work fine but the buttons I used for style
> shortcuts do not. I assumed that the name of the style assigned to a
> macro being the same as a style would be enough but it seems I'm a muppet.
>
> Any pointers??
>
> Cheers
>
> J
>
> CustomizationContext = ActiveDocument
>
> i = 0
> For x = 0 To UBound(strMainCBInfo()) - 1
>
> Set oCMdBar = CommandBars.Add(Name:=strMainCBInfo(i, 2),
> Position:=msoBarFloating, Temporary:=False)
> j = 1
>
> With oCMdBar
> .Height = strMainCBInfo(i, 0)
> .Left = strMainCBInfo(i, 1)
> .Name = strMainCBInfo(i, 2)
> .NameLocal = strMainCBInfo(i, 3)
> .Position = strMainCBInfo(i, 4)
> .RowIndex = strMainCBInfo(i, 5)
> End With
> y = 1
>
> For j = 0 To UBound(strControlInfo()) - 1
> If strControlInfo(j, 1, i) <> "" Then
>
> With oCMdBar
> .Controls.Add Type:=msoControlButton
> With .Controls.Item(y)
> .BeginGroup = strControlInfo(j, 0, i)
> .Caption = strControlInfo(j, 1, i)
> .DescriptionText = strControlInfo(j, 2, i)
> .Enabled = True
>
> .FaceId = strControlInfo(j, 3, i)
> .Height = strControlInfo(j, 4, i)
> '.ID = strControlInfo(j, 5, i)
> .OnAction = strControlInfo(j, 6, i)
> .Parameter = strControlInfo(j, 7, i)
> .Priority = strControlInfo(j, 8, i)
> .ShortcutText = strControlInfo(j, 9, i)
> .State = strControlInfo(j, 10, i)
> .Style = strControlInfo(j, 11, i)
> .Tag = strControlInfo(j, 12, i)
> .TooltipText = strControlInfo(j, 13, i)
> .Width = strControlInfo(j, 14, i)
>
> End With
> .Visible = True
> End With
> End If
> y = y + 1
> Next j
> i = i + 1
> Next x



Re: Programming toolbar buttons by JB

JB
Sat Aug 28 16:07:55 CDT 2004

Shauna Kelly wrote:
> Hi JB
>
>
>>I assumed that the name of the style assigned to a macro being the same as
>>a style would be enough
>
>
> No, it doesn't work like that. Try something like the following:
>
> Sub AddToolbarWithStyle()
>
> Dim oBar As CommandBar
> Dim oButton As CommandBarButton
> Dim sStyle As String
>
> Set oBar = Application.CommandBars.Add(Name:="My command bar")
>
> sStyle = "Body Text"
> Set oButton = oBar.Controls.Add(Type:=msoControlButton, _
> ID:=2321, Parameter:=sStyle)
> oButton.Caption = sStyle
>
> End Sub
>
> Hope this helps.
>
> Shauna Kelly. Microsoft MVP.
> http://www.shaunakelly.com/word
>
>
> "JB" <no@way.com> wrote in message
> news:uJIkDdEjEHA.3348@TK2MSFTNGP12.phx.gbl...
>
>>Hi Folks,
>>
>>I'm using the code below to create toolbars based on toolbar settings in
>>another template (for my own reasons) which are stored in an ini file.
>>
>>Everything works great (toolbars are created with all the appropriate
>>details) except they do not execute my required styles. The buttons which
>>have macros assigned to them work fine but the buttons I used for style
>>shortcuts do not. I assumed that the name of the style assigned to a
>>macro being the same as a style would be enough but it seems I'm a muppet.
>>
>>Any pointers??
>>
>>Cheers
>>
>>J
>>
>>CustomizationContext = ActiveDocument
>>
>>i = 0
>>For x = 0 To UBound(strMainCBInfo()) - 1
>>
>>Set oCMdBar = CommandBars.Add(Name:=strMainCBInfo(i, 2),
>>Position:=msoBarFloating, Temporary:=False)
>> j = 1
>>
>> With oCMdBar
>> .Height = strMainCBInfo(i, 0)
>> .Left = strMainCBInfo(i, 1)
>> .Name = strMainCBInfo(i, 2)
>> .NameLocal = strMainCBInfo(i, 3)
>> .Position = strMainCBInfo(i, 4)
>> .RowIndex = strMainCBInfo(i, 5)
>> End With
>> y = 1
>>
>> For j = 0 To UBound(strControlInfo()) - 1
>> If strControlInfo(j, 1, i) <> "" Then
>>
>> With oCMdBar
>> .Controls.Add Type:=msoControlButton
>> With .Controls.Item(y)
>> .BeginGroup = strControlInfo(j, 0, i)
>> .Caption = strControlInfo(j, 1, i)
>> .DescriptionText = strControlInfo(j, 2, i)
>> .Enabled = True
>>
>> .FaceId = strControlInfo(j, 3, i)
>> .Height = strControlInfo(j, 4, i)
>> '.ID = strControlInfo(j, 5, i)
>> .OnAction = strControlInfo(j, 6, i)
>> .Parameter = strControlInfo(j, 7, i)
>> .Priority = strControlInfo(j, 8, i)
>> .ShortcutText = strControlInfo(j, 9, i)
>> .State = strControlInfo(j, 10, i)
>> .Style = strControlInfo(j, 11, i)
>> .Tag = strControlInfo(j, 12, i)
>> .TooltipText = strControlInfo(j, 13, i)
>> .Width = strControlInfo(j, 14, i)
>>
>> End With
>> .Visible = True
>> End With
>> End If
>> y = y + 1
>> Next j
>> i = i + 1
>>Next x
>
>
>
Hi Shauna,

This looks to be the same as I'm doing just now but with a different ID.
and setting the param at Add time. Does it matter if it's added at Add
time or not? What's the ID portion of your code doing here?

Cheers

J

Re: Programming toolbar buttons by Shauna

Shauna
Sat Aug 28 19:32:46 CDT 2004

Hi JB

Several things are going on here.

1. The .OnAction property, according to VBA help, "Returns or sets the name
of a Visual Basic procedure...". So, if you set the .OnAction property to
(eg) "Body Text", and click the button, then Word will run around trying to
find a VB procedure called "Body Text". But it obviously can't find one.

2. The ID property of a button is the unique read-only number assignd to
each built-in button in Word. For example, ID 3462 is the button for the
"Insert Page Break" command. If you wanted to add a button to invoke the
Insert Page Break command, you'd set the ID to 3462. All buttons that you
create and to which you assign a macro have an ID of 1. I interpret 1 to be
the "Run my macro" command.

3. If you use the macro recorder to record creating a button for a style,
you'll see that your code puts a built-in button with an ID of 2321 on your
toolbar. ID 2321 is the "Apply Style Name" command, which, as far as I'm
aware, isn't documented anywhere. So the code is telling Word to put a
button on your toolbar that will apply a style.

4. How Word uses the .Parameter property depends on the command being
invoked. In the case of ID 2321, the parameter tells Word which style to
apply. So if you created a button with ID 2321, without providing a
parameter, Word wouldn't know what style to apply, and the button does
nothing.

5. If you don't set the .Caption property, the button will simply say "Apply
Style Name". So you need to set the Caption property for the button to be
useful.

Hope this helps.

Shauna Kelly. Microsoft MVP.
http://www.shaunakelly.com/word


"JB" <me@me.com> wrote in message
news:ua99uAQjEHA.3016@tk2msftngp13.phx.gbl...
> Shauna Kelly wrote:
>> Hi JB
>>
>>
>>>I assumed that the name of the style assigned to a macro being the same
>>>as a style would be enough
>>
>>
>> No, it doesn't work like that. Try something like the following:
>>
>> Sub AddToolbarWithStyle()
>>
>> Dim oBar As CommandBar
>> Dim oButton As CommandBarButton
>> Dim sStyle As String
>>
>> Set oBar = Application.CommandBars.Add(Name:="My command bar")
>>
>> sStyle = "Body Text"
>> Set oButton = oBar.Controls.Add(Type:=msoControlButton, _
>> ID:=2321, Parameter:=sStyle)
>> oButton.Caption = sStyle
>>
>> End Sub
>>
>> Hope this helps.
>>
>> Shauna Kelly. Microsoft MVP.
>> http://www.shaunakelly.com/word
>>
>>
>> "JB" <no@way.com> wrote in message
>> news:uJIkDdEjEHA.3348@TK2MSFTNGP12.phx.gbl...
>>
>>>Hi Folks,
>>>
>>>I'm using the code below to create toolbars based on toolbar settings in
>>>another template (for my own reasons) which are stored in an ini file.
>>>
>>>Everything works great (toolbars are created with all the appropriate
>>>details) except they do not execute my required styles. The buttons
>>>which have macros assigned to them work fine but the buttons I used for
>>>style shortcuts do not. I assumed that the name of the style assigned to
>>>a macro being the same as a style would be enough but it seems I'm a
>>>muppet.
>>>
>>>Any pointers??
>>>
>>>Cheers
>>>
>>>J
>>>
>>>CustomizationContext = ActiveDocument
>>>
>>>i = 0
>>>For x = 0 To UBound(strMainCBInfo()) - 1
>>>
>>>Set oCMdBar = CommandBars.Add(Name:=strMainCBInfo(i, 2),
>>>Position:=msoBarFloating, Temporary:=False)
>>> j = 1
>>>
>>> With oCMdBar
>>> .Height = strMainCBInfo(i, 0)
>>> .Left = strMainCBInfo(i, 1)
>>> .Name = strMainCBInfo(i, 2)
>>> .NameLocal = strMainCBInfo(i, 3)
>>> .Position = strMainCBInfo(i, 4)
>>> .RowIndex = strMainCBInfo(i, 5)
>>> End With
>>> y = 1
>>>
>>> For j = 0 To UBound(strControlInfo()) - 1
>>> If strControlInfo(j, 1, i) <> "" Then
>>>
>>> With oCMdBar
>>> .Controls.Add Type:=msoControlButton
>>> With .Controls.Item(y)
>>> .BeginGroup = strControlInfo(j, 0, i)
>>> .Caption = strControlInfo(j, 1, i)
>>> .DescriptionText = strControlInfo(j, 2, i)
>>> .Enabled = True
>>>
>>> .FaceId = strControlInfo(j, 3, i)
>>> .Height = strControlInfo(j, 4, i)
>>> '.ID = strControlInfo(j, 5, i)
>>> .OnAction = strControlInfo(j, 6, i)
>>> .Parameter = strControlInfo(j, 7, i)
>>> .Priority = strControlInfo(j, 8, i)
>>> .ShortcutText = strControlInfo(j, 9, i)
>>> .State = strControlInfo(j, 10, i)
>>> .Style = strControlInfo(j, 11, i)
>>> .Tag = strControlInfo(j, 12, i)
>>> .TooltipText = strControlInfo(j, 13, i)
>>> .Width = strControlInfo(j, 14, i)
>>>
>>> End With
>>> .Visible = True
>>> End With
>>> End If
>>> y = y + 1
>>> Next j
>>> i = i + 1
>>>Next x
>>
>>
>>
> Hi Shauna,
>
> This looks to be the same as I'm doing just now but with a different ID.
> and setting the param at Add time. Does it matter if it's added at Add
> time or not? What's the ID portion of your code doing here?
>
> Cheers
>
> J



Re: Programming toolbar buttons by JB

JB
Mon Aug 30 05:31:50 CDT 2004

Shauna Kelly wrote:
> Hi JB
>
> Several things are going on here.
>
> 1. The .OnAction property, according to VBA help, "Returns or sets the name
> of a Visual Basic procedure...". So, if you set the .OnAction property to
> (eg) "Body Text", and click the button, then Word will run around trying to
> find a VB procedure called "Body Text". But it obviously can't find one.
>
> 2. The ID property of a button is the unique read-only number assignd to
> each built-in button in Word. For example, ID 3462 is the button for the
> "Insert Page Break" command. If you wanted to add a button to invoke the
> Insert Page Break command, you'd set the ID to 3462. All buttons that you
> create and to which you assign a macro have an ID of 1. I interpret 1 to be
> the "Run my macro" command.
>
> 3. If you use the macro recorder to record creating a button for a style,
> you'll see that your code puts a built-in button with an ID of 2321 on your
> toolbar. ID 2321 is the "Apply Style Name" command, which, as far as I'm
> aware, isn't documented anywhere. So the code is telling Word to put a
> button on your toolbar that will apply a style.
>
> 4. How Word uses the .Parameter property depends on the command being
> invoked. In the case of ID 2321, the parameter tells Word which style to
> apply. So if you created a button with ID 2321, without providing a
> parameter, Word wouldn't know what style to apply, and the button does
> nothing.
>
> 5. If you don't set the .Caption property, the button will simply say "Apply
> Style Name". So you need to set the Caption property for the button to be
> useful.
>
> Hope this helps.
>
> Shauna Kelly. Microsoft MVP.
> http://www.shaunakelly.com/word
>
>
> "JB" <me@me.com> wrote in message
> news:ua99uAQjEHA.3016@tk2msftngp13.phx.gbl...
>
>>Shauna Kelly wrote:
>>
>>>Hi JB
>>>
>>>
>>>
>>>>I assumed that the name of the style assigned to a macro being the same
>>>>as a style would be enough
>>>
>>>
>>>No, it doesn't work like that. Try something like the following:
>>>
>>>Sub AddToolbarWithStyle()
>>>
>>>Dim oBar As CommandBar
>>>Dim oButton As CommandBarButton
>>>Dim sStyle As String
>>>
>>> Set oBar = Application.CommandBars.Add(Name:="My command bar")
>>>
>>> sStyle = "Body Text"
>>> Set oButton = oBar.Controls.Add(Type:=msoControlButton, _
>>> ID:=2321, Parameter:=sStyle)
>>> oButton.Caption = sStyle
>>>
>>>End Sub
>>>
>>>Hope this helps.
>>>
>>>Shauna Kelly. Microsoft MVP.
>>>http://www.shaunakelly.com/word
>>>
>>>
>>>"JB" <no@way.com> wrote in message
>>>news:uJIkDdEjEHA.3348@TK2MSFTNGP12.phx.gbl...
>>>
>>>
>>>>Hi Folks,
>>>>
>>>>I'm using the code below to create toolbars based on toolbar settings in
>>>>another template (for my own reasons) which are stored in an ini file.
>>>>
>>>>Everything works great (toolbars are created with all the appropriate
>>>>details) except they do not execute my required styles. The buttons
>>>>which have macros assigned to them work fine but the buttons I used for
>>>>style shortcuts do not. I assumed that the name of the style assigned to
>>>>a macro being the same as a style would be enough but it seems I'm a
>>>>muppet.
>>>>
>>>>Any pointers??
>>>>
>>>>Cheers
>>>>
>>>>J
>>>>
>>>>CustomizationContext = ActiveDocument
>>>>
>>>>i = 0
>>>>For x = 0 To UBound(strMainCBInfo()) - 1
>>>>
>>>>Set oCMdBar = CommandBars.Add(Name:=strMainCBInfo(i, 2),
>>>>Position:=msoBarFloating, Temporary:=False)
>>>> j = 1
>>>>
>>>> With oCMdBar
>>>> .Height = strMainCBInfo(i, 0)
>>>> .Left = strMainCBInfo(i, 1)
>>>> .Name = strMainCBInfo(i, 2)
>>>> .NameLocal = strMainCBInfo(i, 3)
>>>> .Position = strMainCBInfo(i, 4)
>>>> .RowIndex = strMainCBInfo(i, 5)
>>>> End With
>>>> y = 1
>>>>
>>>> For j = 0 To UBound(strControlInfo()) - 1
>>>> If strControlInfo(j, 1, i) <> "" Then
>>>>
>>>> With oCMdBar
>>>> .Controls.Add Type:=msoControlButton
>>>> With .Controls.Item(y)
>>>> .BeginGroup = strControlInfo(j, 0, i)
>>>> .Caption = strControlInfo(j, 1, i)
>>>> .DescriptionText = strControlInfo(j, 2, i)
>>>> .Enabled = True
>>>>
>>>> .FaceId = strControlInfo(j, 3, i)
>>>> .Height = strControlInfo(j, 4, i)
>>>> '.ID = strControlInfo(j, 5, i)
>>>> .OnAction = strControlInfo(j, 6, i)
>>>> .Parameter = strControlInfo(j, 7, i)
>>>> .Priority = strControlInfo(j, 8, i)
>>>> .ShortcutText = strControlInfo(j, 9, i)
>>>> .State = strControlInfo(j, 10, i)
>>>> .Style = strControlInfo(j, 11, i)
>>>> .Tag = strControlInfo(j, 12, i)
>>>> .TooltipText = strControlInfo(j, 13, i)
>>>> .Width = strControlInfo(j, 14, i)
>>>>
>>>> End With
>>>> .Visible = True
>>>> End With
>>>> End If
>>>> y = y + 1
>>>> Next j
>>>> i = i + 1
>>>>Next x
>>>
>>>
>>>
>>Hi Shauna,
>>
>>This looks to be the same as I'm doing just now but with a different ID.
>>and setting the param at Add time. Does it matter if it's added at Add
>>time or not? What's the ID portion of your code doing here?
>>
>>Cheers
>>
>>J
>
>
>
Thanks very much for your explanation Shauna.

Clears things up for me.

Cheers

J