Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
968to972
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
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Multipages

Multipages
17.04.2008 15:58:36
Benjamin
Huhu,
Ich weiß es ist viel Text, aber ich hoffe so, das ich verstanden werde, und nicht die erste Antwort ist, was willst du denn überhaupt machen.
ich habe ein Steuerelement gebastelt, mit 3 Multipages. Jede Page liest aus einem Sheet Informationen aus und gibt mir diese auf der jeweiligen page Seite zur Auswahl wieder. Ich habe es auch hinbekommen, das ich diese Auswahl (es soll nur eine gehen) auf einem 4ten Sheet ausgebe in eine Zelle.
Ich habe nun eine Frage,
wie stelle ich es an, das ich von der jeweiligen Seite, auf denen die Pages die Info herbekommen zusätzlich noch eine Zelle zur 4ten Seite verlinke. Die zahlenwerte stehen in Spalte P der gleichen höhe, auf dem auch die Auswahl in der Page getroffen wird (diese werden aus Spalte C gelesen). Kurze zusammenfassung.
4 Seiten
Skills Werte stehen in Spalte C 8 10 12 14 16...118
skills 2 Werte stehen in Spalte C 8 10 12 14 16...118
skills 3 Werte stehen in Spalte C 8 10 12 14 16...118
Stats Zielseite der Informationen Im moment N42 (wird geändert per Buttons auf bis zu 30 Felder)
Steuerelement:
Multipage mit 3 Seiten(listboxen)
liest pro Seite aus jeweils einen der Sheets(Skills, Skills 2 und Skills 3), Spalte C, offset 8, Step 2 (also nur jede 2te Zeile ist befüllt (die geraden) die ungeraden, sind nur zur Formatierung und sind leer).
Also 8 - 118...
Die auswahl die in der Multipage(listbox) getroffen wird, wird auf die 4te Seite "Stats"
ausgegeben ( im moment ist es in der Function geregelt, und nur 1 Zelle, das werde ich später ändern. wird mit Buttons realisiert). Aktuell ist es N42.
Ich müsste nun auch auf jeweils einen der Skill Sheets noch die benannte verlinkung ala =(Sheets!Pauswahlhöhe)
z.b. =(Skills 2!P62)
diese Info soll wie gesagt auch auf die Stats seite in AM50. Was passiert nun also..
Ich rufe aus der Stats Seite per Buttun das Multielement auf. Dieses liste mir pro Seite (Sheet) alle eingetragenen Werte von 8-118 Step 2 aus. Und Gibt sie mir zur Auswahl in die listbox wieder. Nehmen wir mal an ich wähle "Haus" aus der Liste von Seite 2, dieser Eintrag ist unter Skills 2 C62, zu finden. Ich habe nun auf der Stats Seite in N42 Haus stehen. Betätige ich wieder den Button und wähle von Seite 1 der Page 1 "Kanne" (diese Info hätte das Steuerelement von "Skills" C110, dann steht nun in N42 kanne.
Wenn ich nun eine Auswahl treffe soll die Zeile aus der die Info kommt herrangezogen werden z.b. C50 und mir eine verlinkung auf der Stats Seite erstellen (Neben der kanne) die auf Skills!P50 verweist. Wenn ich nun nämlich diesen wert unter Skills änder, soll er sich auch auf der Seite Stats aktualisieren, und nicht erst wenn ich nochmal Kanne auswähle. Hier der Code.
Dim values(180)
Dim offset As Integer
Dim cus As String

Private Sub btnOk_Click()
If cusBox.ListIndex > -1 Then Call cusData
If cusBox2.ListIndex > -1 Then Call cusData
If cusBox3.ListIndex > -1 Then Call cusData
End Sub



Private Sub cusBox_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call cusData
End Sub



Private Sub cusBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call cusData
End Sub



Private Sub cusBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call cusData
End Sub



Private Sub cusBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If (KeyCode = 13) Then
Call cusData
End If
End Sub



Private Sub cusBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If (KeyCode = 13) Then
Call cusData
End If
End Sub



Private Sub cusBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If (KeyCode = 13) Then
Call cusData
End If
End Sub



Private Function cusData()
Sheets("Stats").Range("N42") = cusBox & cusBox2 & cusBox3
cusForm.Hide
End Function



Private Sub UserForm_Activate()
Dim cusCol As String
Dim counter As Integer
offset = 8
cusBox.Clear
cusBox2.Clear
cusBox3.Clear
For counter = 0 To 118
cusCol = "C" & counter + offset
If (Sheets("Skills").Range([cusCol]).Value  "") Then
cusBox.AddItem (Sheets("Skills").Range([cusCol]).Value)
End If
If (Sheets("Skills 2").Range([cusCol]).Value  "") Then
cusBox2.AddItem (Sheets("Skills 2").Range([cusCol]).Value)
End If
If (Sheets("Skills 3").Range([cusCol]).Value  "") Then
cusBox3.AddItem (Sheets("Skills 3").Range([cusCol]).Value)
End If
Next counter
MultiPage1.Value = 0
End Sub


14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
was willst du...
17.04.2008 17:04:14
Renee
überhaupt, soll nicht die erste Frage sein, Benjamin.
...aber glaubst du wirklich, dass das jemand nachbaut? Da hat es soviele Wenn und Abers, Beschreibungen von Regeln zwischen Steuerelementen und Zellen und Tabellennamen, das ich auch nach mehrmaligem Durchlesen wirklich nicht weiss, wo ansetzen.
Lad doch eine Beispielmappe hoch und stelle gezielt das Problem in einfachen, verständlichen Sätzen!
GreetZ Renée

AW: was willst du...
17.04.2008 17:40:00
Benjamin
Tut mir leid.. ich hab das schon befürchtet. Ich kann leider nicht die halbe mappe nur wegen dem ding neu machen, und hochladen geht aucht nicht. Ist zu groß. Deshalb hier die ganze mappe auf meinem FTP ist fast 600 kb. Es geht um die Stats Seite. Der Button im roten Feld ist der, der das Steuerelement ruft. Der Gelbe bereich, dort wo die Info geladen wird die man auswählt, und der Grüne, da soll dann die Verlinkung hin zu Spalte P, aus Skills Skills 2 oder Skills 3 je nachdem was man eben auswählt.

Anzeige
AW: was willst du...
17.04.2008 22:28:20
Renee
Hi Ben,
Das Ganze ist mir zu "verprogrammiert".
Z.B. funktioniert das Setzen der Skills nicht, wenn in jeder Listbox der 3 Pages ein Skill selektiert wurde und anschliessend der Set Skill-Button gedrückt wird. Aber trotzdem mal als Ansatz:
1. Definiere alle 3 Listboxen mit .ColumnCount 2
2. Setze die .ColumnWidht Eigenschaft auf 240 pt;0 pt
3. Füge im _Activate Ereignis diesen Code (fette 2 Zeilen nach der normal Zeile) ein:

cusBox.AddItem (Sheets("Skills").Range([cusCol]).Value)
cusBox.List(cusBox.ListCount - 1, 1) = "='Skills'!" & _
Sheets("Skills").Range([cusCol]).offset(0, 5).Address

jeweils angepasst auch für die beiden anderen Listboxen.
Damit hast du die spätere Formel in der Column2 der jeweiligen Listbox und kannst sie mit
"GrüneZelleAdresse" = cusbox.List(cusbox.ListIndex,1) auslesen.
GreetZ Renée

Anzeige
AW: was willst du...
17.04.2008 23:33:10
Benjamin
huhu super lieben dank, für was ist das mit der Columncount und so denn gedacht?. Und kann man was gegen den Fehler machen den du angesprochen hast? Also das wenn ich 3mal was Selektiere das es den Fehler gibt. Ich hab übrigens nur oben
Sheets("Stats").Range("N42") = cusBox & cusBox2 & cusBox3 was wohl den fehler macht stehen, weil ich keinen andren Weg fand, das ich den Skill bekomme, egal aus welcher Listbox ich klicke.

AW: was willst du...
17.04.2008 23:56:00
Benjamin
ok ich kann leider nich editieren, das mit der column hat sich erledigt, ich sehe warum. Aber ich habe noch das Problem mit der 3er Auswahl.Und ich habe alle drei Boxen angepasst, da sie ja auch andre Namen haben (muss ja so sein?) bekomme ich ein VBA fehler wenn ich einen Skill von Seite 2 oder 3 wähle, bei der ersten Seite geht es.
das ist der Fehler: Laufzeitfehler 381.
Eigenschaft List konnte nicht abgerufen werden. Index des Eigenschaftsfelds ungültig.
Debug zeigt mir diese Zeile
Sheets("Stats").Range("R42") = cusBox.List(cusBox.ListIndex, 1)
Also die Ausgabe der Zahl.
hier der Code
If (Sheets("Skills").Range([cusCol]).Value "") Then
cusBox.AddItem (Sheets("Skills").Range([cusCol]).Value)
cusBox.List(cusBox.ListCount - 1, 1) = "='Skills'!" & _
Sheets("Skills").Range([cusCol]).offset(0, 13).Address
End If
If (Sheets("Skills 2").Range([cusCol]).Value "") Then
cusBox2.AddItem (Sheets("Skills 2").Range([cusCol]).Value)
cusBox2.List(cusBox2.ListCount - 1, 1) = "='Skills 2'!" & _
Sheets("Skills 2").Range([cusCol]).offset(0, 13).Address
End If
If (Sheets("Skills 3").Range([cusCol]).Value "") Then
cusBox3.AddItem (Sheets("Skills 3").Range([cusCol]).Value)
cusBox3.List(cusBox3.ListCount - 1, 1) = "='Skills 3'!" & _
Sheets("Skills 3").Range([cusCol]).offset(0, 13).Address
End If
sorry, das ich nochmal fragen muss.

Anzeige
AW: was willst du...
17.04.2008 23:58:37
Benjamin
Bitte verzeiht meine Posting, edit wär echt gut, ich hab nicht den hacken gesetzt für Frage noch offen, sonst geht der beitrag ja unter. Tut mir echt leid, man sollte so spät nix mehr machen. :/

AW: was willst du...
18.04.2008 14:33:49
Renee
Hi Ben,
Hier dein Code für die UF (cusForm)

Dim offset As Integer
Private Sub btnOk_Click()
Call cusData(Trim(Str(MultiPage1.Value + 1)))
End Sub
Private Sub cusBox_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call cusData
End Sub
Private Sub cusBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call cusData("2")
End Sub
Private Sub cusBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call cusData("3")
End Sub
Private Sub cusBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If (KeyCode = 13) Then
Call cusData
End If
End Sub
Private Sub cusBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If (KeyCode = 13) Then
Call cusData("2")
End If
End Sub
Private Sub cusBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If (KeyCode = 13) Then
Call cusData("3")
End If
End Sub
Private Sub cusData(Optional sBox As String)
Dim objCtrl As Object
If sBox = "1" Then sBox = ""
Set objCtrl = Me.Controls("cusBox" & sBox).Object
Sheets("Stats").Range("N42") = objCtrl.List(objCtrl.ListIndex, 0)
Sheets("Stats").Range("R42").Formula = objCtrl.List(objCtrl.ListIndex, 1)
cusForm.Hide
End Sub
Private Sub UserForm_Activate()
Dim cusCol As String
Dim counter As Integer
offset = 8
cusBox.Clear
cusBox2.Clear
cusBox3.Clear
cusBox.ColumnCount = 2
cusBox2.ColumnCount = 2
cusBox3.ColumnCount = 2
cusBox.ColumnWidths = "240 pt;0 pt"
cusBox2.ColumnWidths = "240 pt;0 pt"
cusBox3.ColumnWidths = "240 pt;0 pt"
For counter = 0 To 110
cusCol = "C" & counter + offset
If (Sheets("Skills").Range([cusCol]).Value  "") Then
cusBox.AddItem (Sheets("Skills").Range([cusCol]).Value)
cusBox.List(cusBox.ListCount - 1, 1) = "='Skills'!" & _
Sheets("Skills").Range([cusCol]).offset(0, 13).Address
End If
If (Sheets("Skills 2").Range([cusCol]).Value  "") Then
cusBox2.AddItem (Sheets("Skills 2").Range([cusCol]).Value)
cusBox2.List(cusBox2.ListCount - 1, 1) = "='Skills 2'!" & _
Sheets("Skills 2").Range([cusCol]).offset(0, 13).Address
End If
If (Sheets("Skills 3").Range([cusCol]).Value  "") Then
cusBox3.AddItem (Sheets("Skills 3").Range([cusCol]).Value)
cusBox3.List(cusBox3.ListCount - 1, 1) = "='Skills 3'!" & _
Sheets("Skills 3").Range([cusCol]).offset(0, 13).Address
End If
Next counter
MultiPage1.Value = 0
End Sub


GreetZ Renée

Anzeige
AW: was willst du...
18.04.2008 18:40:00
Benjamin
Woow, tausend lieben Dank, das du dir die mühe gemacht hast und mir zudem geholfen. Find ich echt super Toll. Es bleibt nur noch 1 Frage offen, dann bin ich glücklich. Ich hab ja schonmal weiter oben geschrieben, das ich vor habe mit mehr Buttons, mehr von der auswahl auf die Stats seite zu bringen, hast ja auf dem Sheet gesehn das da mehr platz ist. Was müsste ich nun ändern (evtl. von den klickbutton also rückwert geben wenn das leichter ist) das ich nun mir 30 Buttons machen kann, und diese dann für jeweils eine der Doppelzellenfüllung verantwortlich sind. Also das was der eine nun macht eben x30

Anzeige
AW: was willst du...
18.04.2008 20:22:05
Renee
Hi Ben,
Ersetze den Code der Sub cusData durch diesen:

Private Sub cusData(Optional sBox As String)
Dim objCtrl As Object
Dim lRow As Long, lCol As Long
If sBox = "1" Then sBox = ""
Set objCtrl = Me.Controls("cusBox" & sBox).Object
If objCtrl.ListIndex  "" Then lCol = 24
If Sheets("Stats").Cells(lRow, lCol).Value  "" Then
MsgBox "No more skills setable!", vbExclamation + vbOKOnly, "Set Skills"
cusForm.Hide
Exit Sub
End If
lRow = Sheets("Stats").Cells(lRow, lCol).End(xlUp).Row + 2
Sheets("Stats").Cells(lRow, lCol) = objCtrl.List(objCtrl.ListIndex, 0)
Sheets("Stats").Cells(lRow, lCol + IIf(lCol = 14, 4, 6)).Formula = _
objCtrl.List(objCtrl.ListIndex, 1)
End Sub


Das war's mehr bastle ich an dem Ding nicht mehr rum. Ist einfach zu verbogen. Da wurde wieder mal zuerst die Form (Darstellung) berücksichtigt, und jetzt muss man komplizierte Funktionen (Code) drum-rum-schreiben. Statt sich zuerst über die Funktion klar zu werden, nach meinem Leitspruch "Form follows function" und nicht umgekehrt!
GreetZ Renée

Anzeige
AW: was willst du...
18.04.2008 22:47:00
Benjamin
Danke dir Renee, ich werde mal versuchen ob ich es hinbekomme, den Code iregdnwie zu Verbessern wenn ich da durchgestiegen bin, damit es nicht so "verprogrammiert" ist. Evtl. hast du ja ein Tip (kein code) den ich so gehen könnte um den richtigen weg zur Verbesserung zu gehen,
Danke
Benjamin

Form follows Function
19.04.2008 12:32:00
Renee
Hi Ben,
Eigentlich sollte mein Code das machen, was du anstrebst. D.h. es können bis zu 30 Skills aus der offenen UF ausgewählt werden und mit jedem Druck auf den Button werden diese nacheinander in die Tabelle übertragen. Das ist auch ein Beispiel, wo mein Kritik ansetzt. Ich würde niemals 30 Buttons machen, um immer wieder das gleiche zu machen. Was aber vor allem mühsam ist, ist dein Tabellenaufbau, der zwar schön aussieht (Form) aber sehr schwer zu steuern (Funktion) ist. So ist mir bei dem Code oben z.B. aufgefallen das die linke Seite der Skillstabelle nicht den gleichen Aufbau (Anzahl Kolonnen) hat wie die rechte Seite. Und solche Sachen führen dann zu Code, wie
Sheets("Stats").Cells(lRow, lCol + IIf(lCol = 14, 4, 6)).Formula = _
objCtrl.List(objCtrl.ListIndex, 1)

der nur noch sehr schwer nachvollziehbar ist. Der Teil IIf(lCol = 14, 4, 6) bedeutet, wenn ich auf der linken Seite (Spalte 14) bin dann addiere 4 zur Spalte um die Formel abzulegen, wenn nicht (dann bin ich auf der rechten Seite) dann addiere 6 zur Spalte.
GreetZ Renée

Anzeige
AW: Form follows Function
20.04.2008 20:48:29
Benjamin
Ja Renee ist verstehe was du meinst, und mich hats genauso geärgert. Beim erstellen des Blattes muss ich leider nach unten hin zusehen wie ich etwas verschiebe zusammensetze und und und, damit ich weitestgehenst alles in einer ordnetlichen Form habe, Grund ist, das man in Excel Spalten nicht unterschliedlich anpassen kann, oben 14 breit und unten 6 oder sowas.. Das folgte dann in dem was du nun so auf der Tabelle sieht. Ich möchte auch nochmal ein großes danke sagen, das du dich der Sache angenommen hast, und trotz mein geblubber was ich eigtl. will, da irgendwie durchgestiegen bist.
Danke vielmals.

Anzeige
wegen zu geschlossen
21.04.2008 11:10:00
erledigt

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige