Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Spezial Formatierung
#1
Servus Beinander,

Ich bastle schon den ganzen Tag an einem Problem mit einer Formatierung und habe dazu leider keine Lösung gefunden evtl gibts auch keine.
Folgendes: aus meiner Materialwirtschaft bekomme ich Daten wie folgt ausgegeben"##.##.####" z.B. "01.01.0010".
jetzt würde ich gerne ein Feld definieren welches aus meiner faulen Eingabe "1.1.10" bzw "2.5.200" automatisch "01.01.0010" bzw "02.05.0200" macht.
Kennt da jemand eine Lösung.

Hab mich auch an VBA versucht da kenne ich mich leider zuwenig aus.  Zerlegen und Zusammenbau haut schon hin, aber wie ich die zahlen zwischendurch ändern soll... keine Ahnung. 
Code:
'Testtabelle

Sub StringZerlegen()
Dim PosIn As String
Dim vArray As Variant
Dim PosOut1 As Integer

PosIn = Range("a1").Value
vArray = Split(PosIn, ".")

For PosOut1 = 0 To UBound(vArray)
Debug.Print vArray(PosOut1)
Next PosOut1

vArray = Join(vArray, ".")
Debug.Print vArray

Range("a2").Value = vArray
Range("a3").Value = PosOut1

End Sub

evtl hat ja jemand einen tipp für mich. Wie ich mein Problem lösen kann.

Hier noch die Anonymisierte Tabelle um die es geht.
Die Eingabe der Nummer erfolgt unter LV-Position


Angehängte Dateien
.xlsx   RB-Vorlage-Ano.xlsx (Größe: 43,76 KB / Downloads: 3)
Antworten Top
#2
Hi,

bau das mal im Tabellen-Modul ein (quick und vor allem dirty, da auf die Schnelle):

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim PosIn As String
    Dim vArray As Variant
    Dim PosOut1 As Integer

    If Target.Column <> 1 Then Exit Sub
    On Error Resume Next
   
    PosIn = Target.Value
    vArray = Split(PosIn, ".")
   
    For PosOut1 = 0 To UBound(vArray) - 1
        vArray(PosOut1) = String(2 - Len(vArray(PosOut1)), "0") & vArray(PosOut1)
        Debug.Print vArray(PosOut1)
    Next PosOut1
   
    vArray(UBound(vArray)) = String(4 - Len(vArray(UBound(vArray))), "0") & vArray(UBound(vArray))
    Debug.Print vArray(UBound(vArray))
   
    vArray = Join(vArray, ".")
    Debug.Print vArray
    Target.Value = vArray

End Sub

Funktioniert nur mit dem Format, wie du es vorgegeben hast "##.##.####". Alle Zellen, wo du das eingeben willst, bitte als "Text" formatieren, sonst hast du dauern Datumsangaben,
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
[-] Folgende(r) 1 Nutzer sagt Danke an LuckyJoe für diesen Beitrag:
  • Waldkotz
Antworten Top
#3
Hi, Danke für die schnelle Hilfe,

im Prinzip funktioniert das. Habe jetzt noch das Problem dass ich zu doof bin die Bereiche zu definieren.
Die Funktion soll für die bereiche  "A24:A29" und "K24:K29" funktionieren.

Und gibt es die Möglichkeit das Event nicht 'Worksheet_SelectionChange' sondern (ich glaub das heißt) 'onExit' auszulösen?
Ich hab es mal in der 'Worksheet_Change' probiert, da spielt dann aber alles verrückt nach der ersten Eingabe.
Antworten Top
#4
Hi,

baue den folgenden Code mal im Modul "DieseArbeitsmappe" ein (und lösche das andere Modul):

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim LVP As Range
    Dim Zelle As Range
    Dim PosIn As String
    Dim vArray As Variant
    Dim PosOut1 As Integer
   
    Set LVP = Union(Range("A24:A29"), Range("K24:K29"))
   
    For Each Zelle In LVP
   
        If Zelle <> "" Then
            PosIn = Zelle.Value
            vArray = Split(PosIn, ".")

            For PosOut1 = 0 To UBound(vArray) - 1
                vArray(PosOut1) = String(2 - Len(vArray(PosOut1)), "0") & vArray(PosOut1)
                Debug.Print vArray(PosOut1)
            Next PosOut1

            vArray(UBound(vArray)) = String(4 - Len(vArray(UBound(vArray))), "0") & vArray(UBound(vArray))
            Debug.Print vArray(UBound(vArray))

            vArray = Join(vArray, ".")
            Debug.Print vArray
            Zelle.Value = vArray
        End If
   
    Next
   
    Set LVP = Nothing

End Sub


Damit werden deine Bereiche beim Speichern aktualisiert,

ABER GANZ WICHTIG:

1. Löse vorher mal die Zell-Verbindungen von K24:L24 bis K29-L29 auf. Lies dir in beliebigen Foren mal durch, was Helfer von solchen Zellverbindungen halten, insbesondere, wenn damit "gearbeitet" werden soll.

2. Nimm die Datenprüfung der erwähnten Bereiche raus, sonst kannst du das ja nicht in deinem "Kurzformat" eingeben.

Ich selber würde die Eingabe noch etwas anders vornehmen, nämlich statt des Punktes durch ein "-". Das hätte den Vorteil, dass du deine Eingabe komplett über die numerische Tastatur vornehmen kannst (sofern du eine hast).
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste