Manipulating 150+ checkboxes with a macro in Excel 2000

  • Thread starter Thread starter S. Romano
  • Start date Start date
S

S. Romano

I have a workbook with a few worksheets in it. One of the worksheets
has 160 "Forms" style checkboxes, arranged in rows of 5. The numbering
for the checkboxes is seqential in columns - that is, the first column
has CheckBox1 through CheckBox32, the second one contains CheckBox33
through CheckBox64, etc.

Here is what I'd like to do:

The columns have some relationships - for instance, when the first
column is checked, the 3rd column should also be checked. There
doesn't need to be any cross-checking as it is okay for the user to
override it by manually unchecking the 3rd column.

I am very new at this, and have done a lot of searching of the groups
here, but have not found an answer. I can visualize what needs to be
done: upon checking of the first column's CheckBox, I can add 64 to
the CheckBox number to get the corresponding checkbox in the third
column, then set that value to True. What I am having trouble with is
creating a global event for this, rather than manually coding each
checkbox.

Can someone point me in the right direction?
 
application.Caller will give you the name of the checkbox

Sub GlobalCheckbox_click()
dim chbox as Checkbox
dim chbox2 as Checkbox
dim sName as String, num as String
sName = application.Caller
set chbox = activesheet.Checkboxes(sName)
' next if block not needed if you only assign to checkboxes
' where the activity should happen
if chbox.TopLeftCell.Column = 1 then ' column A
if chbox.Value = xlOn then
' get number in name
if chbox.topLeftCell.row < 10 then
num = right(sname,1)
else
num = left(sName,1)
end if
set chbox2 = activesheet.Checkboxes("Checkbox" _
& clng(num)+64 )
chbox2.Value = xlon
end if
end if
End sub

make adjustments for the actual locations of your checkboxes in terms of
single digit values (less than 10) and column

Only assign the macro to checkboxes which should exhibit this behavior.
consider the code a pseudocode since it hasn't been tested and may contain
typos. Note that application.caller will not be defined if you try to run
the code manually using the run command or call from another routine.
 
Hi Tom -

Thanks for your helpful reply. For some reason, Excel doesn't like
this statement:

Set chbox2 = ActiveSheet.CheckBoxes("Checkbox" & CLng(num) + 64)

....though I can't find anything wrong with it myself. It gives me an
error window with the number "400" on it, and an option to click OK or
Help. Clicking Help does nothing.

Any ideas?

Thanks,
Stephan
 
Hi Tom -

Thanks for your prompt response. I'm having a problem where Excel
spits out an error box that says, simply, "400" in it, with an option
to click OK or Help. Help brings up the Help tool but with no
contents.

This code has been simplified a bit for my testing purposes:

Sub GlobalCheckbox_click()
Dim chbox As CheckBox
Dim chbox2 As CheckBox
Dim sName As String, num As String
sName = Application.Caller
Set chbox = ActiveSheet.CheckBoxes(sName)
If chbox.Value = xlOn Then
num = Right(sName, 3)
Set chbox2 = ActiveSheet.CheckBoxes("Checkbox" & CLng(num) + 64)
chbox2.Value = xlOn
End If
End Sub

The specific line it doesn't like is the "Set chbox2" line - I can't
seem to properly set the value of chbox2, even if I explicitly set it
with a line like:

Set chbox2 = ActiveSheet.CheckBoxes("Checkbox150")
or
Set chbox2 = ActiveSheet.CheckBoxes(sName)

It still gives me the "400" error.

The "chbox" variable sets correctly, and the "num" variable returns
the correct number.

Any ideas?

Thanks,
Stephan
 
If you are working with checkboxes in the first column, are they all
numbered greater then 99

if not, then

num = Right(sName, 3)

would not have a number in it and

clng(num) would fail.
 
Sorry, Tom, should have been more specific. My checkboxes are actually
numbered 300+ for some interesting reason.

I dumped in a whole bunch of Msgbox commands to show me the results of
the variables as they are assigned, and they are all normal.

I'm fairly new to Excel macros but I've done some coding in VB before
and I've done all the testing I can to ensure that my syntax and
variables are all working correctly.

Further developments...

I popped the code into a module vs. putting it into the worksheet
code. The "400" error quit coming up, but now the same line of code is
rejected with:

Run-time error '1004':
Unable to get the CheckBoxes property of the Worksheet class

Is there a way to call the checkboxes property of the worksheet from
the module, instead of the worksheet itself? I tried
Worksheets("SheetName").CheckBoxes in case the ActiveSheet didn't work
for some reason, but that didn't work either.

Thanks for your continuing help with this.

Stephan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top