Deaktivieren von Kontrollkästchen und die entsprechenden Daten in VBA
Ich versuche, das Programm ein VBA-code, deaktivieren Sie alle meine Kontrollkästchen auf einem Arbeitsblatt in Excel und löscht auch die Daten aus der Zelle Links neben dem Kontrollkästchen (es ist ein Datum, das füllt aus einem anderen makro, wenn die checkbox aktiviert ist).
Meine Checkboxen aus der Symbolleiste Formular. Ich kann die Boxen zu deaktivieren, aber sobald ich den code einfügen, löschen Sie das Datum bekomme ich
run-time error '1004' "kann nicht die checkboxes-Eigenschaft des worksheet-Klasse".
Hier ist der code, den ich versuche, mit zu arbeiten:
Sub ClearAllCheckboxes()
Dim Answer As String
Dim MyNote As String
Dim CB As Object
Dim LRange As String
Dim cBox As CheckBox
LName = Application.Caller
Set cBox = ActiveSheet.CheckBoxes(LName)
MyNote = "This will Clear all CheckBoxes Proceed? "
Answer = MsgBox(MyNote, vbQuestion + vbYesNo, "???")
LRange = "F" & CStr(LRow)
If Answer = vbNo Then
Exit Sub
Else
For Each CB In ActiveSheet.CheckBoxes
CB.Value = xlOff
If cBox.Value = 0 Then
ActiveSheet.Range(LRange).Value = Null
End If
Next CB
End If
End Sub
Hier ist der code in die Kontrollkästchen, um das Datum einzufügen und notieren Sie die Informationen, die in einem anderen Arbeitsblatt:
Sub Process_CheckBox()
Dim cBox As CheckBox
Dim LRow As Integer
Dim LColumn As Integer
Dim RRow As Integer
Dim LRange As String
Dim RRange As String
Dim ERange As String
Dim FRange As String
LName = Application.Caller
Set cBox = ActiveSheet.CheckBoxes(LName)
'Find row that checkbox resides in
LRow = cBox.TopLeftCell.Row
LRange = "F" & CStr(LRow)
RRow = cBox.TopLeftCell.Row
RRange = "B" & CStr(RRow)
ERange = "E" & CStr(RRow)
FRange = "F" & CStr(RRow)
'Change date in column B, if checkbox is checked
If cBox.Value > 0 Then
ActiveSheet.Range(LRange).Value = Date
ActiveSheet.Range(RRange).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Log").Select
Range("A" & ActiveSheet.Rows.Count). _
End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Columns("A:A").EntireColumn.AutoFit
Sheets("Daily").Select
ActiveSheet.Range(ERange).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Log").Select
Range("D" & ActiveSheet.Rows.Count). _
End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Daily").Select
ActiveSheet.Range(FRange).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Log").Select
Range("C" & ActiveSheet.Rows.Count). _
End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
'Clear date in column B, if checkbox is unchecked
Else
ActiveSheet.Range(LRange).Value = Null
End If
End Sub
Auch, was den Aufruf dieser Funktion (als @DavidZemens fragt unten, läuft dies verursacht einen Fehler, es sei denn, das Objekt nannte es den gleichen Namen wie eine checkbox)? Und das nicht immer cBox auf FALSE und immer klar das Datum?
Guter Fang auf dem LRow. Ich habe anpassen hinzufügen DIM LRow as Integer, aber immer noch einen Fehler. Ich rufe den code througha Schaltfläche auf dem Arbeitsblatt erstellt durch die Symbolleiste Formulare. Ich bin sehr neu in VBA, so dass ich zog eine Menge von dieser zusammen aus dem code, den ich schrieb, um das Datum einzufügen, wenn die Kontrollkästchen aktiviert sind und entfernen Sie Sie, wenn deaktiviert. Ich will den button, um entfernen Sie alle auf einmal.
Hier der code, den ich für die Checkboxen. Es fügt das Datum und die Datensätze Informationen, die in einem anderen Blatt:
InformationsquelleAutor user2956485 | 2013-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Ihrer Beschreibung, diese sollte den job tun.
Ein paar Punkte:
Me.
wenn sich der code auf das Blatt. z.B.For Each cBox In Me.CheckBoxes
.cBox.TopLeftCell.Row
und.Column
Werte.LName = Application.Caller, Set cBox = ActiveSheet.CheckBoxes(LName)
Set cBox = ActiveSheet.CheckBoxes(Application.Caller)
Msgbox
direkt in dieIf
- Anweisung, wenn Sie nicht mit der Antwort wieder später.Value
Eigenschaft, nur das Objekt, wenn Sie versuchen, und bekommen ist es Wert.as <type>
neben jeder Variablen-Namen, oder die, ohne es dimensioniert werden als Varianten.Next
Aussage (es sei denn, Sie haben einen Haufen in einer Reihe und Sie sehen verwirrend).InformationsquelleAutor usncahill
Wenn Sie Debuggen, würden Sie wahrscheinlich feststellen, dass
LName
hat einen Wert vonError 2023
. Wenn ich Schritt für Schritt durch diesen code mitF8
im debug-Modus, dies ist, was passiert, für mich, die wirft den Fehler in der nächsten ZeileSet cBox = ...
Ich bin unklar, auf was du hier tust oder wie dieses Verfahren genannt wird. Wenn Sie Schritt für Schritt durch, was ist der Wert von
LName
und was tun Sie erwarten, es zu sein?Beachten Sie, dass diese Zeile muss entweder ein string (name) oder eine integer - /index-Wert aus der
CheckBoxes
Sammlung:Wenn Sie sicher, dass der Wert übergeben
Lname
ist kein Fehler Wert UND dass es richtig bezieht sich auf eineCheckBox
auf dieActiveSheet
sollte Ihr code wie erwartet funktioniert.For Each
Schleife.guten Fang. Ich habe übersehen, dass. Überarbeiten wird.
InformationsquelleAutor David Zemens