Delete an OLE Check Box in COde when a deleting a row
I didn't test your code, but when you step through code that works with
OLEObjects, you can get that error.
I'd put a break point above the row that does the work and after the row. Then
RUN (not Step) through the code.
Some other notes:
#1. VBA's syntax is very nice, you could use:
lcCheckBoxToDelete = "CheckBox" _
+ Trim(Str(ActiveSheet.Range("A" + Trim(Str(Target.Row))).Value))
lcCheckBoxToDelete = "CheckBox" & me.cells(target.row,"A").value)
or
lcCheckBoxToDelete = "CheckBox" & me.range("A" & target.row).value)
#2. VBA is forgiving, but it's better to use + to add numbers and & to
concatenate strings. You could get in trouble if the strings look like numbers
and they're added, not concatentated.
#3. Since you're in the worksheet_change event, it's better to use the keyword
Me instead of Activesheet. Me refters to the thing that owns the code. In this
case, it's the worksheet.
#4. You can check for a single/entire row being deleted by:
if target.address = target.cells(1).entirerow.address then
And check for multiple rows
if target.address = target.entirerow.address then
#5. If you know the name of the single checkbox to delete--but not sure if it's
there, you can use:
on error resume next
me.oleobjects(lccheckboxtodelete).delete
on error goto 0
#6. You may want to consider an alternative. Maybe give the user a dedicated
macro that would delete the rows (and checkboxes). Then you don't have to
struggle with the worksheet_event.
#7. In fact, you may want to rethink the checkboxes and use something
else/easier.
(saved from a previous post)
Select the range that would have held the checkboxes.
Format|cells|number tab|custom category
In the "type:" box, put this:
alt-0252;alt-0252;alt-0252;alt-0252
But hit and hold the alt key while you're typing the 0252 from the numeric
keypad.
It should look something like this when you're done.
ü;ü;ü;ü
(umlaut over the lower case u separated by semicolons)
And format that range of cells as Wingdings (make it as large as you want)
Now, no matter what you type (spacebar, x, anyoldtextatall), you'll see a check
mark.
Hit the delete key on the keyboard to clear the cell.
If you have to use that "checkmark" in later formulas:
=if(a1="","no checkmark","Yes checkmark")
Or you can filter by blanks and non-blanks.
BG Lad wrote:
Functionality: To Remove an OLE check box in the row when the user deletes a
row.
This is my current attempt. I get an error message "Can't enter break mode
at this time".
The CheckBox is not linked, it is for visual and print only. There are
remmed statements from previous attempts. Any ideas on this one?
'** Snipped ******************
Dim rowcount As Long
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Err_Worksheet_Change
Dim llCanDeleteTheBox As Boolean
Dim lcCheckBoxToDelete As String
'Application.EnableEvents = False 'should be part of Change macro
If IsEmpty(rowcount) Then
'* First time through ... *'
Else
If ActiveSheet.UsedRange.Rows.Count = rowcount - 1 Then
'* A row was deleted *'
lcCheckBoxToDelete = "CheckBox" + Trim(Str(ActiveSheet.Range("A"
+ Trim(Str(Target.Row))).Value))
For Each Obj In ThisWorkbook.ActiveSheet.OLEObjects
'* Find the Relative Checkbox *'
Stop
If Obj.Name = lcCheckBoxToDelete Then
Stop
'Obj.Delete
llCanDeleteTheBox = True
'lcCheckBoxToDelete = Obj.Name
'ThisWorkbook.ActiveSheet.OLEObjects(Obj.Name).Del ete
Exit For
End If
Next
End If
End If
If llCanDeleteTheBox Then
Stop
'* Delete the Check Box *'
ThisWorkbook.ActiveSheet.OLEObjects(lcCheckBoxToDe lete).Delete
End If
rowcount = ActiveSheet.UsedRange.Rows.Count
'** End of SNIPPED *****************
--
B Good Lad
--
Dave Peterson
|