shadi1978
00giovedì 22 dicembre 2016 16:22
Ciao a tutti,
Ho un form con 3 pulsanti:
2 generano elenchi filtrando un datebase
il 3° oltre a recuperare dati dal datebase, mi inserisce una checkbox sul foglio X con il seguente codice:
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=7.94117647058824, Top:=15, Width:=105, _
Height:=21.1764705882353).Select
ora se lancio di nuovo il form, avrò sul foglio X la checkbox che elimino così, nel caso non vorrei che mi apparisse sul foglio:
ActiveSheet.Shapes.Range(Array("CheckBox1")).Select
Selection.Delete
(PS. finora sono gli unici codici che sono riuscito a recuperare, uno genera un ActiveX, l'altro elimina una Shape. Se non erro sono oggetti diversi ma per ora il codice così funziona)
IL PROBLEMA E' CHE SE CLIKKO UN QUALSIASI DEI 3 PULSANTI E LA CHECKBOX NON ESISTE IL CODICE VA IN ERRORE XK NON TROVA NULLA
ps: il fatto di sapere o no se é stato creato il controllo dipende dalle scelte dell'utente.
Quello che vorrei è cercare di creare un ciclo IF che mi determini se esiste la checkbox e nel caso la cancella o se non esiste che mi esca dall'errore. Ho provato la seguente soluzione:
Dim SELEZ As CheckBox
On Error Resume Next
Set SELEZ = Controls("CheckBox1")
If Err Then
Err.Clear
Else
ActiveSheet.Shapes.Range(Array("CheckBox1")).Select
Selection.Delete
End If
ma mi dice Sub o Function indefinita su Controls
come posso risolvere?
Grazie
shadi1978
00giovedì 22 dicembre 2016 16:35
ho risolto eliminando la variabile e il set, e scritto come segue fa il suo lavoro
On Error Resume Next
If Err Then
Err.Clear
Else
ActiveSheet.Shapes.Range(Array("CheckBox1")).Select
Selection.Delete
End If
Ora avendo usato On Error se nel codice esistono altri errori me li segnala ancora oppure no?
Ossia rischio di scrivere un codice e non avere più la certezza che sia a posto perchè non posso verificare più l'esistenza di eventuali errori??
grazie
alfrimpa
00giovedì 22 dicembre 2016 17:27
Ciao shadi
Ti propongo questa macro
vb
Sub b()
Dim obtchkbox As OLEObject
Dim sh As Worksheet
Set sh = ActiveSheet
For Each obtchkbox In sh.OLEObjects
If TypeName(obtchkbox.Object) = "CheckBox" And obtchkbox.Name = "CheckBox1" Then
obtchkbox.Delete
End If
Next
End Sub
che cerca nel foglio attivo una checkbox denominata "CheckBox1" e se la trova la cancella.