Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: TextBox Werte in Array einlesen

TextBox Werte in Array einlesen
18.01.2018 14:32:13
Peter
Hallo liebe Foristen,
ich habe einen Code gefunden und angepasst, der als Text gespeichert Zahlen in verschiedene Formate umwandelt. Um das ganze benutzerfreundlicher zu gestalten, habe ich mir eine UserForm mit Combo- und TextBoxen gebaut. Mittels der ComboBoxen können verscheidene Formate, wie "Standard, Zahl, Datum etc." ausgewählt werden. In die TextBoxen sollen die Nummer der Spalten, getrennt mit einem Kommata, eingetragen werden.
Hier mein Code:

Dim  LetzteZeile,i, s As Long
Dim Spalten
Spalten = Array("UserForm1.TextBox3.Value") ' Das Problem!
For s = 0 To UBound(Spalten) - 1
LetzteZeile = Cells(Rows.Count, Spalten(s)).End(xlUp).Row
For i = 3 To LetzteZeile
With Cells(i, Spalten(s))
If .Value  "" Then
.Value = CDbl(.Value)
Select Case UserForm1.ComboBox1.Value
Case "General"
.NumberFormat = "General"
Case "Number"
.NumberFormat = "#,##0.00"
Case "Number"
.NumberFormat = "0"
Case "Currency"
.NumberFormat = "#,##0.00;[Red]-#,##0.00"
Case "Time "
.NumberFormat = "hh:mm:ss"
Case "Date"
.NumberFormat = "dd/mm/yyyy"
End Select
End If
End With
Next
Next

Mein Problem:
Mein Code funktioniert nur, wenn ich die Spalten direkt in das Array im Code eintrage. Allerdings möchte ich, dass die Werte aus der TextBox übernommen werden. Die Auswahl der Formate über die ComboBoxen funktioniert.
Bitte um Eure Hilfe!
Grüße
Peter
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: TextBox Werte in Array einlesen
18.01.2018 14:38:49
Rudi
Hallo,
Spalten = Split(UserForm1.TextBox3.Value,",")
Gruß
Rudi
AW: TextBox Werte in Array einlesen
18.01.2018 15:43:14
Peter
Hallo Rudi,
die Variante habe ich auch schon probiert, allerdings erhalte ich dann in der folgenden Zeile die Fehlermeldung: "Laufzeitfehler 1004 - Anwendungs- oder objektdefinierter Fehler".

LetzteZeile = Cells(Rows.Count, Spalten(s)).End(xlUp).Row

Grüße Peter
Anzeige
AW: TextBox Werte in Array einlesen
18.01.2018 15:59:21
Daniel
Hi
1. mit der SPLIT-Funktion bekommst du Texte.
Auch wenn die Teiltexte nur aus Ziffern bestehen, sind es Texte und keine Zahlen.
2. wenn du bei Cells als 2. Parameter (Spalte) einen Text eingibst, so interpretiert VBA das als Spaltenbuchstaben und eine Spalte mit dem Spaltenbuchstaben "1" gibt es nicht.
Dein Code würde laufen, wenn du statt der Spaltennummer den Spaltenbuchstaben eingibst ("A,B,C").
wenn du Spaltennummern eingibst ("1,2,3"), müsstest du diese erst in Zahlen wandeln:
LetzteZeile = Cells(Rows.count, CLng(Spalten(s))).End(xlup).Row
mit folgendem Code kannst du beides verwenden, auch gemischt ("A,2,C,4")
LetzteZeile = Cells(Rows.count, IIF(IsNumeric(Spalten(s)),CLng(Spalten(s)),Spalten(s))).End(xlup).Row
Gruß Daniel
Anzeige
AW: TextBox Werte in Array einlesen
19.01.2018 14:28:13
Peter
Hallo Daniel,
danke für deinen Tipp. Der Code läuft bei angabe der Spaltenbuchstaben sauber durch. Ich möchte gerne die Version mit beiden Varianten (Nummern und Buchstaben) verwenden. Allerdings erhalte ich bei der Codezeile

.Value = CDbl(.Value)
einen Fehler.
Grüße Peter
Anzeige
AW: TextBox Werte in Array einlesen
19.01.2018 16:59:46
Daniel
Hi
dann solltest du mal prüfen, ob du die Spalten auch richtig angegeben hast.
der Fehler dritt auf, wenn in der angesprochenen Zelle ein Text steht oder ("" ist auch ein Text)
außerdem, warum arbeitest du so umständlich?
die Schleife über die Zeilen kannst du dir sparen.
gib einfach der ganzen Spalte die gleiche Formatierung, auch in den leeren Zellen.
mit DATEN - DATENTOOLS - TEXT IN SPALTEN kannst du die Umwandlung von Text in Zahl für den ganzen Zellbereich einer Spalte in einem Schritt machen.
einfach ausführen und die Einstellungen so wählen, dass keine neuen Spalten entstehen.
für die Umsetzung im Makro einfach mal den Recorder mit laufen lassen.
Beachte dass du Zahlenformat (Komma als Dezimalzeichen) und Datumsformat explizit angeben musst.
machst du keine Vorgaben, werden im Makro die amerikanischen Formate verwendet.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

TextBox Werte in Array einlesen


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Erstelle eine UserForm mit einer ComboBox und einer TextBox. In der TextBox gibst du die Spaltennummern oder Buchstaben ein, getrennt durch Kommas.

  2. VBA-Code anpassen: Verwende den folgenden Code, um die Werte aus der TextBox in ein Array einzulesen:

    Dim LetzteZeile As Long, i As Long
    Dim Spalten() As String
    Spalten = Split(UserForm1.TextBox3.Value, ",")
  3. Letzte Zeile ermitteln: Ändere die Zeile zur Ermittlung der letzten Zeile wie folgt, um sowohl Spaltennummern als auch -buchstaben zu unterstützen:

    LetzteZeile = Cells(Rows.Count, IIf(IsNumeric(Spalten(s)), CLng(Spalten(s)), Spalten(s))).End(xlUp).Row
  4. Formatierung anwenden: Nutze einen Select Case-Block, um das gewählte Format aus der ComboBox anzuwenden. Achte darauf, dass der Code nur für nicht-leere Zellen ausgeführt wird.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 1004: Dieser Fehler tritt auf, wenn du versuchst, auf eine Zelle mit einer ungültigen Spaltennummer zuzugreifen. Stelle sicher, dass die Eingaben in der TextBox korrekt sind und dass du sowohl Zahlen als auch Buchstaben verwendest.

  • Fehler: .Value = CDbl(.Value): Dieser Fehler tritt auf, wenn in der Zelle ein Text oder leerer Inhalt steht. Überprüfe die Inhalte der Zellen, bevor du versuchst, sie in Zahlen umzuwandeln.


Alternative Methoden

Eine einfache Methode zur Umwandlung von Text in Zahlen ist die Verwendung der Funktion „Text in Spalten“ in Excel. Gehe zu Daten > Datentools > Text in Spalten und folge den Anweisungen. Dies kann eine schnelle Lösung sein, um die Formatierung für ganze Spalten anzuwenden, ohne VBA zu verwenden.


Praktische Beispiele

Hier ist ein Beispiel für den Code, der die Eingaben aus der TextBox verarbeitet:

Dim LetzteZeile As Long, i As Long
Dim Spalten() As String
Spalten = Split(UserForm1.TextBox3.Value, ",")

For s = LBound(Spalten) To UBound(Spalten)
    LetzteZeile = Cells(Rows.Count, IIf(IsNumeric(Spalten(s)), CLng(Spalten(s)), Spalten(s))).End(xlUp).Row
    For i = 1 To LetzteZeile
        If Not IsEmpty(Cells(i, IIf(IsNumeric(Spalten(s)), CLng(Spalten(s)), Spalten(s)))) Then
            Cells(i, IIf(IsNumeric(Spalten(s)), CLng(Spalten(s)), Spalten(s))).Value = CDbl(Cells(i, IIf(IsNumeric(Spalten(s)), CLng(Spalten(s)), Spalten(s))).Value)
        End If
    Next i
Next s

Tipps für Profis

  • Verwendung von Variablen: Nutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler in deinem Code zu vermeiden.

  • Code optimieren: Überlege, die Schleifen zu reduzieren und direkt die ganze Spalte zu formatieren, um die Ausführungsgeschwindigkeit zu erhöhen.

  • Zahlenformat anpassen: Achte darauf, dass du die richtigen Zahlenformate für verschiedene Regionen angibst, besonders wenn du mit internationalen Benutzern arbeitest.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur gültige Spalten eingegeben werden?
Du kannst eine Validierung in der TextBox einfügen, die überprüft, ob die Eingaben nur aus Zahlen oder Buchstaben bestehen.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen. Achte darauf, dass du die richtigen Sicherheitseinstellungen für Makros hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige