Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1776to1780
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

MultiPage UserForm

MultiPage UserForm
13.08.2020 21:45:08
Pete
Hallo,
Ich habe eine UF (UserForm1) mit diversen Textboxen und einem Listenfeld.
Den Namen (Labels) für die entsprechenden Textboxen , für die UserForm und die Columns der Listbox holt ich über das zugrundeliegende Worksheet (tbl_DATA)
Da ich merke das die ganze Sache etwas größer wird dachte ich ich führe eine MultPage Seite ein.
Hab ich gemacht (vgl fm_Daten)
Auf Page 1 hab ich die gleichen Felder wie in UF1. Nur diesesmal bedkomme ich es nicht gebacken das die Namen für die Labels sich aus dem Sheet ziehen
Was mache ich falsch?
Bitte um Hilfe
File kann ich derzeit nicht uploaden
ier ist ein 404-Fehler aufgetreten, bitte gehen Sie auf die Startseite https://www.herber.de/
Hier der Codfe für die UF
Private Sub UserForm_Initialize()
Dim i As Integer
With tbl_DATA
'Überschrift der Userform aus Zelle A1 holen
Me.Caption = .Range("A1").Value
For i = 1 To 10
Me.Controls("Label" & i).Caption = .Cells(2, i).Value
Next i
'Überschrift der ListBox aus Tabelle holen
For i = 1 To 8
Me.Controls("Label" & i + 10).Caption = .Cells(2, i).Value
Next i
End With
'ListBox einstellen
With Me.ListBox1
.ColumnCount = 10                    'Spaltenanzahl festlegen
.ColumnWidths = "80;80;80;80;80;80;80;80;80;10" 'Spaltenbreiten definieren
End With
'Cursor standardmäßig in die erste TextBox setzen
Me.TextBox1.SetFocus
End Sub

Allen besten Dank im Voraus

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
versuchs gleich nochmal mit der datei.
13.08.2020 21:56:56
ralf_b
nur geraten: du mußt vielleicht die controls über das multipage control referenzieren, weil die da drin sind.
AW: MultiPage UserForm
13.08.2020 22:09:03
Werner
Hallo,
lass mal das Me. weg. Me ist die Userform auf die du damit referenzierst.
Deine Steuerelemente sind aber nicht auf der Userform sondern auf einer Multipage auf der Userform.
 For i = 1 To 10
