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

einzelne Zellen aus Dropdowndatensatz übertragen

einzelne Zellen aus Dropdowndatensatz übertragen
08.12.2014 19:17:30
Rudi
Hallo zusammen,
wie so oft liegt dem aktiven Einstieg in Forum dieser Art eine aktuell persönlich scheinbar unüberwindbare Herausforderung zu Grunde. So auch bei mir ;-)
"... Mist ich schaffe es einfach nicht!!!"
Bei mir liegt folgendes Problem vor:
Ich erstelle eine Excel-Datei, die aus (verkürzt gesagt) 3 Tabellenblättern besteht:
Blatt 1 (Eingabe) Datensatz in einer Zeile / 32 Spalten
Blatt 2 (Berechnung) 74 Ergebnisfelder verteilt auf Zellen kreuz und quer (teils verdeckt) auf diesem Blatt
Blatt 3 (Archiv) pro Berechnung wird ein Datensatz abgelegt - in einer Zeile / 74 Spalten (die Werte der Ergebniszellen)
Die Eingabe nehme ich aktuell mittels "Maske" aus dem Entwicklertool vor. Das tut's bislang ausreichend, wobei die Grenze der mit der Standardmaske erfassbaren Felder erreicht ist.
Die Berechnung funktioniert im dafür vorgesehenen Blatt gut und ist stabil.
Auf dem Blatt Berechnung habe ich nun mittels vba auch Buttons implementiert, die dafür sorgen, dass bei Klick die 74 Ergebnisdaten des Blattes Berechnung im Blatt Archiv in der nächsten freien Zeile gespeichert werden.
Ein weiterer Button auf dem Blatt Berechnung sorgt dafür, dass sich ein Fenster öffnet und ein Dropdown-Menü erscheint. Hier kann man die Einträge von 3 der 74 Spalten des Archivs sehen (u.a. Zeitpunkt der Archivierung des Datensatzes - da man ja nur einen Satz speichern kann, ist diese Angabe eineindeutig).
Nun meine Idee:
Man wählt im Dropdown-Menü einen Datensatz aus. Mittels des eineindeutigen Eintrags "Archivierungszeitpunkt" sollen die (32) relevanten Zellen des ausgewählten Datensatzes in die dafür vorgesehenen Felder der Eingabemaske kopiert/übertragen werden.
Nun die Herausforderung:
Als Einsteiger VBA habe ich die Schritte bisher mühsam aber erfolgreich bewältigen können. Für den beschriebenen letzten Schritt des zurückladens von archivierten Daten habe ich mir in den letzten Tagen aber die Zähne ausgebissen.
Hat jemand von Euch eine spontane Idee?
Möglicherweise habe ich trotz aller Mühe noch keine ausreichende Beschreibung des Problems vorgenommen. Zusätzliche Infos liefere ich gerne!
Vielen Dank vorab für Eure Unterstützung!

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

Betreff
Datum
Anwender
Anzeige
AW: einzelne Zellen aus Dropdowndatensatz übertragen
09.12.2014 07:44:55
fcs
Hallo Rudi,
ivh nehme an, dass in
..., dass sich ein Fenster öffnet und ein Dropdown-Menü erscheint.
"ein Fenster " = eine Userform ist.
Auf dem Userform legst du für die 32 relevanten Spalten jeweils ein Steuerelement an - im einfachsten Fall Textboxen, aber auch z.B. Checkboxen für Ja/Nein oder WAHR/FALSCH Werte in den Zellen im Berechnungsblatt sind möglich.
Die Zeile des Datensatzes kannst du über die ListIndex-Nr. der Combobox (wenn die Daten in der Combobox in der gleichen Reihenfolge wie im Archiv angezeigt werden) oder via Suche nach dem Archivierungszeitpunkt ermitteln.
In einer For-Next-Schleife werden dann die Spalten in der Zeile abgearbeitet und die relevanten Daten in die entsprechenden Steuerelemente übernommen
Nachfolgend ein Beispiel-Makro für eine Combobox in einem Userform.
Gruß
Franz
Private Sub ComboBox1_Change()
'Combobox zur Auswahl des Datensatzes
Dim Zeile As Long, Spalte As Long
Dim wksArchiv As Worksheet
With Me.ComboBox1
If .ListIndex = -1 Then Exit Sub
Zeile = .ListIndex + 2 '2 ggf. anpassen, wenn 1. Datenzeile nicht in Zeile 2 -  _
Listindex beginnt in Zählung bei 0
End With
Set wksArchiv = ActiveWorkbook.Worksheets("Archiv")
With wksArchiv
For Spalte = 1 To 74
Select Case Spalte
Case 1:     Me.TextBox1 = .Cells(Zeile, Spalte).Text 'Archivierungszeitpunkt
Case 2:     Me.TextBox2 = .Cells(Zeile, Spalte).Text 'Wert 1
Case 3:     Me.TextBox3 = .Cells(Zeile, Spalte).Text 'Wert 2
Case 6:     Me.TextBox4 = .Cells(Zeile, Spalte).Text 'Wert 6
Case 7:     Me.CheckBox1 = .Cells(Zeile, Spalte).Value = "Ja" 'Ja/Nein in  _
Spalte
Case 8:     Me.CheckBox2 = .Cells(Zeile, Spalte).Value 'WAHR/FALSCH in Spalte
'usw.
Case Else
'do nothing
End Select
Next
End With
End Sub

Anzeige
AW: einzelne Zellen aus Dropdowndatensatz übertr.
09.12.2014 09:23:51
Rudi
Hallo Franz,
vielen herzlichen Dank für Deinen Lösungsvorschlag!
Du hattest recht, es handelt sich bei dem Fenster um eine UserForm.
Ich bin gerade dabei, Deine Lösung einzubauen und zu testen. Dabei stoße ich aber noch auf ein (Verständnis-)Problem.
Verstehe ich es richtig, dass in Deiner Lösung resultierend aus dem ausgewählten Dropdown-Eintrag die relevanten Zellen (im Code noch abschließend von mir zuzuweisen) der Zeile des Datensatzes im Archiv selektiert wird?
Was geschieht dann? Wie weise ich den Inhalt der relevanten Zellen den Zielzellen im Arbeitsblatt "Eingabe" zu?
Zum besseren Verständnis habe ich mal den kompletten Code meiner aktuellen Userform beigefügt:
Private Sub Combobox1_Change()
Dim Zeile As Long, Spalte As Long
Dim wksArchiv As Worksheet
With Me.ComboBox1
If .ListIndex = -1 Then Exit Sub
Zeile = .ListIndex + 2 '2 ggf. anpassen, wenn 1. Datenzeile nicht in Zeile 2 -  _
Listindex beginnt in Zählung bei 0
End With
Set wksArchiv = ActiveWorkbook.Worksheets("Archiv")
With wksArchiv
For Spalte = 1 To 74
Select Case Spalte
Case 1:     Me.TextBox1 = .Cells(Zeile, Spalte).Text 'Archivierungszeitpunkt
Case 2:     Me.TextBox2 = .Cells(Zeile, Spalte).Text 'Wert 1
Case 3:     Me.TextBox3 = .Cells(Zeile, Spalte).Text 'Wert 2
Case 6:     Me.TextBox4 = .Cells(Zeile, Spalte).Text 'Wert 6
Case 7:     Me.CheckBox1 = .Cells(Zeile, Spalte).Value = "Ja" 'Ja/Nein in  _
Spalte
Case 8:     Me.CheckBox2 = .Cells(Zeile, Spalte).Value 'WAHR/FALSCH in Spalte  _
usw.
Case Else                   'do nothing
End Select
Next
End With
End Sub
Private Sub UserForm_Initialize()
x = Sheets("Archiv").UsedRange.Rows.Count
For i = 2 To x
Archivdropdown.AddItem Sheets("Archiv").Cells(i, 7) & vbTab & vbTab & Sheets("Archiv"). _
Cells(i, 29) & vbTab & vbTab & Sheets("Archiv").Cells(i, 2)
Next
End Sub
Private Sub Beenden_Click()
Unload Me
End Sub
Sub Checkandsavebutton_Click()
If Archivdropdown = "" Then
MsgBox "Bitte Auswahl im Dropdown-Menü treffen!", vbInformation
Else
Y = Sheets("Eingabe").UsedRange.Rows.Count
Y = Y + 2
End If
temp = Split(Archivdropdown, vbTab)                                                      _
'Aufsplitten des Drop-Downeintrags
Eingabe = temp(4)

Zur Info:
Für die Archivierung von Berechnungen hatte ich eine Zuweisung wie folgt vorgenommen:
Sub Speichern()
Dim wksSource As Worksheet
Dim wksTarget As Worksheet
Dim lastLineTarget As Long
Set wksTarget = ThisWorkbook.Sheets("Archiv")
With wksTarget
lastLineTarget = .Cells(wksTarget.Rows.Count, 1).End(xlUp).Row     'letzte Zeile suchen
End With
Set wksSource = ThisWorkbook.Sheets("Berechnung")
wksTarget.Cells(lastLineTarget + 1, 1) = wksSource.Cells(1, 12) 'Sachverhalt
wksTarget.Cells(lastLineTarget + 1, 2) = wksSource.Cells(5, 12) 'Datum u. Uhrzeit heute ( _
Zeitpunkt der Erfassung des Vorfalls)
wksTarget.Cells(lastLineTarget + 1, 3) = wksSource.Cells(1, 14) 'Kz Sachverhalt
wksTarget.Cells(lastLineTarget + 1, 4) = wksSource.Cells(2, 14) 'Anrede Partner 1
wksTarget.Cells(lastLineTarget + 1, 5) = wksSource.Cells(3, 14) 'Zusatz Partner 1
wksTarget.Cells(lastLineTarget + 1, 6) = wksSource.Cells(4, 14) 'Vorname Partner 1
'usw...
End Sub
Vielen Dank vorab für die Unterstützung!
Herzliche Grüße
Rudi

Anzeige
AW: einzelne Zellen aus Dropdowndatensatz übertr.
09.12.2014 11:12:00
fcs
Hallo Rudi,
bisher bin ich davon ausgegangen, dass du die Informationen aus dem Archiv in Steuerelemente im Userform anzeigen möchtest.
Wenn du Archiv-Daten ins Eingabeblatt eintragen möchtest, dann sieht es etwa wie folgt aus. D.h. links vom Gleichheitszeichen steht die Zelle des Eingabeblatts, rechts davon die Zelle im Archivblatt.
ggf. ist es auch besser, das Eintragen der Werte nicht direkt an die Änderung der Auswahl in der Combobox zu koppeln, sondern hierfür eine separate Schaltfläche einzubauen.
Gruß
Franz
Private Sub Combobox1_Change()
Dim Zeile As Long
Dim wksArchiv As Worksheet
Dim wksEin As Worksheet
With Me.ComboBox1
If .ListIndex = -1 Then Exit Sub
Zeile = .ListIndex + 2 '2 ggf. anpassen, wenn 1. Datenzeile nicht in Zeile 2 - _
Listindex beginnt in Zählung bei 0
End With
Set wksArchiv = ActiveWorkbook.Worksheets("Archiv")
Set wksEin = ActiveWorkbook.Worksheets("Eingabe")
With wksArchiv
wksEin.Cells(2, 1).Value = .Cells(Zeile, 1).Value 'Archivierungszeitpunkt
wksEin.Cells(2, 2).Value = .Cells(Zeile, 2).Value 'Wert 1
wksEin.Cells(2, 3).Value = .Cells(Zeile, 3).Value 'Wert 2
wksEin.Cells(2, 4).Value = .Cells(Zeile, 6).Value 'Wert 6
wksEin.Cells(2, 5).Value = .Cells(Zeile, 7).Value
wksEin.Cells(2, 6).Value = .Cells(Zeile, 8).Value
End With
End Sub

Anzeige
AW: einzelne Zellen aus Dropdowndatensatz übertr.
09.12.2014 14:46:43
Rudi
Tschaka...
Mensch Franz, das funzt ja - sensationell!!!
Vielen vielen Dank!
Bin gerade beim finetuning, evt. kannst Du mir da auch nochmal helfen:

Private Sub Archivdropdown_Change()
Dim Zeile As Long
Dim wksArchiv As Worksheet
Dim wksEingabe As Worksheet
Dim lastLineTarget As Long
With Me.Archivdropdown
If .ListIndex = -1 Then Exit Sub
Zeile = .ListIndex + 2 '2 ggf. anpassen, wenn 1. Datenzeile nicht in Zeile 2 -  _
Listindex beginnt in Zählung bei 0
End With
Set wksArchiv = ActiveWorkbook.Worksheets("Archiv")
Set wksEingabe = ActiveWorkbook.Worksheets("Eingabe")
With wksEingabe
lastLineTarget = .Cells(wksEingabe.Rows.Count, 1).End(xlUp).Row     'letzte Zeile  _
suchen
End With
With wksArchiv
wksEingabe.Cells(lastLineTarget, 1).Value = .Cells(Zeile, 3).Value 'Kz Sachverhalt
wksEingabe.Cells(lastLineTarget, 2).Value = .Cells(Zeile, 4).Value 'Anrede Partner 1
wksEingabe.Cells(lastLineTarget, 3).Value = .Cells(Zeile, 6).Value 'Vorname Partner 1
wksEingabe.Cells(lastLineTarget, 4).Value = .Cells(Zeile, 7).Value 'Name Partner 1
wksEingabe.Cells(lastLineTarget, 5).Value = .Cells(Zeile, 8).Value 'Straße
wksEingabe.Cells(lastLineTarget, 6).Value = .Cells(Zeile, 9).Value 'PLZ
wksEingabe.Cells(lastLineTarget, 7).Value = .Cells(Zeile, 10).Value 'Wohnort
wksEingabe.Cells(lastLineTarget, 8).Value = .Cells(Zeile, 11).Value 'Anrede Partner 2
wksEingabe.Cells(lastLineTarget, 9).Value = .Cells(Zeile, 13).Value 'Vorname Partner  _
2
wksEingabe.Cells(lastLineTarget, 10).Value = .Cells(Zeile, 14).Value 'Name Partner 2
wksEingabe.Cells(lastLineTarget, 11).Value = .Cells(Zeile, 20).Value 'Name SB
wksEingabe.Cells(lastLineTarget, 12).Value = .Cells(Zeile, 21).Value 'Straße SB
wksEingabe.Cells(lastLineTarget, 13).Value = .Cells(Zeile, 22).Value 'PLZ SB
wksEingabe.Cells(lastLineTarget, 14).Value = .Cells(Zeile, 23).Value 'Ort SB
wksEingabe.Cells(lastLineTarget, 15).Value = .Cells(Zeile, 15).Value 'Schreiben vom
wksEingabe.Cells(lastLineTarget, 16).Value = .Cells(Zeile, 16).Value 'Eingang  _
Schreiben am
wksEingabe.Cells(lastLineTarget, 17).Value = .Cells(Zeile, 17).Value 'Aktenzeichen
wksEingabe.Cells(lastLineTarget, 18).Value = .Cells(Zeile, 24).Value 'Kurzname FA
'usw...
End With
End Sub
Private Sub UserForm_Initialize()
x = Sheets("Archiv").UsedRange.Rows.Count
For i = 2 To x
Archivdropdown.AddItem Sheets("Archiv").Cells(i, 7) & vbTab & vbTab & Sheets("Archiv"). _
Cells(i, 29) & vbTab & vbTab & Sheets("Archiv").Cells(i, 2)
Next
End Sub
Private Sub Beenden_Click()
Unload Me
End Sub
Sub Checkandsavebutton_Click()
Archivdropdown = ""
End Sub
An welcher Stelle und wie müsste ich eine Änderung durchführen, wenn die beabsichtigte Wiederherstellung der Daten in der Eingabemaske erst durch den Klick auf den Button "Check and save" im UserForm erfolgen soll?
Herzliche Grüße
Rudi

Anzeige
AW: einzelne Zellen aus Dropdowndatensatz übertr.
09.12.2014 15:24:08
fcs
Hallo Rudi,
du kannst den Code der jetzt unter
Private Sub Archivdropdown_Change()
steht "einfach" unter den Code der Schaltfläche
Sub Checkandsavebutton_Click()
verschieben.
Private Sub Archivdropdown_Change() kannst du dann komplett löschen.
Du solltest aber noch ein paar Zeilen einbauen, so dass eine Meldung angezeigt wird, wenn noch kein Datensatz in der Combobox gewählt wurden und dass die Makroausführung etwas beschleunigt wird, indem Berechnungsmodus und Bildschirmaktualisierung temporär umgeschaltet werden.
Gruß
Franz
Sub Checkandsavebutton_Click()
Dim Zeile As Long
Dim wksArchiv As Worksheet
Dim wksEingabe As Worksheet
Dim lastLineTarget As Long
Dim StatusCalc As Long
With Me.Archivdropdown
If .ListIndex = -1 Then
MsgBox "Bitte erst einen Datensatz in der CombobBox auswählen"
Exit Sub
End If
Zeile = .ListIndex + 2 '2 ggf. anpassen, wenn 1. Datenzeile nicht in Zeile 2 - _
Listindex beginnt in Zählung bei 0
End With
Set wksArchiv = ActiveWorkbook.Worksheets("Archiv")
Set wksEingabe = ActiveWorkbook.Worksheets("Eingabe")
With wksEingabe
lastLineTarget = .Cells(wksEingabe.Rows.Count, 1).End(xlUp).Row     'letzte Zeile _
suchen
End With
'Makrobremsen lösen
With Application
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
With wksArchiv
wksEingabe.Cells(lastLineTarget, 1).Value = .Cells(Zeile, 3).Value 'Kz Sachverhalt
wksEingabe.Cells(lastLineTarget, 2).Value = .Cells(Zeile, 4).Value 'Anrede Partner 1
wksEingabe.Cells(lastLineTarget, 3).Value = .Cells(Zeile, 6).Value 'Vorname Partner 1
wksEingabe.Cells(lastLineTarget, 4).Value = .Cells(Zeile, 7).Value 'Name Partner 1
wksEingabe.Cells(lastLineTarget, 5).Value = .Cells(Zeile, 8).Value 'Straße
wksEingabe.Cells(lastLineTarget, 6).Value = .Cells(Zeile, 9).Value 'PLZ
wksEingabe.Cells(lastLineTarget, 7).Value = .Cells(Zeile, 10).Value 'Wohnort
wksEingabe.Cells(lastLineTarget, 8).Value = .Cells(Zeile, 11).Value 'Anrede Partner 2
wksEingabe.Cells(lastLineTarget, 9).Value = .Cells(Zeile, 13).Value 'Vorname Partner  _
_
2
wksEingabe.Cells(lastLineTarget, 10).Value = .Cells(Zeile, 14).Value 'Name Partner 2
wksEingabe.Cells(lastLineTarget, 11).Value = .Cells(Zeile, 20).Value 'Name SB
wksEingabe.Cells(lastLineTarget, 12).Value = .Cells(Zeile, 21).Value 'Straße SB
wksEingabe.Cells(lastLineTarget, 13).Value = .Cells(Zeile, 22).Value 'PLZ SB
wksEingabe.Cells(lastLineTarget, 14).Value = .Cells(Zeile, 23).Value 'Ort SB
wksEingabe.Cells(lastLineTarget, 15).Value = .Cells(Zeile, 15).Value 'Schreiben vom
wksEingabe.Cells(lastLineTarget, 16).Value = .Cells(Zeile, 16).Value 'Eingang _
Schreiben am
wksEingabe.Cells(lastLineTarget, 17).Value = .Cells(Zeile, 17).Value 'Aktenzeichen
wksEingabe.Cells(lastLineTarget, 18).Value = .Cells(Zeile, 24).Value 'Kurzname FA
'usw...
End With
Me.Archivdropdown = ""
'Makrobremsen zurücksetzen
With Application
.Calculation = StatusCalc
.ScreenUpdating = True
End With
End Sub

Anzeige
AW: einzelne Zellen aus Dropdowndatensatz übertr.
09.12.2014 16:27:16
Rudi
Super!
Ich bin begeistert! Werde es morgen gleich umsetzen und testen.
Vielen Dank noch einmal für die tolle Unterstützung!
Herzliche Grüße
Rudi

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige