On 9 Jun., 16:15, Rod Urand <urand...@gmail.com> wrote: > I have a client who has created a rather large Excel workbook with > checkbox form controls. > > Unfortunately, each form control was not set to have a cell link. > > The client would like to now tabulate the results of the checkboxes > (to determine how many are checked and how many are unchecked). > > Rather than go into each cell and modify the form control property to > then add a cell link, I am looking to automate this process through > the use of a macro. Essentially speaking, the macro will locate each > checkbox in a workbook, modify the control properties, add a cell link > to the cell adjacent to the checkbox.
This should get you started (copy it into the module of the worksheet you want to convert and call it as macro). Option Explicit ' Links all checkboxes of the current workbook with ' the cells they belong to (assuming that the checkbox ' is not a free floating checkbox). Sub CreateCellLinks() Dim i As Integer For i = 1 To Me.Shapes.Count ' Skip any shapes that are no checkboxes. If TypeName(Me.Shapes(i).DrawingObject) = "CheckBox" Then Dim cb As CheckBox Set cb = Me.Shapes(i).DrawingObject ' The following only works if the checkbox is not a floating ' checkbox (it must be placed inside a cell). Debug.Assert cb.Placement <> xlFreeFloating cb.LinkedCell = ColumnLetter(cb.TopLeftCell.Column) & cb.TopLeftCell.Row End If Next End Sub ' Downloaded from http://www.freevbcode.com/ShowCode.asp?ID=9264 Function ColumnLetter(ColumnNumber As Integer) As String ' 'example usage: ' 'Dim temp As Integer 'temp = Sheets(1).Range("B2").End(xlToRight).Column 'MsgBox "The last column of this region is " & _ ' ColumnLetter(temp) ' If ColumnNumber <= 0 Then 'negative column number ColumnLetter = "" ElseIf ColumnNumber > 16384 Then 'column not supported (too big) in Excel 2007 ColumnLetter = "" ElseIf ColumnNumber > 702 Then ' triple letter columns ColumnLetter = _ Chr((Int((ColumnNumber - 1 - 26 - 676) / 676)) Mod 676 + 65) & _ Chr((Int((ColumnNumber - 1 - 26) / 26) Mod 26) + 65) & _ Chr(((ColumnNumber - 1) Mod 26) + 65) ElseIf ColumnNumber > 26 Then ' double letter columns ColumnLetter = Chr(Int((ColumnNumber - 1) / 26) + 64) & _ Chr(((ColumnNumber - 1) Mod 26) + 65) Else ' single letter columns ColumnLetter = Chr(ColumnNumber + 64) End If End Function > A sample worksheet is available but I do not know how to attach it. Me neither :-) Regards, Stuart -- ---------------------------------------------------------------------------------- Some important links for excel users: 1. Follow us on TWITTER for tips tricks and links : http://twitter.com/exceldailytip 2. Join our LinkedIN group @ http://www.linkedin.com/groups?gid=1871310 3. Excel tutorials at http://www.excel-macros.blogspot.com 4. Learn VBA Macros at http://www.quickvba.blogspot.com 5. Excel Tips and Tricks at http://exceldailytip.blogspot.com To post to this group, send email to excel-macros@googlegroups.com <><><><><><><><><><><><><><><><><><><><><><> HELP US GROW !! We reach over 7000 subscribers worldwide and receive many nice notes about the learning and support from the group.Let friends and co-workers know they can subscribe to group at http://groups.google.com/group/excel-macros/subscribe