Controls("Label" & i).Caption = .Cells(2, i).Value
Next i
Dein SetFocus könnte aber Probleme machen. Das Control kann nur den Focus bekommen, wenn auch die entsprechende Multipage aktiv ist.
Gruß Werner
AW: MultiPage UserForm
13.08.2020 22:29:03
Pete
Wow.. das ging schnell.
Werner.. Ich hab die "Me" entfernt und bekomme jetzt den Laufzeitfehler 450
Anzeige
AW: MultiPage UserForm
13.08.2020 22:35:11
ralf_b
du weist schon das es daran liegt
Set Labels = MultiPage1.Pages(0).Controls.Add
AW: MultiPage UserForm
13.08.2020 22:42:38
Werner
Hallo,
Private Sub UserForm_Initialize()
Dim i As Integer, wks As Worksheet
Set wks = tbl_DATA
With tbl_DATA
MultiPage1.Pages(0).Caption = .Range("A1").Value
'Überschrift der Userform aus Zelle A1 holen
Me.Caption = .Range("A1").Value
For i = 1 To 10
Controls("Label" & i).Caption = .Cells(2, i).Value
Next i
'Überschrift der ListBox aus Tabelle holen
For i = 1 To 5
Controls("Label" & i + 10).Caption = .Cells(2, i).Value
Next i
End With
'ListBox einstellen
With ListBox1
.ColumnCount = 6                    'Spaltenanzahl festlegen
.ColumnWidths = "80;80;80;80;80;10" 'Spaltenbreiten definieren
End With
'zu Sicherheit Seite1 der Multipage wählen
MultiPage1.Value = 0
'Cursor standardmäßig in die erste TextBox setzen
TextBox1.SetFocus
End Sub
Gruß Werner
Anzeige
AW: MultiPage UserForm
13.08.2020 23:22:12
Pete
Hi Werner,.. zunächst hab recht herlichen dank! Kann ich mich morgen melden? hab im Moment keinen klaren KOpf mehr.. Sprich.. muss schlafen :-)
Auf alle Fälle recht herzlichen Dank!
Gruß,
peter
AW: Sachstand Bearbeitung
14.08.2020 20:34:49
Pete
Hallo Werner,
dieesmal etwas fitter in der Birne :-)
Kaum hattest geschrieben.. hatte ich den Fehler entdeckt . Du hattest recht mit den Set Labels...
Jetz funktioniert das Makro einwandfrei. Hab recht herzlichen Dank dafür
Darf ich Dich noch etwas fragen?
Gruß,
Peter
versuch es doch einfach. o.w.T.
14.08.2020 21:23:41
Werner
AW: Sachstand Bearbeitung
14.08.2020 22:19:32
Pete
Werner,.. also.. ich hab zuerst ne UF gebastelt. Bin dann auf die Idee gekommen wie gesagt, eine Multipage einzubauen.
Bin aber dann an der "Aufgabe" gescheitert den Datensatz über die Listbox und Data sheet zu ändern.
DEshalb hab ich eine neue UF gebastelt um den Zusammenhang zu verstehen.
Nun.. Dank Deiner Hilfe habe ich den Zusammenhang zwischen der Multipage und der UF verstanden.
Das hab ich jetzt versucht in der "Alten" UF umzusetzen. Und scheitere wieder.
Ich denke ich scheitere deshalb weil in der alten UF die Labels als auch Textboxen selbst mit Namen versehen habe. Anders als in der neuen UF. Hier holen sich die nummerierten Labels den Namen aus dem Sheet.
Was mache ich in der alten UF
In Frame 3 gebe ich als Bspl die Nummer 123456 ein. Wenn ich den cmd Button links davon triggere dann wird die LBx gefüllt. Wenn ich jetzt den CmdButton Re (Kreiseldarstellung ) triggere dann bekomme ich nen Bug. Er findet das Objekt nicht. (Wohl eweil ich die Labels umbenannt habe.
Anbei das File
Gruß,
Peter
Wie kann ich das jetzt in der alten UF umsetzen? welchen Fehler mache ich dort?
Anzeige
AW: Sachstand Bearbeitung
14.08.2020 22:20:00
Pete
Werner,.. also.. ich hab zuerst ne UF gebastelt. Bin dann auf die Idee gekommen wie gesagt, eine Multipage einzubauen.
Bin aber dann an der "Aufgabe" gescheitert den Datensatz über die Listbox und Data sheet zu ändern.
DEshalb hab ich eine neue UF gebastelt um den Zusammenhang zu verstehen.
Nun.. Dank Deiner Hilfe habe ich den Zusammenhang zwischen der Multipage und der UF verstanden.
Das hab ich jetzt versucht in der "Alten" UF umzusetzen. Und scheitere wieder.
Ich denke ich scheitere deshalb weil in der alten UF die Labels als auch Textboxen selbst mit Namen versehen habe. Anders als in der neuen UF. Hier holen sich die nummerierten Labels den Namen aus dem Sheet.
Was mache ich in der alten UF
In Frame 3 gebe ich als Bspl die Nummer 123456 ein. Wenn ich den cmd Button links davon triggere dann wird die LBx gefüllt. Wenn ich jetzt den CmdButton Re (Kreiseldarstellung ) triggere dann bekomme ich nen Bug. Er findet das Objekt nicht. (Wohl eweil ich die Labels umbenannt habe.
Anbei das File
Gruß,
Peter
Wie kann ich das jetzt in der alten UF umsetzen? welchen Fehler mache ich dort?
https://www.herber.de/bbs/user/139645.xlsm
Anzeige
AW: Sachstand Bearbeitung
15.08.2020 11:57:02
ralf_b
weil es dort keine "Textbox1" gibt
i ist 1
Controls("TextBox" & i).Value
Und die Auswertung deiner Optionbutton "Lieferanten" ist auch murks.
zum Einen Überschreibst du mehrfach den Zellinhalt, anstatt den ausgewählten Optionbutton zu ermitteln.
die Objektbezeichnungen stimmen auch nicht überein. txt.DHL ist nicht txt_D
AW: Sachstand Bearbeitung
15.08.2020 12:18:16
Matthias
Moin!
Wie Ralf schon schrieb, ist das Problem (u.a.) das deine Controls nun einen anderen Namen haben. Das könntest du beheben, in dem du entweder wie beim LIstbox_Click die Felder fest reinschreibst oder du legst dir ein Array mit den Namen an und durchläufst dieses Array und nimmst die Namen für deine Controls. Damit könntest du bei der Schleife bleiben.
Beim Zurückschreiben wird es aber noch ein anderes Problem geben.
Iim Code für das Zurückschreiben nimmst die Zeilennnummer mit der Zeile hier
lngZeile = ListBox3.Column(9, ListBox3.ListIndex)

Das ist aber nicht die Zeile des Datensatzes sondern der Eintrag der Spalte Q (KST NUmmer). Bei deinem Beispiel (wennman es so eingibt), steht dort dann 669810. DA deine Daten aber nur 150 Zeilen sind, ist das nicht gewollt. Da der Wert auch mehrfach vorkommt, wirst du damit nicht den richtigen Datensatz finden können. Um das sicherer zu machen, biete sich da immer an, in die Listbox die aktuelle Zeile mit aufzunehmen. Die Spalte musst du ja nicht mit anzeigen lassen. Wenn du dann eine Zeile selektierst, kann du die Zeile im Blatt auslesen und direkt auf den DAtensaz zugreifen. Da aber der Hinweis. Bei Additem kann die Listbox nur 10 Spalten haben (bei dir wäre die Spalte 2 noch frei). Wenn du da mehr Spalten brauchst, müsstest du ggf. die LIste anders befüllen.
Hört sich vllt. kompliziert an, ist aber eigentlich nicht so schwer.
FAlls du da noch Tipps / Hinweise / Beispiel brauchst, einfach melden.
VG
Anzeige
AW: Sachstand Bearbeitung
15.08.2020 18:37:30
Pete
Hallo Matthias,
Danke für den Hinweis
Ds mit den Cotrls habe ich soweit verstanden. Entsprechend habe ich den Code geändert.
Als Newbe in Schen VBA hab ich mich mit dem Array noch nicht so befasst. (obwohl ich vermute das dies der elegantere und übersichtlicher Code wäre).. doch die ösung dafür hab ich nicht.
Das mit
lngZeile = ListBox3.Column(9, ListBox3.ListIndex)hab ich auch schon bemerkt. Doch ehrlich gesagt .. ganz hab ich es nicht vertanden. beim Rest steh ich im Moment wie der "Ochs" vorm Berg :-)
Hier mal der Code hinsichtlich den Controls (wobei ich denke das die Schleife und damit der Text im Code .Cells(lngZeile,i) raus muss
Private Sub CommandButton3_Click()
Dim lngZeile As Long
Dim i As Integer
Dim wks As Worksheet
'Zuerst prüfen, ob überhaupt ein Datensatz im Listenfeld markiert ist
If ListBox3.ListIndex >= 0 Then
lngZeile = ListBox3.Column(9, ListBox3.ListIndex)
For i = 1 To 9
Worksheets("DATA").Cells(lngZeile, i).Value = Me.Vorname.Value
Worksheets("DATA").Cells(lngZeile, i).Value = Me.FName.Value
Worksheets("DATA").Cells(lngZeile, i).Value = Me.KST.Value
Worksheets("DATA").Cells(lngZeile, i).Value = Me.OrgaCode.Value
Worksheets("DATA").Cells(lngZeile, i).Value = Me.TeleNr.Value
Worksheets("DATA").Cells(lngZeile, i).Value = Me.MailAdress.Value
Worksheets("DATA").Cells(lngZeile, i).Value = Me.MailCC.Value
Worksheets("DATA").Cells(lngZeile, i).Value = Me.MailBCC.Value
Next i
'Zurückschreiben in die ListBox
For i = 1 To 9
ListBox3.Column(i, ListBox3.ListIndex) = Controls("TextBox" & i + 1).Value
Next i
Else
MsgBox "Bitte markiere einen Datensatz im Listenfeld!"
End If
End Sub

Anzeige
AW: Sachstand Bearbeitung
15.08.2020 20:39:34
Matthias
Moin!
Also von der Art her richtig. Damit weist du fest die Werte zu. Du musst nur noch bei dem cells die Spalte mit angeben. Die SChleife dort hilft nichts. Die braucht man bei dem Vorgehen nicht und bei deinem Code würde er immer alles in die selbe Zelle schreiben und dann zur nächsten gehen und wieder alles eintragen. Müsste so aussehen (nur einen Teil)
 If ListBox3.ListIndex >= 0 Then
lngZeile = ListBox3.Column(0, ListBox3.ListIndex)'dass komm in der Datei
Worksheets("DATA").Cells(lngZeile, 10).Value = Me.FName.Value
Worksheets("DATA").Cells(lngZeile, 11).Value = Me.KST.Value

Bzgl der Nummer zum Eintragen, hier mal an deinem Code erklärt.
https://www.herber.de/bbs/user/139649.xlsm
Habe es mal in die Datei eingebaut. Änderungen bzw. erklären habe ich mal kommentiert. Geht aber nur um den LB Click den Button 34 und den Übertragebutton.
Ich habe dabei die Anordnung in der Listbox geändert. In Spalte 0 kommt jetzt die Zeilennummer. Die ist aber ausgeblendet und wird in der Box nicht mit angezeigt (habe da für Spalte 0 die Breite auf 0 gesetzt und den Rest macht VBA automatisch). In Spalte 1 kommt dann die Nummer und dann der Name. Musst da nur aufpassen, wenn sich noch andere Code darauf bezieht (in der Datei ist alles daran angepasst).
Zusätzlich lasse ich noch die Listbox leeren, da sonst beim zweiten Click der Text unten wieder angefügt wird.
Die Nummer fehlt übringes noch im Code. Da hast du der Textbox auch keinen Namen gegeben. Apropo Namen. Zur Verdeutlichung habe ich mal die Array Methode gewählt. Damit kann ich auch die Schleife wieder nutzen.
Kannst es dir ja mal anschauen.
VG
Anzeige
AW: Sachstand Bearbeitung
15.08.2020 22:22:23
Pete
Hallo Matthias,
jetzt habe ich weiteres dazu gelernt.. Die Sache mit dem Array. Danke schön!
In der Sache seelbst ist es so das ich mit dem cmd Button 34 eine Nummer suchen möchte
Bspl ich geb die 123456 ein triggere den Button und der füllt mir die LBx. In column 1 der Litsbox stehr dann die Nummer in Colm 2 der Name etc die Zeile kann dann am Schluß stehen.
Wenn ich jetzt den Eintrag mit der Nummer 123456 anklicke füllt er mir oben die Textboxen. Hintergrund ist das ich zBspl aus dem Vornamem Pipi Pipi Q machen oder aus Langstrumpf ; Lang
Sprich.. ich will irgendeinen Eintrag in der Textbox ändern.
Das will ich gern mit dem cmd Btn 3 erreichen
Wenn ich ihn triggere dann übernimmt er mir die Änderung in der LB als auch im Sheet Data
Mit Deiner Hilfe bin ich da schon recht weit gekommen. Was er aber bislang macht ist das er die Änderung in der Textbox zwar auch übernimmt aber dann in eine andere Column der Listbox schreibt. Und schon gar nicht die Änderung im Worksheet DaTA vornimmt. Das hab ich noch nicht recht verstanden
Anzeige
AW: Sachstand Bearbeitung
16.08.2020 19:45:00
Matthias
Moin!
Also in der Datei gestern, hatte ich die Zeillennummer in die 1. Spalte der Listbox (mit dem INdex 0 ) gepackt. Hintergrund ist / war der, dass man dabei am Code nicht zuviel ändern musste und die 1. Stelle ist immer am besten. So kann man beliebig die LB nach rechts (also bis zu insg. 10 Spalten sonst anders) erweitern und braucht sich nicht um die Spalte mit den NUmmer kümmern (die ist immer am Anfang). Würde ich bei dir auch lassen. Ansonsten müssen man die Zuordnung für die Spalten 3 bis 9 ändern.
Zum Button CB3. Den hatte ich gestern in der Datei schon mit geändert. Habe eben nochmal geschaut. Bei mir macht er die Änderung beim Anklicken sowohl im Blatt als auch der LB. Also eigentlich sollte das passen. Wenn du das Beispiel von gestern in deine Datei eingebaut hast, dann poste die bitte nochmal. Dann kann man schauen, woran es liegt. Ansonsten mal ein Knackpunkt. HIer
Worksheets("DATA").Cells(lngZeile, i + 8).Value = mycontr(i) 'Controls("TextBox" & i).Value

Musst du bei dem Cells noch einen Versatz (hier die + 8) mitgeben. Da dort der Einfachheit halber beim cells und dem array der selbe INdex (i) genutzt wird, die aber an verschiedenen Stellen anfangen ( im Array bei 2 und auf dem Blatt bei 10), musst da noch die + 8 hinzu. Ansonsten startet der Eintrag die 8 Spalten zu früh.
Wie gesagt, teste nochmal mit der Datei von mir gestern und / oder poste mal bitte deine mit dem Fehler. Aber beachte, dass die LB bei Spalte 0 die Zeile hat, dann die Nummer kommt, Dann der Name und dann wie bei dir.
VG
Anzeige
AW: Sachstand Bearbeitung
17.08.2020 06:49:39
Pete
Moin Matthias! Hey! Danke für die Geduld, Erklärung , Tipps als auch Unterstützung!
Hat mir echt viel geholfen!
Ich habs nach langem probieren dann doch hinbekommen. Hab recht herzlichen Dank!
Ich schick Dir gerne das was ich nun habe.
Womit ich mich noch befassen muss ist der sog. Listindex .. den sollte ich noch tiefer verstehen.
Anbei die Datei
VG
Pete
AW: Sachstand Bearbeitung
17.08.2020 06:52:27
Pete
Moin Matthias! Hey! Danke für die Geduld, Erklärung , Tipps als auch Unterstützung!
Hat mir echt viel geholfen!
Ich habs nach langem probieren dann doch hinbekommen. Hab recht herzlichen Dank!
Ich schick Dir gerne das was ich nun habe.
Womit ich mich noch befassen muss ist der sog. Listindex .. den sollte ich noch tiefer verstehen.
Anbei die Datei
VG
Pete
https://www.herber.de/bbs/user/139658.xlsm
AW: Sachstand Bearbeitung
17.08.2020 23:43:58
Matthias
Moin!
Schön, wenn es läuft. Da keine wirklichen Fragen mehr aufkamen, hier noch schnell eine Erklärung zum Listindex.
Der kommt bei Comboboxen, Listboxen und anderen vor. Damit kannst du auswerten, welcher Wert der Eintragungen ausgewählt wurde. Bei listindex = -1 ist nichts ausgewählt. Ansonsten geht die Auswahl bei 0 los (0 basiert). Das heißt der erste Eintrag hat den Index 0 der zweite den INdex 1 usw.. Da muss man ggf. immer eins dazu addieren.
Aber ein Hinweise. Bei LIstboxen kann man auch multiselect auswählen und damit mehrere Felder auswählen. Da geht dann kein listindex, da VBA ja nur einen Wert zurück gibt, dies aber bei mehreren nicht möglich ist. In diesem Fall musst du die Liste durchgehen und mit der Eigenschaft selected prüfen, ob der Eintrag ausgewählt wurde.
Sollten noch mehr Fragen bestehen, dann einfach melden.
Weiterhin viel Spaß.
VG
AW: Sachstand Bearbeitung
19.08.2020 18:46:11
Pete
HI Matthias!
Jetzt habe ich die Sache auch mit dem Listindex verstanden
Entweder ich wähle keinen Eintrag aus der Listbox aus (LNdex -1)oder ich wähle einen Eintrag aus
( Lndex 1) 2 Einträge etc (Lndex 2) usw
Ich kann mir aber die Nummerierung mittels Multiselect "sparen" (und damit, zunächst, VBA Code)
Dann allerdings muss ich der "Maschine" sagen welch Einträg er wählen, beachten soll ("selected")
zu Fragen :-) Ja habe ich :-)
ich vermute mal das ich einen weiteren Thread öffen muss / sollte
denn dem Grunde nach geht es da darum ein bestimmtes File in einem bestimmten Ordner der sich auf einem anderen Laufwerk befindet, zu finden und entweder auf den Desktop oder in ein geöffnetes Re Mail (bedeutet ..habe die Mail des Senders geöffnet und habe auf Re oder bearbeiten geklickt)
mtes File das in einem Ordner in einem anderen Pfad liegt

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige