ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Type MisMatch with Set Statement (https://www.excelbanter.com/excel-programming/405466-type-mismatch-set-statement.html)

RyanH

Type MisMatch with Set Statement
 
I am getting a 'Type Mismatch Error' when I use the Set Statement in a
control of my Userform. I want to change the Enabled and BackColor
properties of certain Controls on the Userform when the Illumination ComboBox
equals certain values. I have an Array of all the Controls Names. Why am I
getting this error?

Private Sub cboIllumination_Change()

Set Fluorescents = Controls(Array("tbxBallasts", "cboBallasts",
"cboLamps1", _
"cboLamps2", "tbxLamps1",
"tbxLamps2", _
"cboOrientation1", "cboOrientation2"))

Set LEDs = Controls(Array("tbxTransformers", "cboSpacing", "tbxLEDs"))

Select Case cboIllumination

Case "Single Row T12 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "Single Row T8 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "LEDs"
For Each Control In LEDs
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmFluorescents.Controls
Control.Enabled = False
Next Control
For Each Control In Fluorescents
Control.BackColor = vbButtonFace
Next Control

End Select

'disables Estimate command button if no illumination, and visa versa
If cboIllumination = "No Illumination" Then
cmbEstimate.Enabled = False
Else
cmbEstimate.Enabled = True
End If

End Sub

Thanks in Advance,
Ryan

Jim Thomlinson

Type MisMatch with Set Statement
 
First off start declaring your variables and add option explicit to your
code. It will make situations like this a lot easier to deal with. Your code
is doing a lot of on the fly declarations using inappropriate names. For
example you are on the fly declaring a variant called Control which is a bad
idea since Control is a reserved word. Check out this link for info on
declaring variables...

http://www.cpearson.com/excel/variables.htm

Now on to your specific problem... Controls is a collection object that
holds all of the controls contained in a specific object. For example code
something like this will work on your userform (me gives you a reference to
the userform)...

dim ctl as control

for each ctl in me.controls
msgbox ctl.name
next ctl

Your line of code however
Controls(Array("tbxBallasts", "cboBallasts", "cboLamps1", ...
is looking in an unspecified collection of controls for an array of text
values. What you really want is to create your own collection of controls to
loop through... to that end try something like this...

dim colFlorescent as collection

set colFlorescent = new collection
with colFlorescent
..add tbxBallasts
..add cboBallasts
end with

now you can do something like
dim ctl as control

for each ctl in colFlorescent
msgbox ctl.name
next ctl

--
HTH...

Jim Thomlinson


"RyanH" wrote:

I am getting a 'Type Mismatch Error' when I use the Set Statement in a
control of my Userform. I want to change the Enabled and BackColor
properties of certain Controls on the Userform when the Illumination ComboBox
equals certain values. I have an Array of all the Controls Names. Why am I
getting this error?

Private Sub cboIllumination_Change()

Set Fluorescents = Controls(Array("tbxBallasts", "cboBallasts",
"cboLamps1", _
"cboLamps2", "tbxLamps1",
"tbxLamps2", _
"cboOrientation1", "cboOrientation2"))

Set LEDs = Controls(Array("tbxTransformers", "cboSpacing", "tbxLEDs"))

Select Case cboIllumination

Case "Single Row T12 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "Single Row T8 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "LEDs"
For Each Control In LEDs
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmFluorescents.Controls
Control.Enabled = False
Next Control
For Each Control In Fluorescents
Control.BackColor = vbButtonFace
Next Control

End Select

'disables Estimate command button if no illumination, and visa versa
If cboIllumination = "No Illumination" Then
cmbEstimate.Enabled = False
Else
cmbEstimate.Enabled = True
End If

End Sub

Thanks in Advance,
Ryan


RyanH

Type MisMatch with Set Statement
 
Thanks for getting back with Jim. That link was definitely helpful. For
some reason I am getting an error "Object variable or with block variable not
set" on the line indicated below. Am I getting this error because I am
referencing the collections multiple times under the same Event?

I'm not sure if this matters or not, but colFluorescents, colLEDs, and
cboIllumination are all in different frames, does this matter?

Private Sub cboIllumination_Change()

Dim colFluorescents As Collection
Dim colLEDs As Collection
Dim ctrl As Control

Set colFluorescents = New Collection

With colFluorescents
.Add tbxBallasts
.Add cboBallasts
.Add cboLamps1
.Add cboLamps2
.Add tbxLamps1
.Add tbxLamps2
.Add cboOrientation1
.Add cboOrientation2
End With

Set LEDs = New Collection

With colLEDs
.Add tbxTransformers '<==ERROR ERROR
.Add lblTransformers
.Add cboSpacing
.Add lblSpacing
.Add tbxLEDs
.Add lblLEDs
End With

Select Case cboIllumination

Case "Single Row T12 HO Fluorescent"

'enables all fluorescent controls
For Each ctrl In colFluorescents
ctrl.Enabled = True
Next ctrl
For Each ctrl In colFluorescents
ctrl.BackColor = vbWindowBackground
Next ctrl

'diables all LED controls
For Each ctrl In colLEDs
ctrl.Enabled = False
Next ctrl
For Each ctrl In colLEDs
ctrl.BackColor = vbButtonFace
Next ctrl

Case "Single Row T8 HO Fluorescent"

'enables all fluorescent controls
For Each ctrl In colFluorescents
ctrl.Enabled = True
Next ctrl
For Each ctrl In colFluorescents
ctrl.BackColor = vbWindowBackground
Next ctrl

'diables all LED controls
For Each ctrl In colLEDs
ctrl.Enabled = False
Next ctrl
For Each ctrl In colLEDs
ctrl.BackColor = vbButtonFace
Next ctrl

Case "LEDs"

'disables all fluorescent controls
For Each ctrl In colFluorescents
ctrl.Enabled = False
Next ctrl
For Each ctrl In colFluorescents
ctrl.BackColor = vbButtonFace
Next ctrl

'enables all LED controls
For Each ctrl In colLEDs
ctrl.Enabled = True
Next ctrl
For Each ctrl In colLEDs
ctrl.BackColor = vbWindowBackground
Next ctrl

End Select

'disables Estimate command button if no illumination, and visa versa
If cboIllumination = "No Illumination" Then
cmbEstimate.Enabled = False
Else
cmbEstimate.Enabled = True
End If

End Sub

"Jim Thomlinson" wrote:

First off start declaring your variables and add option explicit to your
code. It will make situations like this a lot easier to deal with. Your code
is doing a lot of on the fly declarations using inappropriate names. For
example you are on the fly declaring a variant called Control which is a bad
idea since Control is a reserved word. Check out this link for info on
declaring variables...

http://www.cpearson.com/excel/variables.htm

Now on to your specific problem... Controls is a collection object that
holds all of the controls contained in a specific object. For example code
something like this will work on your userform (me gives you a reference to
the userform)...

dim ctl as control

for each ctl in me.controls
msgbox ctl.name
next ctl

Your line of code however
Controls(Array("tbxBallasts", "cboBallasts", "cboLamps1", ...
is looking in an unspecified collection of controls for an array of text
values. What you really want is to create your own collection of controls to
loop through... to that end try something like this...

dim colFlorescent as collection

set colFlorescent = new collection
with colFlorescent
.add tbxBallasts
.add cboBallasts
end with

now you can do something like
dim ctl as control

for each ctl in colFlorescent
msgbox ctl.name
next ctl

--
HTH...

Jim Thomlinson


"RyanH" wrote:

I am getting a 'Type Mismatch Error' when I use the Set Statement in a
control of my Userform. I want to change the Enabled and BackColor
properties of certain Controls on the Userform when the Illumination ComboBox
equals certain values. I have an Array of all the Controls Names. Why am I
getting this error?

Private Sub cboIllumination_Change()

Set Fluorescents = Controls(Array("tbxBallasts", "cboBallasts",
"cboLamps1", _
"cboLamps2", "tbxLamps1",
"tbxLamps2", _
"cboOrientation1", "cboOrientation2"))

Set LEDs = Controls(Array("tbxTransformers", "cboSpacing", "tbxLEDs"))

Select Case cboIllumination

Case "Single Row T12 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "Single Row T8 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "LEDs"
For Each Control In LEDs
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmFluorescents.Controls
Control.Enabled = False
Next Control
For Each Control In Fluorescents
Control.BackColor = vbButtonFace
Next Control

End Select

'disables Estimate command button if no illumination, and visa versa
If cboIllumination = "No Illumination" Then
cmbEstimate.Enabled = False
Else
cmbEstimate.Enabled = True
End If

End Sub

Thanks in Advance,
Ryan


RyanH

Type MisMatch with Set Statement
 
Oops, there was a mispelling! But I am getting a different type of error.
No matter what Case I select the Next ctrl lines are highlighted and the
Error states "Object Required", why is this?

Thanks for the help so far,
Ryan


"RyanH" wrote:

Thanks for getting back with Jim. That link was definitely helpful. For
some reason I am getting an error "Object variable or with block variable not
set" on the line indicated below. Am I getting this error because I am
referencing the collections multiple times under the same Event?

I'm not sure if this matters or not, but colFluorescents, colLEDs, and
cboIllumination are all in different frames, does this matter?

Private Sub cboIllumination_Change()

Dim colFluorescents As Collection
Dim colLEDs As Collection
Dim ctrl As Control

Set colFluorescents = New Collection

With colFluorescents
.Add tbxBallasts
.Add cboBallasts
.Add cboLamps1
.Add cboLamps2
.Add tbxLamps1
.Add tbxLamps2
.Add cboOrientation1
.Add cboOrientation2
End With

Set LEDs = New Collection

With colLEDs
.Add tbxTransformers '<==ERROR ERROR
.Add lblTransformers
.Add cboSpacing
.Add lblSpacing
.Add tbxLEDs
.Add lblLEDs
End With

Select Case cboIllumination

Case "Single Row T12 HO Fluorescent"

'enables all fluorescent controls
For Each ctrl In colFluorescents
ctrl.Enabled = True
Next ctrl
For Each ctrl In colFluorescents
ctrl.BackColor = vbWindowBackground
Next ctrl

'diables all LED controls
For Each ctrl In colLEDs
ctrl.Enabled = False
Next ctrl
For Each ctrl In colLEDs
ctrl.BackColor = vbButtonFace
Next ctrl

Case "Single Row T8 HO Fluorescent"

'enables all fluorescent controls
For Each ctrl In colFluorescents
ctrl.Enabled = True
Next ctrl
For Each ctrl In colFluorescents
ctrl.BackColor = vbWindowBackground
Next ctrl

'diables all LED controls
For Each ctrl In colLEDs
ctrl.Enabled = False
Next ctrl
For Each ctrl In colLEDs
ctrl.BackColor = vbButtonFace
Next ctrl

Case "LEDs"

'disables all fluorescent controls
For Each ctrl In colFluorescents
ctrl.Enabled = False
Next ctrl
For Each ctrl In colFluorescents
ctrl.BackColor = vbButtonFace
Next ctrl

'enables all LED controls
For Each ctrl In colLEDs
ctrl.Enabled = True
Next ctrl
For Each ctrl In colLEDs
ctrl.BackColor = vbWindowBackground
Next ctrl

End Select

'disables Estimate command button if no illumination, and visa versa
If cboIllumination = "No Illumination" Then
cmbEstimate.Enabled = False
Else
cmbEstimate.Enabled = True
End If

End Sub

"Jim Thomlinson" wrote:

First off start declaring your variables and add option explicit to your
code. It will make situations like this a lot easier to deal with. Your code
is doing a lot of on the fly declarations using inappropriate names. For
example you are on the fly declaring a variant called Control which is a bad
idea since Control is a reserved word. Check out this link for info on
declaring variables...

http://www.cpearson.com/excel/variables.htm

Now on to your specific problem... Controls is a collection object that
holds all of the controls contained in a specific object. For example code
something like this will work on your userform (me gives you a reference to
the userform)...

dim ctl as control

for each ctl in me.controls
msgbox ctl.name
next ctl

Your line of code however
Controls(Array("tbxBallasts", "cboBallasts", "cboLamps1", ...
is looking in an unspecified collection of controls for an array of text
values. What you really want is to create your own collection of controls to
loop through... to that end try something like this...

dim colFlorescent as collection

set colFlorescent = new collection
with colFlorescent
.add tbxBallasts
.add cboBallasts
end with

now you can do something like
dim ctl as control

for each ctl in colFlorescent
msgbox ctl.name
next ctl

--
HTH...

Jim Thomlinson


"RyanH" wrote:

I am getting a 'Type Mismatch Error' when I use the Set Statement in a
control of my Userform. I want to change the Enabled and BackColor
properties of certain Controls on the Userform when the Illumination ComboBox
equals certain values. I have an Array of all the Controls Names. Why am I
getting this error?

Private Sub cboIllumination_Change()

Set Fluorescents = Controls(Array("tbxBallasts", "cboBallasts",
"cboLamps1", _
"cboLamps2", "tbxLamps1",
"tbxLamps2", _
"cboOrientation1", "cboOrientation2"))

Set LEDs = Controls(Array("tbxTransformers", "cboSpacing", "tbxLEDs"))

Select Case cboIllumination

Case "Single Row T12 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "Single Row T8 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "LEDs"
For Each Control In LEDs
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmFluorescents.Controls
Control.Enabled = False
Next Control
For Each Control In Fluorescents
Control.BackColor = vbButtonFace
Next Control

End Select

'disables Estimate command button if no illumination, and visa versa
If cboIllumination = "No Illumination" Then
cmbEstimate.Enabled = False
Else
cmbEstimate.Enabled = True
End If

End Sub

Thanks in Advance,
Ryan


RyanH

Type MisMatch with Set Statement
 
Once agian, a mispelling! I should examine the code more carefully before
rushing to another question. Everything is running beautifully!! Thanks for
the help!!

Ryan

"RyanH" wrote:

Oops, there was a mispelling! But I am getting a different type of error.
No matter what Case I select the Next ctrl lines are highlighted and the
Error states "Object Required", why is this?

Thanks for the help so far,
Ryan


"RyanH" wrote:

Thanks for getting back with Jim. That link was definitely helpful. For
some reason I am getting an error "Object variable or with block variable not
set" on the line indicated below. Am I getting this error because I am
referencing the collections multiple times under the same Event?

I'm not sure if this matters or not, but colFluorescents, colLEDs, and
cboIllumination are all in different frames, does this matter?

Private Sub cboIllumination_Change()

Dim colFluorescents As Collection
Dim colLEDs As Collection
Dim ctrl As Control

Set colFluorescents = New Collection

With colFluorescents
.Add tbxBallasts
.Add cboBallasts
.Add cboLamps1
.Add cboLamps2
.Add tbxLamps1
.Add tbxLamps2
.Add cboOrientation1
.Add cboOrientation2
End With

Set LEDs = New Collection

With colLEDs
.Add tbxTransformers '<==ERROR ERROR
.Add lblTransformers
.Add cboSpacing
.Add lblSpacing
.Add tbxLEDs
.Add lblLEDs
End With

Select Case cboIllumination

Case "Single Row T12 HO Fluorescent"

'enables all fluorescent controls
For Each ctrl In colFluorescents
ctrl.Enabled = True
Next ctrl
For Each ctrl In colFluorescents
ctrl.BackColor = vbWindowBackground
Next ctrl

'diables all LED controls
For Each ctrl In colLEDs
ctrl.Enabled = False
Next ctrl
For Each ctrl In colLEDs
ctrl.BackColor = vbButtonFace
Next ctrl

Case "Single Row T8 HO Fluorescent"

'enables all fluorescent controls
For Each ctrl In colFluorescents
ctrl.Enabled = True
Next ctrl
For Each ctrl In colFluorescents
ctrl.BackColor = vbWindowBackground
Next ctrl

'diables all LED controls
For Each ctrl In colLEDs
ctrl.Enabled = False
Next ctrl
For Each ctrl In colLEDs
ctrl.BackColor = vbButtonFace
Next ctrl

Case "LEDs"

'disables all fluorescent controls
For Each ctrl In colFluorescents
ctrl.Enabled = False
Next ctrl
For Each ctrl In colFluorescents
ctrl.BackColor = vbButtonFace
Next ctrl

'enables all LED controls
For Each ctrl In colLEDs
ctrl.Enabled = True
Next ctrl
For Each ctrl In colLEDs
ctrl.BackColor = vbWindowBackground
Next ctrl

End Select

'disables Estimate command button if no illumination, and visa versa
If cboIllumination = "No Illumination" Then
cmbEstimate.Enabled = False
Else
cmbEstimate.Enabled = True
End If

End Sub

"Jim Thomlinson" wrote:

First off start declaring your variables and add option explicit to your
code. It will make situations like this a lot easier to deal with. Your code
is doing a lot of on the fly declarations using inappropriate names. For
example you are on the fly declaring a variant called Control which is a bad
idea since Control is a reserved word. Check out this link for info on
declaring variables...

http://www.cpearson.com/excel/variables.htm

Now on to your specific problem... Controls is a collection object that
holds all of the controls contained in a specific object. For example code
something like this will work on your userform (me gives you a reference to
the userform)...

dim ctl as control

for each ctl in me.controls
msgbox ctl.name
next ctl

Your line of code however
Controls(Array("tbxBallasts", "cboBallasts", "cboLamps1", ...
is looking in an unspecified collection of controls for an array of text
values. What you really want is to create your own collection of controls to
loop through... to that end try something like this...

dim colFlorescent as collection

set colFlorescent = new collection
with colFlorescent
.add tbxBallasts
.add cboBallasts
end with

now you can do something like
dim ctl as control

for each ctl in colFlorescent
msgbox ctl.name
next ctl

--
HTH...

Jim Thomlinson


"RyanH" wrote:

I am getting a 'Type Mismatch Error' when I use the Set Statement in a
control of my Userform. I want to change the Enabled and BackColor
properties of certain Controls on the Userform when the Illumination ComboBox
equals certain values. I have an Array of all the Controls Names. Why am I
getting this error?

Private Sub cboIllumination_Change()

Set Fluorescents = Controls(Array("tbxBallasts", "cboBallasts",
"cboLamps1", _
"cboLamps2", "tbxLamps1",
"tbxLamps2", _
"cboOrientation1", "cboOrientation2"))

Set LEDs = Controls(Array("tbxTransformers", "cboSpacing", "tbxLEDs"))

Select Case cboIllumination

Case "Single Row T12 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "Single Row T8 HO Fluorescent"
For Each Control In Fluorescents
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmLEDs.Controls
Control.Enabled = False
Next Control
For Each Control In LEDs
Control.BackColor = vbButtonFace
Next Control

Case "LEDs"
For Each Control In LEDs
Control.BackColor = vbWindowBackground
Next Control
For Each Control In frmFluorescents.Controls
Control.Enabled = False
Next Control
For Each Control In Fluorescents
Control.BackColor = vbButtonFace
Next Control

End Select

'disables Estimate command button if no illumination, and visa versa
If cboIllumination = "No Illumination" Then
cmbEstimate.Enabled = False
Else
cmbEstimate.Enabled = True
End If

End Sub

Thanks in Advance,
Ryan



All times are GMT +1. The time now is 06:17 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com