Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1408to1412
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

Probleme bei einer Klasse

Probleme bei einer Klasse
12.02.2015 04:56:32
Patrick
Hallo zusammen,
ich scheitere gerade daran in einer Klasse in bei "Private Sub Class_Initialize()" meine Label anzusprechen.
In der Methode "Private Sub MyLabel_DblClick(ByVal Cancel As MSForms.ReturnBoolean)" schaffe ich das Problemlos. Mir ist das nicht ganz klar, den schließlich wird es mir auch vervollständigt, von daher müsste die Funktion ja da sein.
Auch wenn ich hier nur per MsgBox den Namen ausgebe, will ich eigentlich die .BackColor ändern. _
Habe es nur einmal zum Testen probiert, aber ich kriege es nicht hin. Vielen Dank für euere Hilfe.
Gruß Patrick
Hier mein Code dazu:
Option Explicit
Dim WinOrMac() As New clsWinOrMac

Private Sub UserForm_Initialize()
Dim cnt As Control
Dim MaWiLabelCount As Integer
Dim i As Integer
MaWiLabelCount = 0
' Anzahl der CommandButton  ermitteln
For Each cnt In Controls
'Label sammeln für das Umfärben auf Windows
If TypeName(cnt) = "Label" Then
MaWiLabelCount = MaWiLabelCount + 1
End If
Next cnt
ReDim Preserve WinOrMac(MaWiLabelCount)
For i = 1 To MaWiLabelCount
Set WinOrMac(i).MyLabel = Controls("Label" & i)
Next i
End Sub

Public WithEvents MyLabel As MSForms.Label

Private Sub Class_Initialize()
MsgBox MyLabels.Caption
Me.Label.BackColor = &H8000000F
If InStr(Application.OperatingSystem, "Macintosh") Then
Else:
End If
End Sub
Private Sub MyLabel_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox MyLabel.Name
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Probleme bei einer Klasse
16.02.2015 14:28:34
Tino
Hallo,
versuch es mal so rum.
Normalerweise sollte bei dir in der Klassen bei Me.Label... ein Fehler auftauchen,
der Klasse ist der Name Label nicht bekannt?
kommt als Code in UserForm1
Option Explicit 
 
Dim WinOrMac() As New clsWinOrMac 
 
Private Sub UserForm_Initialize() 
Dim cnt As Control 
Dim i As Integer 
 
'Array Anzahl vorbelegen 
Redim Preserve WinOrMac(Me.Controls.Count) 
 
'Schleife über alle Controls 
For Each cnt In Controls 
  'Label sammeln für das Umfärben auf Windows 
   If TypeName(cnt) = "Label" Then 
      Set WinOrMac(i).MyLabel = cnt 
      If InStr(Application.OperatingSystem, "Macintosh") Then 
        MsgBox cnt.Caption 
      Else 
        cnt.BackColor = &H8000000F 
      End If 
      i = i + 1 'Zähler +1 
  End If 
Next cnt 
 
'Array benötigte Anzahl 
Redim Preserve WinOrMac(i - 1) 
End Sub 
 
Private Sub UserForm_Terminate() 
Erase WinOrMac 
End Sub 
kommt als Code in clsWinOrMac
Option Explicit 
 
Public WithEvents MyLabel As MSForms.Label 
 
Private Sub MyLabel_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
    MsgBox MyLabel.Name 
End Sub 
Gruß Tino

Anzeige
AW: Probleme bei einer Klasse
17.02.2015 18:49:21
Patrick
Hallo Tino,
erst einmal vielen lieben Dank für deine Antwort und deinen Lösungsvorschlag. Das Problem ist, das ich manchmal auf einem PC arbeite, und es anscheinend unterschiede zum Mac gibt. Wenn ich auf dem PC eine Uferform erstelle und diese am Mac starte, sieht die genau so bescheiden aus wie anders herum. Daher wollte ich eine Klasse habe, die die Unterschiede ausbessert oder vertuscht. Mit der Klasse bin ich dann aber nicht weiter gekommen. Wie du es schon richtig erkannt hast, kennt die Klasse die Uferform nicht, weswegen es nicht geklappt hat, wie ich es mir vorgestellt habe. Nun übergebe ich die Uferform als Objekt eben einer Prozedur in einem normalen Modul. Damit habe ich soweit ich das bisher gesehen habe, alle Möglichkeiten die ich brauche. Ob es in einer Klasse auch gehen würde, habe ich bisher nicht versucht. Der Vorteil wenn ich alle Objekte der Userform zur verfügung habe, ist das ich alle Dinge auf einmal anpassen kann. Leider kann ich kein Foto anhängen an dem du siehst, wie es aussieht. Es liegt es ja nicht nur an den Farben, sondern auch daran das die Objekte zum Teil unterschiedlich groß sind.
Vielen Dank, Gruß Patrick
Private Sub UserForm_Terminate()
Erase WinOrMac
End Sub
Aber eine Frage hätte ich noch an dich. Die Zeile zerstört die Klasse. Müssen Klassen immer zerstört werden?
Wo liegt der Unterschiet dazu wenn man etwas auf NOTHING setzt? Oder ist das dann nur bei Objekten der Fall? Glaube das fehlt noch in meinem Code. Habe mich damit aber noch nie beschäftig.
In der UserForm
Private Sub UserForm_Initialize()
MacOrWin.Prepare_ForSystem (Me) 'Userform für das System einrichten
End Sub

Im Modul MacOrWin
Public Sub Prepare_ForSystem(objForm As Object)
'UserForm für das entsprechende System vorbereiten
Dim cnt As Control
Dim theColor As String
'Überprüfen ob es ein Macintosh ist
If InStr(Application.OperatingSystem, "Macintosh") Then
'Farbeinstellungen für den Mac
theColor = &H80000010
Else:
'Einstellungen für den Windowsrechner
theColor = &H8000000F
End If
'Label und Multipages umfärben
For Each cnt In objForm
If TypeName(cnt) = "Label" Or _
TypeName(cnt) = "MultiPage" Then
cnt.BackColor = theColor
End If
Next cnt
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige