Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Daten aus Zeile auslesen und in Textfelder
19.11.2018 13:18:51
Andreas
Hallo Excelprofis,
ich komme mal wieder nicht weiter und bitte um eure Hilfe.
Ich habe ein UserForm mit dessen Hilfe ich Werte aus Textboxen in ein Datenblatt eintrage. Die Textboxen werden händisch befüllt. Dieser Teil funktioniert, Dank diese super Forums, schon.
Eine 2. Möglichkeit soll darin bestehen die Daten aus einem bestimmten Blatt, per Combobox-Auswahl, in die Textfelder einzulesen. Ich habe einen Code aus einem anderem Projekt übernommen. Es funktioniert aber nicht und ich weiß nicht was geändert werden muss.
Nachfolgend habe ich mal den gesamten Code eingefügt (zur Übersicht). Was nicht funktioniert _ sind aber die ersten beiden Abschnitte: "

Private Sub CommandButton1_Click()" und "

Private Sub ComboBox_RechnAusw_Change()"
Danke fürs lesen und die Hilfe
mfg, Andreas
Option Explicit
Private wks As Worksheet
Private bolAktion As Boolean 'Merker, dass eine Aktion bereits ausgeführt wird

Private Sub CommandButton1_Click()
Dim wks As Worksheet
Worksheets("EinAusgangsRech").Visible = True
Worksheets("EinAusgangsRech").Activate
If bolAktion = True Then Exit Sub
bolAktion = True
ComboBox_RechnAusw.Clear
Call EinAusblenden
With ComboBox_RechnAusw
.ColumnCount = 2
.ColumnWidths = ";0"
For a = 8 To 200
Select Case a
Case 8 To 200
If wks.Rows(a).RowHeight > 0 Then
.AddItem
.List(.ListCount - 1, 0) = wks.Cells(a, 1) & " - " & wks.Cells(a, 2)
.List(.ListCount - 1, 1) = a
End If
End Select
Next a
End With
bolAktion = False
End Sub

Private Sub ComboBox_RechnAusw_Change()
If ComboBox_RechnAusw  "" Then
a = ComboBox_RechnAusw.Column(1)
With ActiveSheet
TextBoxB_AR.Text = Cells(a, 5).Text
TextBoxDatenAR.Text = Cells(a, 3).Text
TextBoxVorgang.Text = Cells(a, 4).Text
TextBox1.Text = Cells(a, 7).Text
End With
End If
End Sub

Private Sub UserForm_Initialize()
Dim ws As Worksheet
With Me.ComboBox_BuchungsdatumAR
.RowSource = "Buchungsdatum"
ComboBox_BuchungsdatumAR.Value = Date
End With
With Me.ComboBox_DatenAR
.RowSource = "Buchungsdaten"
.ListIndex = -1
End With
With Me.ComboBox_VorgangAR
.RowSource = "Buchungsvorgang"
.ListIndex = -1
End With
End Sub

Private Sub UserForm_Activate()
Me.TextBoxB_AR.Text = "0.00" 'gibt 0,00 aus
Me.TextBoxSummeAR.Text = "0,00"
Me.TextBox1.Text = "0,00"
End Sub

Private Sub CommandButtonAR_Click()
Dim lngzeile  As Long
lngzeile = Cells(5, 1).End(xlDown).Row + 1
Dim iAntwort As Integer
ActiveSheet.Unprotect
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' Abfrage ob Pflichtfelder gefüllt sind
If ComboBox_BuchungsdatumAR.ListIndex = -1 Or TextBoxB_AR.Value = 0 Or ComboBox_DatenAR. _
Text = "" Or ComboBox_VorgangAR.Text = "" Then
MsgBox "Bitte alle Pflichtfelder * füllen!", vbInformation, "Achtung"
TextBoxleerAR.SetFocus
Else
' Abfrage ob Buchungswert ungleich Summenwert
If CDbl(TextBoxB_AR.Value)  CDbl(TextBoxSummeAR.Value) Then
MsgBox "Der Rechnungsbetrag stimmt nicht mit der Summe der Kontobuchnungen überein!",  _
vbInformation, "Achtung"
TextBoxleerAR.SetFocus
Else
'Abfrage ob Buchungswert nicht im plus
If TextBoxB_AR.Value 

