Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Letztes Zeichen loeschen

Betrifft: Letztes Zeichen loeschen von: Alex
Geschrieben am: 11.08.2008 10:21:00

Hallo @ all!

Ich habe mal wieder ein kleines Problem:
Ich scanne Barcodes in eins Excel-Vorlage. Dabei moechte ich immer die letzte Stelle dieses Barcodes (immer 0) loeschen und dies als Formel oder was auch immer in die Vorlage einbauen.

Weiss jemand wie ich das loesen kann?

Vielen Dank schon mal

Alex

  

Betrifft: =LINKS(A1;LÄNGE(A1)-1) oT von: backowe
Geschrieben am: 11.08.2008 10:23:32




  

Betrifft: AW: =LINKS(A1;LÄNGE(A1)-1) oT von: Alex
Geschrieben am: 11.08.2008 11:07:02

Hallo,
an diese Formel habe ich auch bereits gedacht, allerdings benoetige ich hierfuer eine Hilfsspalte!

Gibt es auch einen anderen Weg diese direkt beim Scannen zu loeschen?

Danke

Alex


  

Betrifft: Gibt es schon! von: backowe
Geschrieben am: 11.08.2008 11:14:00

Hi,

die Info, daß Du keine Hilfsspalte möchtest, hätte eigentlich in Dein Erstposting gehört! ;o)

VBA-Code:
Sub LetzesZeichenLoeschen()
Dim zelle As Range
For Each zelle In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
  zelle = Left(zelle, Len(zelle) - 1)
Next
End Sub
Code eingefügt mit Syntaxhighlighter 4.15


Gruß Jürgen


  

Betrifft: AW: Gibt es schon! von: Alex
Geschrieben am: 11.08.2008 11:34:52

Hi!

Ja hab ich leider vergessen=)
Aber dein Code funktioniert nicht, es kommt die Meldung: Object variable or with block object not set

Ne Ahnung woran es liegen koennte?
Und noch eine Frage: wird die letzte Ziffer jetzt direkt beim Einscannen geloescht?

Vielen Dank schon mal

Alex


  

Betrifft: Hast Du den Bereich auf .. von: Backowe
Geschrieben am: 11.08.2008 12:07:36

Hi Alex,

... Deine Bedürfnisse angepaßt. Mir sagt die Fehlermeldung nichts. Ich habe den Code auf eine Zahl angepaßt.

VBA-Code:
Sub LetzeZahlLoeschen()
Dim Zelle As Range
For Each Zelle In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
  If IsNumeric(Right(Zelle, 1)) Then _
    Zelle = Left(Zelle, Len(Zelle) - 1)
Next
End Sub
Code eingefügt mit Syntaxhighlighter 4.15


Gruß Jürgen


  

Betrifft: AW: Hast Du den Bereich auf .. von: Alex
Geschrieben am: 11.08.2008 12:37:48

Hallo
Danke auch dein Code funktioniert nun, nur wie gesagt moechte ich das in eine Vorlage einfuegen, die immer wieder verwendet wird und deshalb sollte das direkt beim einscannen geloescht werden!?!?

Nochmals Danke fuer deine Muehe

Alex


  

Betrifft: AW: =LINKS(A1;LÄNGE(A1)-1) oT von: David
Geschrieben am: 11.08.2008 12:28:45

Soweit ich das vom Barcode-Scannen kenne, wird der Code per "SendKey" übertragen, beendet von einer Zeilenschaltung (Enter).
Somit könntest du das Worksheet-Change-Ereignis nutzen.

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo Worksheet_Change_Error

If Target.Column = 1 Then
Application.EnableEvents = False
    Target = Left(Target, Len(Target) - 1)
End If

Worksheet_Change_Exit:
    On Error GoTo 0
    Application.EnableEvents = True
    Exit Sub

Worksheet_Change_Error:
    MsgBox Err.Description
    GoTo Worksheet_Change_Exit

End Sub



Damit wird, wenn du in Spalte A (=1) eine Eingabe machst, diese Eingabe sofort darauf um eine Stelle von rechts gekürzt.

Den Bereich, der überwacht wird, musst du natürlich auf deine Bedürfnisse ändern.
Und Achtung! Nach einem Scan-Durchlauf solltest du die gesamte Spalte irgendwie kopieren und mit Werten einfügen, denn sobald du in einer Zelle der betreffenden Spalte eine nachträgliche Änderung ausführst, wird das Makro wieder gestartet und streicht dir wieder eine Stelle!
Vielleicht kann man das noch irgendwie abfangen, wüsste jedoch momentan nicht, wie.

Rückmeldung wäre nett.

Gruß

David

PS: Vielen Dank übrigens an Tobias, der mir geholfen hat, meine Idee in ein funktionierendes (!) Makro umzusetzen.
https://www.herber.de/forum/messages/1000794.html


  

Betrifft: AW: =LINKS(A1;LÄNGE(A1)-1) oT von: Alex
Geschrieben am: 11.08.2008 12:35:27

Hey Vielen Dank das funktioniert so, allerdings habe ich nicht verstanden was du meinst mit die Spalte kopieren?
Kann man dass auch eingrenzen, dass z.b das ganze nur fuer B4:B34 gilt?

Nochmals Danke fuer deine Loesung, hat mir sehr geholfen

Gruss Alex


  

Betrifft: So! von: Backowe
Geschrieben am: 11.08.2008 12:46:38

Hi,

If Not Intersect(Target, Range("B4:B34")) Is Nothing And Target.Count = 1 Then ...

Gruß Jürgen


  

Betrifft: AW: So! von: Alex
Geschrieben am: 11.08.2008 13:07:40

Vielen Dank So funktioniert es wirklich =)

Habt mir sehr geholfen!

Gruss Alex


  

Betrifft: AW: So! von: Alex
Geschrieben am: 11.08.2008 13:30:55

HeyHey!
Vielen Dank So funktioniert das ganze wirklich!

Gruss Alex


  

Betrifft: AW: So! von: Alex
Geschrieben am: 11.08.2008 14:00:43

Hi ich habe noch eine Frage;

Wenn ich jetzt nicht nur die Spalte B habe sondern auch noch D fuege ich doch nochmal den selben Code ein nur eben mit D richtig?

Muss ich den irgendwie anders bezeichnen bzw was muss ich noch aendern?

Nochmals Danke

Alex


  

Betrifft: AW: So! von: David
Geschrieben am: 11.08.2008 14:06:57

Das Worksheet_Change-Ereignis kann es nur einmal geben, deswegen jeglichen weiteren Code innerhalb des Sub...End Sub.

Ich denke mal, du kannst die beiden Range-Werte mit AND kombinieren. Das kann sicher einer der wahren VBA-Experten hier beantworten.

Gruß

David


  

Betrifft: Union von: Backowe
Geschrieben am: 11.08.2008 14:21:03

Hi Alex,

If Not Intersect(Target, Union(Range("B4:B34"), Range("D4:D34"))) Is Nothing And Target.Count = 1 Then ...

Gruß Jürgen


  

Betrifft: AW: Union von: Alex
Geschrieben am: 11.08.2008 15:06:57

Dankeschoen!
Funktioniert perfekt


  

Betrifft: AW: =LINKS(A1;LÄNGE(A1)-1) oT von: David
Geschrieben am: 11.08.2008 13:09:35

...allerdings habe ich nicht verstanden was du meinst mit die Spalte kopieren?

Das Makro wird gestartet, sobald sich in der definierten Range ein Wert ändert. Angenommen du scannst deine Barcodes in die Spalte A. Dabei wird dann für jeden Barcode das letzte Zeichen abgeschnitten. Wenn du mit dem Scannen fertig bist und aus was auch immer für Gründen in einen der Barcodes zur Bearbeitung gehst und dort etwas ändert, wird das Makro natürlich auch wieder gestartet und schneidet dir NOCH eine Stelle ab.
Deswegen meinte ich, dass du nach dem Scannen die eingescannten Werte vor einer eventuellen Bearbeitung erst mal "sichern" musst, damit diese unverändert bleiben.

Gruß

David.


 

Beiträge aus den Excel-Beispielen zum Thema "Letztes Zeichen loeschen"