| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Schleife: alle Textlabel in Worksheet (1768 mal gelesen)
|
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 23. Mai. 2006 18:18 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, Ich versuche meine Datei etwas zu optimieren, da erstens die Speicherzeiten enorm lang sind (bis zu 1 min auf nem schnellen System, über die langsamen rede ich besser nicht) und zweitens haben sich beim Programmieren einige Fehler eingeschlichen, die ich so langsam versuche zu finden und zu entfernen, bin aber mal wieder zu doof für meine Schleife. Was ich vorhabe: Ich habe auf 31 sheets jeweils 15 textlabel. Diese werden durch einen ComboBox-Eintrag gefüllt, Code: Private Sub ComboBox15_Change() Reihe = Tabelle1.ComboBox15.ListIndex + 10 Tabelle1.Label5.Caption = Tabelle34.Cells(Reihe - 1, 20) End Sub
allerdings nur ein abgeschnittener Text (ca. 20 Zeichen, bedingt durch die Labelbreite) Wenn ich einen Doppelclick auf das label mache, geht eine userform auf, deren Inhalt ein Textfeld ist, auf dem der ganze Text angezeigt wird. Momentan ist mein code sehr unschön, da ich diesen code auf allen 31 Tabellenblättern wiederhole: kleiner Auszug
Code: Private Sub Label5_DblClick(ByVal Cancel As MSForms.ReturnBoolean) UserForm1.Label1.Caption = Tabelle1.Label5.Caption UserForm1.Show End SubPrivate Sub Label6_DblClick(ByVal Cancel As MSForms.ReturnBoolean) UserForm1.Label1.Caption = Tabelle1.Label6.Caption UserForm1.Show End Sub usw.
Jetzt möchte ich das ganze Spielchen verkürzen.was ich bisher versucht habe: Gelächter bitte verkneifen 
Code: Sub KurzTexte() Dim lbl As Object 'auch schon als OLEObject od. label versucht For Each lbl In ThisWorkbook.Worksheets UserForm1.Label1.Caption = Tabelle2.lbl.Caption 'hier findet er das Objekt "lbl" nicht UserForm1.Show End SubSub LabelAuswahl() 'Dim lbl As Label For Each lbl In ThisWorkbook.Worksheets.DblClick 'das DblClick geht natürlich auch nicht KurzTexte End Sub
Ich habe es auch schon mit einer For t = 1 to 20 versucht aber Tabelle2.label & t geht leider auch nicht. Bin mit meinem Latein am Ende. Wer kann mir sagen, wie ich die labels definieren muß, damit ich sie so allgemein ansprechen kann? Im LokalFenster sehe ich leider auch den Wald vor lauter Bäumen nicht... Ein Problem könnte sein, daß die userform sich ja labelabhängig füllt, heißt, anderes label -> anderer Text aber gleiche userform.Kann mir jemand helfen? Gruß, Nicole ------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
 
 Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 23. Mai. 2006 19:40 <-- editieren / zitieren --> Unities abgeben:          Nur für runkelruebe
Hallo Nicole, dazu musst du eine Klasse der Labels anlegen. Da du ja die Klasse des Userforms schon hast, verwendest du gleich diese. Im Open - Ereignis der Mappe initialisierst du die Klasse: Code:
Option ExplicitPrivate objLabel() As UserForm1 Private Sub Workbook_Open() Dim objOLEObject As OLEObject Dim objWorksheet As Worksheet Dim lngCounter As Long For Each objWorksheet In ThisWorkbook.Worksheets For Each objOLEObject In objWorksheet.OLEObjects If TypeOf objOLEObject.Object Is MSForms.Label Then lngCounter = lngCounter + 1 ReDim Preserve objLabel(1 To lngCounter) Set objLabel(lngCounter) = New UserForm1 Set objLabel(lngCounter).prpSetLabel = objOLEObject.Object End If Next Next End Sub
Im Klassenmodul des Userform befindet sich folgender Code: Code:
Option ExplicitPrivate WithEvents mobjLabel As MSForms.Label Friend Property Set prpSetLabel(objLabel As MSForms.Label) Set mobjLabel = objLabel End Property Private Sub mobjLabel_Click() Label1.Caption = mobjLabel.Caption Me.Show End Sub
------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
 
 Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 23. Mai. 2006 19:48 <-- editieren / zitieren --> Unities abgeben:          Nur für runkelruebe
Hallo Nicole, ich übersah "Doppelklick". Dann muss das Ereignis natürlich so aussehen: Code:
Private Sub mobjLabel_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Label1.Caption = mobjLabel.Caption Me.Show End Sub
Edit: Der Doppelklick wird in einer Tabelle etwas eigenartig interpretiert. Aber so geht's:
Code:
Private Sub mobjLabel_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Cancel = True Label1.Caption = mobjLabel.Caption Me.Show End Sub
------------------ Gruß Nepumuk[Diese Nachricht wurde von Nepumuk am 23. Mai. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
 
 Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 23. Mai. 2006 20:04 <-- editieren / zitieren --> Unities abgeben:          Nur für runkelruebe
|
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 23. Mai. 2006 20:26 <-- editieren / zitieren --> Unities abgeben:         
Hallo nepumuk, erstmal Danke für's Helfen! aber nur nicht hetzen, ich versuche noch die label-Klasse zu verstehen, bin also noch ein Weilchen beschäftig sowas mit MSForms und OLEObject hatte ich noch dumpf im Kopf, aber natürlich nicht in dieser Reihenfolge. (Bei objOLEObject.Object sind mir einfach zuviele "Objects" drin, wer soll denn auf sowas kommen )Gruß, Nicole ------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
 
 Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 23. Mai. 2006 20:30 <-- editieren / zitieren --> Unities abgeben:          Nur für runkelruebe
|
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 23. Mai. 2006 20:57 <-- editieren / zitieren --> Unities abgeben:         
Nachdem ich Pfeife begriffen habe, daß ich die Datei einmal schließen und wiederöffnen muß, bevor das funktionieren kann  , läuft's fast. wir nähern uns! Auf dem ersten Blatt klappt es. Wechsel' ich aber danach das sheet, um auch an Tag 2 mal ins LV zu schauen: Laufzeitfehler s.Bilddanach geht's nicht mehr. Ich traue mir nicht zu, selber nach dem Fehler zu fahnden... Schaust Du wohl nochmal? ------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
 
 Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 23. Mai. 2006 21:10 <-- editieren / zitieren --> Unities abgeben:          Nur für runkelruebe
Hallo Nicole, du musst aber deinen Code im Modul des Userform anpassen!!! Wie schon geschrieben, zerstört das entladen des Forms die Klasse. Daher die Fehlermeldung ------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 23. Mai. 2006 21:25 <-- editieren / zitieren --> Unities abgeben:         
Klar, mein Fehler, nicht close, sondern hide ist das Zauberwort. Sorry und ein dickes Danke schön! Meine Monster Datei nimmt schlankere Formen an  Ich wünsche Dir noch einen Schönen Abend! Nicole ------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |