Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 135
Default VBE Toolbar Control

I'm working with Excel 2003, and I'm trying to determine if there is a
way to get the text in a VBE toolbar control. Specifically, I'm
referencing the Standard toolbar in VBE, control ID 3201 (or at least
I believe this is the right control). This control lists the line and
column for which the cursor is currently located within the code
window, e.g. "Ln 7, Col 30". I used the FindCtrlIdViaToolbarName
procedure below to determine this control ID. If you run the
procedure you'll notice that the control is added to the newly created
toolbar as a button with the caption of "Gauge" and does not look like
the control on the native VBE Standard toolbar. I set up the
GetCtrlText procedure to try and determine if I can use a property to
return the text within this control.

I'm led to believe that it may not be possible to get the text in this
control. As a result, I'm looking for some way to get the code line
for which the cursor, or some other text marker (e.g. "ThisCodeLine"),
is in.

What I mean by text marker is this:
1 | Sub TestCodeLine()
2 | Dim myText As String
3 | myText = "ThisCodeLine"
4 | End Sub
The code line would be 3 for the text marker "ThisCodeLine."

I don't have any experience with coding VBE, but given that there is a
".CodeModule.Lines(StartLine, Count)" construct, I'm led to believe
that there may be a property somewhere to return what I'm looking
for. I'm still digging around.

Thanks,

Matthew Herbert

Sub FindCtrlIdViaToolbarName()
Dim myBarName As String
Dim nativeTBarName As String
Dim nativeCBar As CommandBar
Dim nativeCtrl As CommandBarControl
Dim chgTooltip As Boolean
Dim i As Long
Dim cBar As CommandBar
Dim ctrl As CommandBarControl

nativeTBarName = "Standard"

myBarName = "ID via Toolbar Name"
For Each cBar In Application.VBE.CommandBars
If cBar.Name = myBarName Then
cBar.Delete
End If
Next

Set cBar = Application.VBE.CommandBars.Add(myBarName, msoBarFloating,
False, True)
cBar.Visible = True

chgTooltip = True
i = 0

For Each nativeCBar In Application.VBE.CommandBars
If nativeCBar.Name = nativeTBarName Then
For Each nativeCtrl In nativeCBar.Controls
i = i + 1
Debug.Print i; " | Native Name:"; nativeCtrl.TooltipText;
" | ID:"; nativeCtrl.ID
'some controls won't add and the TooltipText won't change
either
''so I added the On Error statement
On Error Resume Next
cBar.Controls.Add ID:=nativeCtrl.ID
If chgTooltip Then
cBar.Controls(i).TooltipText = nativeCtrl.ID
End If
Next
End If
Next

End Sub

Sub GetCtrlText()
Dim myID As Long
Dim myCtrl

myID = 3201
Set myCtrl = Application.VBE.CommandBars.FindControl(ID:=myID)
'Can't seem to find a property that will return the text in the
control
Debug.Print myCtrl.Caption

End Sub
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3,355
Default VBE Toolbar Control

Chip Pearson has some good info on his site. I'm sure you'll be able to find
something to help you here.

http://www.cpearson.com/excel/vbe.aspx
--
HTH,
Barb Reinhardt

If this post was helpful to you, please click YES below.



" wrote:

I'm working with Excel 2003, and I'm trying to determine if there is a
way to get the text in a VBE toolbar control. Specifically, I'm
referencing the Standard toolbar in VBE, control ID 3201 (or at least
I believe this is the right control). This control lists the line and
column for which the cursor is currently located within the code
window, e.g. "Ln 7, Col 30". I used the FindCtrlIdViaToolbarName
procedure below to determine this control ID. If you run the
procedure you'll notice that the control is added to the newly created
toolbar as a button with the caption of "Gauge" and does not look like
the control on the native VBE Standard toolbar. I set up the
GetCtrlText procedure to try and determine if I can use a property to
return the text within this control.

I'm led to believe that it may not be possible to get the text in this
control. As a result, I'm looking for some way to get the code line
for which the cursor, or some other text marker (e.g. "ThisCodeLine"),
is in.

What I mean by text marker is this:
1 | Sub TestCodeLine()
2 | Dim myText As String
3 | myText = "ThisCodeLine"
4 | End Sub
The code line would be 3 for the text marker "ThisCodeLine."

I don't have any experience with coding VBE, but given that there is a
".CodeModule.Lines(StartLine, Count)" construct, I'm led to believe
that there may be a property somewhere to return what I'm looking
for. I'm still digging around.

Thanks,

Matthew Herbert

Sub FindCtrlIdViaToolbarName()
Dim myBarName As String
Dim nativeTBarName As String
Dim nativeCBar As CommandBar
Dim nativeCtrl As CommandBarControl
Dim chgTooltip As Boolean
Dim i As Long
Dim cBar As CommandBar
Dim ctrl As CommandBarControl

nativeTBarName = "Standard"

myBarName = "ID via Toolbar Name"
For Each cBar In Application.VBE.CommandBars
If cBar.Name = myBarName Then
cBar.Delete
End If
Next

Set cBar = Application.VBE.CommandBars.Add(myBarName, msoBarFloating,
False, True)
cBar.Visible = True

chgTooltip = True
i = 0

For Each nativeCBar In Application.VBE.CommandBars
If nativeCBar.Name = nativeTBarName Then
For Each nativeCtrl In nativeCBar.Controls
i = i + 1
Debug.Print i; " | Native Name:"; nativeCtrl.TooltipText;
" | ID:"; nativeCtrl.ID
'some controls won't add and the TooltipText won't change
either
''so I added the On Error statement
On Error Resume Next
cBar.Controls.Add ID:=nativeCtrl.ID
If chgTooltip Then
cBar.Controls(i).TooltipText = nativeCtrl.ID
End If
Next
End If
Next

End Sub

Sub GetCtrlText()
Dim myID As Long
Dim myCtrl

myID = 3201
Set myCtrl = Application.VBE.CommandBars.FindControl(ID:=myID)
'Can't seem to find a property that will return the text in the
control
Debug.Print myCtrl.Caption

End Sub

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 135
Default VBE Toolbar Control

On Feb 20, 1:33*pm, wrote:
On Feb 17, 3:41*pm, Barb Reinhardt





wrote:
Chip Pearson has some good info on his site. *I'm sure you'll be able to find
something to help you here.


http://www.cpearson.com/excel/vbe.aspx
--
HTH,
Barb Reinhardt


If this post was helpful to you, please click YES below.


" wrote:
I'm working with Excel 2003, and I'm trying to determine if there is a
way to get the text in a VBE toolbar control. *Specifically, I'm
referencing the Standard toolbar in VBE, control ID 3201 (or at least
I believe this is the right control). *This control lists the line and
column for which the cursor is currently located within the code
window, e.g. "Ln 7, Col 30". *I used the FindCtrlIdViaToolbarName
procedure below to determine this control ID. *If you run the
procedure you'll notice that the control is added to the newly created
toolbar as a button with the caption of "Gauge" and does not look like
the control on the native VBE Standard toolbar. *I set up the
GetCtrlText procedure to try and determine if I can use a property to
return the text within this control.


I'm led to believe that it may not be possible to get the text in this
control. *As a result, I'm looking for some way to get the code line
for which the cursor, or some other text marker (e.g. "ThisCodeLine"),
is in.


What I mean by text marker is this:
1 | Sub TestCodeLine()
2 | Dim myText As String
3 | myText = "ThisCodeLine"
4 | End Sub
The code line would be 3 for the text marker "ThisCodeLine."


I don't have any experience with coding VBE, but given that there is a
".CodeModule.Lines(StartLine, Count)" construct, I'm led to believe
that there may be a property somewhere to return what I'm looking
for. *I'm still digging around.


Thanks,


Matthew Herbert


Sub FindCtrlIdViaToolbarName()
Dim myBarName As String
Dim nativeTBarName As String
Dim nativeCBar As CommandBar
Dim nativeCtrl As CommandBarControl
Dim chgTooltip As Boolean
Dim i As Long
Dim cBar As CommandBar
Dim ctrl As CommandBarControl


nativeTBarName = "Standard"


myBarName = "ID via Toolbar Name"
For Each cBar In Application.VBE.CommandBars
* * If cBar.Name = myBarName Then
* * * * cBar.Delete
* * End If
Next


Set cBar = Application.VBE.CommandBars.Add(myBarName, msoBarFloating,
False, True)
cBar.Visible = True


chgTooltip = True
i = 0


For Each nativeCBar In Application.VBE.CommandBars
* * If nativeCBar.Name = nativeTBarName Then
* * * * For Each nativeCtrl In nativeCBar.Controls
* * * * * * i = i + 1
* * * * * * Debug.Print i; " | Native Name:"; nativeCtrl.TooltipText;
" | ID:"; nativeCtrl.ID
* * * * * * 'some controls won't add and the TooltipText won't change
either
* * * * * * ''so I added the On Error statement
* * * * * * On Error Resume Next
* * * * * * cBar.Controls.Add ID:=nativeCtrl.ID
* * * * * * If chgTooltip Then
* * * * * * * * cBar.Controls(i).TooltipText = nativeCtrl.ID
* * * * * * End If
* * * * Next
* * End If
Next


End Sub


Sub GetCtrlText()
Dim myID As Long
Dim myCtrl


myID = 3201
Set myCtrl = Application.VBE.CommandBars.FindControl(ID:=myID)
'Can't seem to find a property that will return the text in the
control
Debug.Print myCtrl.Caption


End Sub- Hide quoted text -


- Show quoted text -


Barb,

Thanks for pointing me to some of Chip's material. *The material will
be useful in getting to my objective; however, I'm still exploring the
code and feel I may need to access the text on the "Gauge" control. *I
know that creating a Class will not allow you to access container
events for UserForms controls (but the Class will allow you to access
non-container events for UserForm controls). *I'm trying to create a
way to access the text in Application.VBE.CommandBars.FindControl
(ID:=3201) to return the "Ln #". *It may be easiest to show why below..

Private Sub txtBox1_Exit() 'container event
myLine = 'extract the "Ln #" number for this specific line
myText = 'loop up from myLine until you find "Sub" or "Function" and
extract the "Sub/Function" line of text

'create a function "GetText" that uses Split, InStr, or InStrRev to
extract the control name from myText
myTextName = GetText(myText) 'this would return "txtBox1"

'rather than writing "Set myCtrl = Me.txtBox1" use the next line of
code
Set myCtrl = Me.Controls(myTextName)

'manipulate the control

End Sub

Creating something in this manner will allow me to use the code
systematically. *If I have multiple controls, it becomes a bit
cumbersome to change the "Set myCtrl = Me.txtBox1" line of code to
"Me.txtBox2" or "Me.txtBox3", etc. for each of the _Exit events (or
any container event for that matter).

I'm still experimenting and looking around.

Best,

Matt- Hide quoted text -

- Show quoted text -


Well, here is a post from myself with a solution.

Dim thisCtrl As Control
Dim lngCodeLn As Long
Dim lngStartLn As Long
Dim lngStartCol As Long
Dim lngEndLn As Long
Dim lngEndCol As Long
Dim strCtrlText As String
Dim codeMod As VBIDE.CodeModule

Private Sub txtBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Application.VBE.ActiveCodePane.GetSelection lngStartLn, lngStartCol,
lngEndLn, lngEndCol
lngCodeLn = lngStartLn
Set codeMod = ActiveWorkbook.VBProject.VBComponents
(Me.Name).CodeModule
strCtrlText = GetEventControlName(codeMod, lngCodeLn)

Set thisCtrl = Me.Controls(strCtrlText)

'manipulate the control

End Sub

Function GetEventControlName(VBCodeMod As VBIDE.CodeModule, lngLn As
Long)
Dim strProcName As String
Dim ProcKind As VBIDE.vbext_ProcKind '0 is Sub or Function
Dim lngUnderscore As Long
Dim strCtrlName As String

strProcName = VBCodeMod.ProcOfLine(lngLn, ProcKind)

'get the first "_" starting from the right and moving to the left
lngUnderscore = InStrRev(strProcName, "_", , vbTextCompare)

'get the text to the left of the "_"
strCtrlName = Left(strProcName, lngUnderscore - 1)

GetEventControlName = strCtrlName

End Function

Best,

Matt
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 135
Default VBE Toolbar Control

On Feb 20, 9:36*pm, wrote:
On Feb 20, 1:33*pm, wrote:





On Feb 17, 3:41*pm, Barb Reinhardt


wrote:
Chip Pearson has some good info on his site. *I'm sure you'll be able to find
something to help you here.


http://www.cpearson.com/excel/vbe.aspx
--
HTH,
Barb Reinhardt


If this post was helpful to you, please click YES below.


" wrote:
I'm working with Excel 2003, and I'm trying to determine if there is a
way to get the text in a VBE toolbar control. *Specifically, I'm
referencing the Standard toolbar in VBE, control ID 3201 (or at least
I believe this is the right control). *This control lists the line and
column for which the cursor is currently located within the code
window, e.g. "Ln 7, Col 30". *I used the FindCtrlIdViaToolbarName
procedure below to determine this control ID. *If you run the
procedure you'll notice that the control is added to the newly created
toolbar as a button with the caption of "Gauge" and does not look like
the control on the native VBE Standard toolbar. *I set up the
GetCtrlText procedure to try and determine if I can use a property to
return the text within this control.


I'm led to believe that it may not be possible to get the text in this
control. *As a result, I'm looking for some way to get the code line
for which the cursor, or some other text marker (e.g. "ThisCodeLine"),
is in.


What I mean by text marker is this:
1 | Sub TestCodeLine()
2 | Dim myText As String
3 | myText = "ThisCodeLine"
4 | End Sub
The code line would be 3 for the text marker "ThisCodeLine."


I don't have any experience with coding VBE, but given that there is a
".CodeModule.Lines(StartLine, Count)" construct, I'm led to believe
that there may be a property somewhere to return what I'm looking
for. *I'm still digging around.


Thanks,


Matthew Herbert


Sub FindCtrlIdViaToolbarName()
Dim myBarName As String
Dim nativeTBarName As String
Dim nativeCBar As CommandBar
Dim nativeCtrl As CommandBarControl
Dim chgTooltip As Boolean
Dim i As Long
Dim cBar As CommandBar
Dim ctrl As CommandBarControl


nativeTBarName = "Standard"


myBarName = "ID via Toolbar Name"
For Each cBar In Application.VBE.CommandBars
* * If cBar.Name = myBarName Then
* * * * cBar.Delete
* * End If
Next


Set cBar = Application.VBE.CommandBars.Add(myBarName, msoBarFloating,
False, True)
cBar.Visible = True


chgTooltip = True
i = 0


For Each nativeCBar In Application.VBE.CommandBars
* * If nativeCBar.Name = nativeTBarName Then
* * * * For Each nativeCtrl In nativeCBar.Controls
* * * * * * i = i + 1
* * * * * * Debug.Print i; " | Native Name:"; nativeCtrl.TooltipText;
" | ID:"; nativeCtrl.ID
* * * * * * 'some controls won't add and the TooltipText won't change
either
* * * * * * ''so I added the On Error statement
* * * * * * On Error Resume Next
* * * * * * cBar.Controls.Add ID:=nativeCtrl.ID
* * * * * * If chgTooltip Then
* * * * * * * * cBar.Controls(i).TooltipText = nativeCtrl.ID
* * * * * * End If
* * * * Next
* * End If
Next


