gpchicago08
asked on
EXCEL: Array and combobox questions
Here is my code that works (mostly)
Here are my questions:
This line works great if the Sh.Name is in the array
If Application.Match(Sh.Name, arPayPeriods, 0) Then
How do I get it to NOT error when Sh.Name is NOT in the array?
What event do I use to grab the selected item text out of the combobox?
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim arPayPeriods() As String
Dim parsedPP(23) As Variant
Dim count As Integer
Dim i As Integer
count = 0
arPayPeriods = Split("Jan-1-15,Jan-16-31,Feb-1-15,Feb-16-28,Mar-1-15,Mar-16-31,Apr-1-15,Apr-16-30,May-1-15,May-16-31,Jun-1-15,Jun-16-30,Jul-1-15,Jul-16-31,Aug-1-15,Aug-16-31,Sep-1-15,Sep-16-30,Oct-1-15,Oct-16-31,Nov-1-15,Nov-16-30,Dec-1-15,Dec-16-31", ",", -1, vbBinaryCompare)
If Application.Match(Sh.Name, arPayPeriods, 0) Then
With Sh.OLEObjects("cboSelectPP").Object
.Clear
For i = LBound(arPayPeriods) To UBound(arPayPeriods)
If Not Sh.Name = arPayPeriods(i) Then
.AddItem arPayPeriods(i)
parsedPP(count) = arPayPeriods(i)
count = count + 1
End If
Next i
End With
End If
End Sub
Here are my questions:
This line works great if the Sh.Name is in the array
If Application.Match(Sh.Name,
How do I get it to NOT error when Sh.Name is NOT in the array?
What event do I use to grab the selected item text out of the combobox?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
MsgBox ComboBox1.Text
dim e as integer, stoR
stoR = 0
on error resume next
stoR = Application.Match(Sh.Name, arPayPeriods, 0)
e = err.number
on error goto 0
if e = 0 then 'this will replace the line> If Application.Match(Sh.Name, arPayPeriods, 0) Then
else 'this is new - capturing error
msgbox sh.name & " not found!"
end if
@Shanan2012,
application.match will return an error value if the lookup item is not found, not raise a runtime error, so err.number will still be 0.
application.match will return an error value if the lookup item is not found, not raise a runtime error, so err.number will still be 0.
Thanks Rorya on clearing that. Gpchicago08, please ignore my solution!
ASKER
@rorya
Thanks! That worked perfectly.
Please forgive me as I'm not fully versed in VBA, can you give a quick example or explanation of the flag variable??
Thanks! That worked perfectly.
Please forgive me as I'm not fully versed in VBA, can you give a quick example or explanation of the flag variable??
Sure. At the top of a normal module add something like
Then your change event needs to start with
and your code to reset/populate the list needs:
at the end so that, even though the change event is still called when you reset the list, the code simply exits immediately and returns to the code that populates the control.
Does that make sense?
Public bSkipEvents as Boolean
Then your change event needs to start with
If bSkipEvents Then Exit Sub
and your code to reset/populate the list needs:
bSkipEvents = True
at the top of it and thenbSkipEvents = False
at the end so that, even though the change event is still called when you reset the list, the code simply exits immediately and returns to the code that populates the control.
Does that make sense?
ASKER
Perfect
Here's the code I'm using for the second part of my question - the _Click event.
I'm getting and Object Required error for line 4.
Here's the code I'm using for the second part of my question - the _Click event.
I'm getting and Object Required error for line 4.
Private Sub cboSelectPP_Click()
MsgBox cboSelectPP.Text
Application.ScreenUpdating = False
Activeworksheet.Range("F16:F41").Value = Worksheets(cboSelectPP.Text).Range("F16:F41").Value
Application.ScreenUpdating = True
End Sub
What is the value of cboSelectPP.Text?
ASKER
Text "Jan-1-15"
I'm assuming I would need the CodeName (Sheet6) of the worksheet?
I'm assuming I would need the CodeName (Sheet6) of the worksheet?
Try it again. When the error happens at line 4 type Ctrl+g to view the Immediate Window and type cboSelectPP.Text = "Sheet6" and then press F5. Does it work?
ASKER
No. Doesn't work. Still get the same error.
I'm surprised. Maybe there's something else going on but are you aware that you can have your combobox contain more that one column? Here's an example where it is set up to have 2 columns but only the first column visible. If it's not too much trouble you could try this with your sheet names.
Dim MyArray(2, 1) As String
MyArray(0, 0) = "Sheet1"
MyArray(0, 1) = "Test"
MyArray(1, 0) = "Sheet2"
MyArray(1, 1) = "Test2"
MyArray(2, 0) = "Sheet3"
MyArray(2, 1) = "Test3"
With cboSelectPP
.ColumnCount = 2
.ColumnWidths = "80;0"
.List = MyArray
End With
MsgBox cboSelectPP.List(0, 1)
'or
'cboSelectPP.List(cboSelectPP.ListIndex, 1)
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks again rorya!!! Simple mistake on my part! It works!