Excel VBA wenn Zelle 1 --> anderen Zelleninhalt löschen und neu schreiben?

2 Antworten

Wie sieht dein Makro für den Doppelklick aus?

Da kannst du den Rest gleich mit dazu bauen.

Dieser sieht so aus:



Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

  On Error Resume Next
  With Application
    .Cursor = xlNorthwestArrow
    BooleanCellDoubleClick Target, [Checklist[[Created]]], Cancel
    BooleanCellDoubleClick Target, [Checklist[[Ordered]]], Cancel
    BooleanCellDoubleClick Target, [Checklist[[Cancelled]]], Cancel
    .Cursor = xlDefault
  End With

End Sub
Private Sub BooleanCellDoubleClick(rTarget As Range, rValidRange As Range, Cancel As Boolean)

  On Error Resume Next
  Application.CellDragAndDrop = False
   
  If rTarget.Cells.Count > 1 Then Exit Sub
  If Intersect(rTarget, rValidRange) Is Nothing Then Exit Sub
   
  If Len(rTarget) Then
    rTarget = vbNullString
  Else
    rTarget = 1
   
End If
   
  Cancel = True

End Sub
0
@AndyH135

Das ist ein bisschen von hinten durch die Brust ins Auge. Warum nicht einfach:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column = 12 Then
i = Target.Row

If Cells(i, 12) = "" Then
Cells(i, 12) = 1
Cells(i, 11) = 0.5
Cells(i, 10) = 0.5
Else
Cells(i, 12) = ""
Cells(i, 11) = 1
Cells(i, 10) = 1
End If

End If
End Sub
0
@augsburgchris

Super danke,

gibt es nun noch die Möglichkeit ein Passwortschutz für diese Spalte einzubauen? Sprich sobald ich diese Spalte anklicke soll zuerst eine Abfrage kommen ob ich mir sicher bin was ich mache?

0
@AndyH135

Was jetzt? Ein Passwortschutz (dafür wirst du dir ne Eigene Userform) bauen müssen? Oder einfach nur ein popup "Willst du wirklich?"?

0
@augsburgchris

Ein Popup würde auch reichen. Beim Doppelklick in die jeweilige Zelle aus Spalte L muss eine Sicherheitsabfrage kommen.

0
@AndyH135

Beim hin und beim Wegmachen? Reichlich nervig.

Aber bitte:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column = 12 Then
  If MsgBox("Willst du das wirklich tun?", vbOKCancel) = vbCancel Then
    Exit Sub
  Else
    i = Target.Row
    If Cells(i, 12) = "" Then
      Cells(i, 12) = 1
      Cells(i, 11) = 0.5
      Cells(i, 10) = 0.5
    Else
      Cells(i, 12) = ""
      Cells(i, 11) = 1
      Cells(i, 10) = 1
    End If
  End If
End If

End Sub
1
  For i = 1 To 500
    If Cells(i, 12).Value = 1 Then
      Cells(i, 10).Value = 0.5
      Cells(i, 11).Value = 0.5
    End If
  Next i

Das macht es für die ersten 500 Reihen. Wenn du mehr oder weniger brauchst (Performance) einfach die 500 abändern :)

Was möchtest Du wissen?