Function TrageWerteEin(ByVal lngzeile As Long)
Cells(lngzeile, 1).Value = ComboBox_BuchungsdatumAR.Value
Cells(lngzeile, 5).Value = TextBoxB_AR.Value * 1
Cells(lngzeile, 3).Value = ComboBox_DatenAR.Value
Cells(lngzeile, 4).Value = ComboBox_VorgangAR.Value
Cells(lngzeile, 7).Value = TextBox1.Value * 1
End Function

Private Sub ComboBox_BuchungsdatumAR_Change() 'Datum der Buchung
Dim strJahr As String, wks As Worksheet
Dim iFehler As Integer
On Error GoTo Fehler
ComboBox_BuchungsdatumAR.Value = Format(ComboBox_BuchungsdatumAR.Value, ("dd.mm.yyyy"))
strJahr = Right(ComboBox_BuchungsdatumAR.Value, 4)
iFehler = 1
Set wks = ThisWorkbook.Worksheets("EinnAusg " & strJahr)
wks.Activate
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'gewähltes Blatt sichtbar, aktivieren, Blattschutz aufheben
wks.Visible = True
wks.Activate
wks.Unprotect
'Andere Blätter ausblenden
For Each wks In ThisWorkbook.Worksheets
If wks.Name Like "EinnAusg *" And InStr(wks.Name, strJahr) = 0 Then
wks.Protect
wks.Visible = xlSheetHidden
End If
Next
Resume01:
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 9
Select Case iFehler
Case 1
MsgBox "Blatt ""EinnAusg " & strJahr & """ existiert nicht"
Resume Resume01:
End Select
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Private Sub TextBoxB_AR_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 To 57, 8, 44, 45
Case Else
KeyAscii = 0
MsgBox "Es sind nur Ziffern, Komma und Minus zulässig!", vbInformation, "Hinweis"
End Select
End Sub

Private Sub TextBoxB_AR_AfterUpdate()
If TextBoxB_AR = Empty Then TextBoxB_AR = 0
TextBoxB_AR = Format(CDbl(TextBoxB_AR.Text), "#,##0.00")
End Sub

'##### Summen ######
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
SummeTextboxenAR
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Zeile auslesen und in Textfelder
20.11.2018 10:01:00
Matthias
Moin!
Also auf Grund der Menge des Codes und da nicht alle Codeteile vorhanden sind (die sub einausblenden) wäre es ggf. besser, eine Datei hochzuladen. Dann wäre eine Beschreibung dessen was nicht funktioniert gut (keine oder falsche Anzeige etc.). So kann man jetzt nicht genau sagen woran es liegen kann. Aber für den Anfang mal ein paar Sachen, die am Code geändert werden sollten:
zur Private Sub CommandButton1_Click():
Das mit den select case, kann weg. Du hast ja schon eine SChleife über a durch die Zellen. Außer, du willst bestimmte Zeilen von der Prüfung ausnehmen und das über die Zeilennummer regeln!? So ist es nur unnötiger Code. Danach kommt m.E. der Knackpunkt. Du nutzt in der Schleife die Variable wks für das Blatt. wks hast du aber vorher nie zugwiesen, auf was es referenzieren soll. Da fehlt am Anfang
set wks = Worksheets("EinAusgangsRech")
zu Private Sub ComboBox_RechnAusw_Change():
Da kannst du nicht einfach die Spalte 2 der Combo nutzen. Du brauchst aus der selektierten Zeile in der Combo die 2. Spalte. Sollte jetzt (ungetestet) so aussehen:
If ComboBox_RechnAusw.ListIndex > -1 Then
a = ComboBox_RechnAusw.List(ComboBox_RechnAusw.ListIndex, 1)
Evtl. sollte der Code dann schon laufen.
Einfach mal testen.
VG
Anzeige
AW: Daten aus Zeile auslesen und in Textfelder
20.11.2018 17:27:38
Andreas
Hallo Matthias,
vielen Dank für die Hilfe. Habe versucht deine Tipps umzusetzen, leider bin ich in VBA nicht so fit.
Deswegen ein kurze Erklärung und eine abgespeckte Beispieldatei.
Die Userform auf die es ankommt kann im Blatt "Userform öffnen" gestartet werden.
Über die Userform werden Daten händisch eingetragen und per Comandbutton in ein Blatt z.B. "EinnAusg 2018" eingetragen. Das Blatt "EinnAusg " gibt es für jedes Jahr. In welches die Daten eingetragen werden, wird mithilfe der "ComboBox_BuchungsdatumAR" gesteuert. Die Daten werden in die erste freie Zeile im Zellbereich 8 bis 200 eingetragen.
Dieser Teil funktioniert schon.
Eine 2. Variante soll werden, dass schon gespeicherte Daten aus dem Blatt "EinAusgangsRech" in das UserForm eingelesen werden. Dazu soll über die "ComboBox_RechnAusw" die Zeile ausgewählt werden. Der weitere Vorgang ist dann ja wie bei der ersten Variante.
Ich hoffe ich habe mich verständlich ausgedrückt. Vielen dank fürs lesen und die Hilfe.
https://www.herber.de/bbs/user/125528.xlsm
mfg, Andreas
Anzeige
AW: Daten aus Zeile auslesen und in Textfelder
20.11.2018 19:50:43
Matthias
Moin!
So abgespeckt ist die Version aber nicht. :-) Da ich mit xlsm Dateien nichts anfangen kann, bitte mal als xls speichern und nochmal hochladen. Ansonsten muss ich es erst konvertieren und da hat es vieles zerhauen. Da passt immer was nicht und das ist dann nervig beim programmieren.
Bei der 2. Variante die nicht läuft. In welches Blatt soll es dann zurückgeschrieben werden? In Recherche oder EinAus.
VG
AW: Daten aus Zeile auslesen und in Textfelder
20.11.2018 20:32:48
Andreas
hallo Matthias,
vielen Dank für deine Hilfe. Hier die Datei im xls-Format. Das Blatt in das die Daten zurückgeschrieben werden wird mit Hilfe der "ComboBox_BuchungsdatumAR" festgelegt. Also wenn ein Buchungsdatum aus dem Jahr 2018 gewählt wird, wird das Blatt "EinnAusg 2018" aktiviert.
Der Vorgang in Reihenfolge, wie er sein sollte:
1. "CommandButton1", wechseln zum Blatt "EinAusgangsRech", einlesen der Zeilen 8-200, bei denen in Spalte A ein Wert steht.
2. "ComboBox_RechnAusw", Zeile auswählen, Daten werden in Textboxen eingelesen
3. "ComboBox_BuchungsdatumAR", Blatt wird aktiviert, in das die Daten geschrieben werden. Das geht schon
4. Daten werden eingetragen. Geht schon.
https://www.herber.de/bbs/user/125535.xls
Vielen Dank für deine Mühe.
mfg, Andreas
Anzeige
AW: Daten aus Zeile auslesen und in Textfelder
20.11.2018 21:09:12
Matthias
Moin!
Also habe das mit dem Einlesen mal abgeändert. Der Code sieht nun so aus:
Private Sub CommandButton1_Click()
Dim wks As Worksheet
Dim a As Long
Set wks = Worksheets("EinAusgangsRech")
Label18.Visible = True
ComboBox_RechnAusw.Visible = True
Worksheets("EinAusgangsRech").Visible = True
Worksheets("EinAusgangsRech").Activate
If bolAktion = True Then Exit Sub
bolAktion = True
ComboBox_RechnAusw.Clear
Call EinAusblenden
With ComboBox_RechnAusw
.ColumnCount = 2
.ColumnWidths = ";0"
For a = 8 To 200
If wks.Rows(a).RowHeight > 0 Then
.AddItem
.List(.ListCount - 1, 0) = wks.Cells(a, 1) & " - " & wks.Cells(a, 2)
.List(.ListCount - 1, 1) = a
End If
Next a
End With
bolAktion = False
End Sub
Private Sub ComboBox_RechnAusw_Change()
Dim a As Long
'If ComboBox_RechnAusw  "" Then
'   a = ComboBox_RechnAusw.Column(1)
If ComboBox_RechnAusw.ListIndex > -1 Then
a = ComboBox_RechnAusw.List(ComboBox_RechnAusw.ListIndex, 1)
With ActiveSheet
TextBoxB_AR.Text = Cells(a, 5).Text
Daten.Text = Cells(a, 3).Text
Vorgang.Text = Cells(a, 4).Text
TextBox1.Text = Cells(a, 7).Text
TextBox2.Text = Cells(a, 8).Text
TextBox3.Text = Cells(a, 9).Text
TextBox4.Text = Cells(a, 10).Text
TextBox5.Text = Cells(a, 11).Text
TextBox6.Text = Cells(a, 12).Text
TextBox7.Text = Cells(a, 13).Text
TextBox8.Text = Cells(a, 14).Text
TextBox9.Text = Cells(a, 15).Text
TextBox10.Text = Cells(a, 16).Text
TextBox11.Text = Cells(a, 17).Text
TextBox12.Text = Cells(a, 18).Text
TextBox13.Text = Cells(a, 19).Text
TextBox14.Text = Cells(a, 20).Text
TextBox15.Text = Cells(a, 21).Text
TextBox16.Text = Cells(a, 22).Text
TextBox17.Text = Cells(a, 23).Text
TextBox18.Text = Cells(a, 24).Text
TextBox19.Text = Cells(a, 25).Text
TextBox20.Text = Cells(a, 26).Text
TextBox21.Text = Cells(a, 27).Text
TextBox22.Text = Cells(a, 28).Text
TextBox23.Text = Cells(a, 29).Text
TextBox24.Text = Cells(a, 30).Text
TextBox25.Text = Cells(a, 31).Text
TextBox26.Text = Cells(a, 32).Text
TextBox27.Text = Cells(a, 33).Text
TextBox28.Text = Cells(a, 34).Text
TextBox29.Text = Cells(a, 35).Text
TextBox30.Text = Cells(a, 36).Text
TextBox31.Text = Cells(a, 37).Text
TextBox32.Text = Cells(a, 38).Text
End With
End If
End Sub

Zudem musst du aber mal schauen. In deiner Beispielmappe gibt es nur eine UF BUchung. Im Modul3 gibt es aber noch Bezüge auf BuchungAR und BUchungER.
Also der Punkt 4 hat nicht geklappt. Da weiß ich aber auch nicht, wie du das auslösen wolltest und ob das hier in der Beispielmappe fehlt.
Tausche den Code einfach mal aus und probiere.
Achja, ich habe im Code von ComboBox_RechnAusw_Change() zwei Textboxen umbenannt. Die gab es so auf der UF nicht. Da meintest du vermtl. die Textboxen Daten und Vorgang.
VG
Anzeige
AW: Daten aus Zeile auslesen und in Textfelder
20.11.2018 21:40:55
Andreas
Hallo Matthias,
Vielen Dank für deine Mühe und Hilfe. Ich denke mal das funktioniert, muss es noch ausführlich testen und natürlich die einzelnen Textboxen und Comboboxen anpassen. Das einlesen der Daten funktioniert aber super.
Einen schönen Abend und nochmals Danke für die super Hilfe.
mfg, Andreas

364 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige