393 Aufrufe
Gefragt in Tabellenkalkulation von rastermen Mitglied (496 Punkte)

Hallo zusammen,

ich fülle eine größere Tabelle von A2 bis W200  mit Daten -ohne Formeln- aus.

Teilweiße sind auch leere Zellen dazwischen.

Diese Daten kopiere ich dann und füge diese in ein Barcode Programm ein.

Beim Einfügen verschiebt es mir die Daten- wenn Leerzellen - vorhanden nach links.

Füge ich in Excel aber in jede Leerzelle ein minus Zeichen ein - kopiere-  und füge sie dann ein,

funktioniert es einwandfrei.

Nun meine Frage: Kann ich in Excel 2010 über bed. Formatierung oder anderer Möglichkeit ein Minus Zeichen ohne Formel in die Leere Zelle einbringen. Wenn ich dann was eintrage sollte das "Minus" nicht mehr erscheinen. Wenn ich diesen Eintrag wieder lösche sollte das "Minus" wieder erscheinen.

Herzlichen Dank

Gruß Rudolf

6 Antworten

0 Punkte
Beantwortet von
Hallo zusammen,

habe mir über bedingte Formatierung:

über- enthält "ein Leerzeichen" eine farbliche Info dazu erstellt.

Ist für mich auch eine Option um keiner leeren Zelle zu entgehen.

Falls jemand noch eine andere Idee dazu hat lasst es mich wissen.

Danke

Rudolf
+1 Punkt
Beantwortet von

Hallo Rudolf

über Format ist das leider so nicht möglich. Eine leere Zelle ist eine leere Zelle! Du kannst zwar Zellen mit Inhalt so formatieren als wären sie leer, jedoch nicht umgekehrt.
Aber über VBA ist es möglich. Führe vor dem Kopieren einfach dieses Makro aus:
Sub LeerzellenFuellen()
 
 On Error Resume Next
 With Range("A2:W200")
  If .Cells(.Cells.Count) = "" Then .Cells(.Cells.Count) = "-"
  .SpecialCells(xlCellTypeBlanks) = "-"
 End With
 
End Sub

Dadurch werden alle Leerzellen im Bereich mit einem Minus gefüllt.

Falls du darüberhinaus auch willst, dass das Minuszeichen schon kommt, wenn du Inhalt löschst dann gehört der folgende Code in das Tabellenmodul, das deinem Arbeitsblatt entspricht. (z.B. Tabelle1)

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A2:W200")) Is Nothing Then
    If Target.Cells(1) = "" Then
      Application.EnableEvents = False
        Target.Value = "-"
      Application.EnableEvents = True
    End If
  End If
End Sub

Gruß Mr. K.

0 Punkte
Beantwortet von

Hallo Mr. K.

Danke für deine Mühe und Arbeit für die zwei Code. yes

Habe den unteren Code genommen und funktioniert.

Gruß Rudolf

0 Punkte
Beantwortet von rastermen Mitglied (496 Punkte)
Bearbeitet von rastermen
Hallo Mr. K.

Ich habe noch ein Anliegen.

Wie ich gerade festgestellt habe funktioniert die Funktion "Rückgängig" (Strg + Z) nicht  mehr korrekt .

Wenn ich ein Wort in die Leerzeichenzelle eintrage und "Enter" drücke kann ich das wieder "Rückgänig machen.

Wenn schon ein Wort darin steht, ich dieses Lösche dann funktioniert Rückgänig nicht.

Habe eine Sicherung ohne das Makro erstellt und da funktioniert es.

Als Info für Dich wie ich das Makro eingefügt habe:

rechte Maustaste auf Register "Artikel".

"Code anzeigen"

und dann dein Code eingeben.

Was muss geändert werden oder habe ich was falsch gemacht ?

Hoffe das ich mein Anliegen verständlich ausgedrückt habe.

Gruß Rudolf
+1 Punkt
Beantwortet von
Bearbeitet

Hallo Rudolf,

du hast nichts falsch gemacht. Das ist ein bekanntes Problem, dass Rückgängig nicht mehr funktioniert nachdem ein Makro ausgeführt wurde, das Änderungen im Sheet macht. Hier wird nach dem Löschen per VBA-Code ein Minuszeichen eingetragen. Würde Excel für jede per VBA gemachte Änderung ein Rückgängig anlegen, würde sich das erheblich auf die Performance und die Laufzeit auswirken. Deshalb wird Rückgängig deaktiviert.

Du musst dir also überlegen was dir wichtiger ist: Entweder Minuszeichen oder der Rückgängig-Befehl. Beides geht nicht. Oder doch? Lege ein neues Tabellenblatt mit dem Namen "Sicherung" an (Wichtig!) und ersetze mal testweise den Code in Tabelle1 durch diesen hier:

Dim oldTarget As Range
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A2:W200")) Is Nothing Then
    If Target.Cells(1) = "" Then
      Application.EnableEvents = False
        Set oldTarget = Target
        Target.Value = "-"
        Application.OnUndo "Löschen rückgängig", "Tabelle1.RueckgaengigLoeschen"
      Application.EnableEvents = True
    Else
      Sheets("Sicherung").Range(Target.Address).Value = Target.Value
    End If
  End If
  
End Sub
Sub RueckgaengigLoeschen()
  ActiveSheet.Range(oldTarget.Address).Value = Sheets("Sicherung").Range(oldTarget.Address).Value
  Application.OnRepeat "Löschen wiederholen", "Tabelle1.WiederholenLoeschen"
End Sub
Sub WiederholenLoeschen()
  ActiveSheet.Range(oldTarget.Address).Value = ""
End Sub

Wenn du nun einen Wert löschst, wird im Menü Rückgängig wenigstens ein neuer Befehl zum Rückgängig machen angelegt. Wenn du den ausführst wird eine Sub ausgeführt, die aus dem Tabellenblatt Sicherung den alten Wert wiederherzuholt. Bei mir klappt das ganz gut. Wie es sich bei dir verhält bleibt abzuwarten.

Sollte dein Sheet nicht Tabelle1 heißen musst du den Namen im OnUndo- bzw. OnRepaet Befehl enstprechend anpassen.

Gruß Mr. K.

0 Punkte
Beantwortet von rastermen Mitglied (496 Punkte)

Hallo Mr. K.,

hab ausprobiert und funktioniert ! Supi

Danke

Gruß Rudolf

...