End Sub


Sub GetCtrlText()
Dim myID As Long
Dim myCtrl


myID = 3201
Set myCtrl = Application.VBE.CommandBars.FindControl(ID:=myID)
'Can't seem to find a property that will return the text in the
control
Debug.Print myCtrl.Caption


End Sub- Hide quoted text -


- Show quoted text -


Barb,


Thanks for pointing me to some of Chip's material. *The material will
be useful in getting to my objective; however, I'm still exploring the
code and feel I may need to access the text on the "Gauge" control. *I
know that creating a Class will not allow you to access container
events for UserForms controls (but the Class will allow you to access
non-container events for UserForm controls). *I'm trying to create a
way to access the text in Application.VBE.CommandBars.FindControl
(ID:=3201) to return the "Ln #". *It may be easiest to show why below.


Private Sub txtBox1_Exit() 'container event
myLine = 'extract the "Ln #" number for this specific line
myText = 'loop up from myLine until you find "Sub" or "Function" and
extract the "Sub/Function" line of text


'create a function "GetText" that uses Split, InStr, or InStrRev to
extract the control name from myText
myTextName = GetText(myText) 'this would return "txtBox1"


'rather than writing "Set myCtrl = Me.txtBox1" use the next line of
code
Set myCtrl = Me.Controls(myTextName)


'manipulate the control


End Sub


Creating something in this manner will allow me to use the code
systematically. *If I have multiple controls, it becomes a bit
cumbersome to change the "Set myCtrl = Me.txtBox1" line of code to
"Me.txtBox2" or "Me.txtBox3", etc. for each of the _Exit events (or
any container event for that matter).


I'm still experimenting and looking around.


Best,


Matt- Hide quoted text -


- Show quoted text -


Well, here is a post from myself with a solution.

Dim thisCtrl As Control
Dim lngCodeLn As Long
Dim lngStartLn As Long
Dim lngStartCol As Long
Dim lngEndLn As Long
Dim lngEndCol As Long
Dim strCtrlText As String
Dim codeMod As VBIDE.CodeModule

Private Sub txtBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Application.VBE.ActiveCodePane.GetSelection lngStartLn, lngStartCol,
lngEndLn, lngEndCol
lngCodeLn = lngStartLn
Set codeMod = ActiveWorkbook.VBProject.VBComponents
(Me.Name).CodeModule
strCtrlText = GetEventControlName(codeMod, lngCodeLn)

Set thisCtrl = Me.Controls(strCtrlText)

'manipulate the control

End Sub

Function GetEventControlName(VBCodeMod As VBIDE.CodeModule, lngLn As
Long)
Dim strProcName As String
Dim ProcKind As VBIDE.vbext_ProcKind '0 is Sub or Function
Dim lngUnderscore As Long
Dim strCtrlName As String

strProcName = VBCodeMod.ProcOfLine(lngLn, ProcKind)

'get the first "_" starting from the right and moving to the left
lngUnderscore = InStrRev(strProcName, "_", , vbTextCompare)

'get the text to the left of the "_"
strCtrlName = Left(strProcName, lngUnderscore - 1)

GetEventControlName = strCtrlName

End Function

Best,

Matt- Hide quoted text -

- Show quoted text -


Take note that this solution has not been completely tested, so it may
not be fully functional in its current form.

Matt
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Form Toolbar verses Control Toolbar ub Excel Discussion (Misc queries) 3 July 11th 08 10:57 PM
Add-In Toolbar Control - Removing The Toolbar Question Dreiding Excel Programming 10 October 5th 07 06:39 PM
Using the Control Toolbar Kathy Excel Worksheet Functions 2 January 26th 05 03:23 AM
Using Control Toolbar Kathy Excel Discussion (Misc queries) 2 January 26th 05 01:47 AM
control toolbar Otto Selis Excel Programming 4 February 18th 04 09:14 PM


All times are GMT +1. The time now is 07:01 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"