Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
680to684
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
680to684
680to684
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

nochmal klassenmodule und übergabe werte

nochmal klassenmodule und übergabe werte
14.10.2005 12:02:11
chris
Hallo VBA Profis,
habe eine frage zu meinem Code den ich erstellet habe.
Es geht in dem Code um folgende zeile.
Set aCommbutt(intCheckCount).objDynCommandbutton = Sheets("DynCommandButton").OLEObjects(intJ).Object
Wozu ist die gut ?
ich überwache immer wieder den wert "Sheets("DynCommandButton").OLEObjects(intJ).Object" also das was übergeben wird und da steht immer nur "Falsch" also wert(inhalt)
Wazu ist das dann überhaupt gut das der Wert übergeben wird ?
Vielen Dank
For intJ = 1 To Sheets("DynCommandButton").OLEObjects.Count
nurtest1 = TypeName(Sheets("DynCommandButton").OLEObjects(intJ).Object)
If TypeName(Sheets("DynCommandButton").OLEObjects(intJ).Object) = "CommandButton" Then
intCheckCount = intCheckCount + 1

ReDim Preserve aCommbutt(1 To intCheckCount)
Set aCommbutt(intCheckCount).objDynCommandbutton = Sheets("DynCommandButton").OLEObjects(intJ).Object


nurtest2 = Sheets("DynCommandButton").OLEObjects(intJ).Object

End If
Next
End Sub

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nochmal klassenmodule und übergabe werte
14.10.2005 12:56:07
Nepumuk
Hallo Chris,
du siehst nur den Defaul - Eigenschaft des Buttons. Das ist die Value - Eigenschaft. Die ist bei einem Commandbutton immer False, außer in dem Moment, in dem er gedrückt wird.
Gruß
Nepumuk

zusatz von mir
14.10.2005 13:43:10
mir
Danke für die Antwort Nepumuk.
Aber ganz klar ist mir das nicht.Aber um das zu erklären müsste ich Dir meinen Code vorführen.
das mach ich später auch würde mich freuen wenn du heute Abend noch mal in den Beitrag schauen würdest.
Vielen Dank !!!
AW: nochmal klassenmodule und übergabe werte
14.10.2005 14:06:14
hier
Also ich versuch mal zu erklären wo mein Verständnissproblem liegt.
Ich habe mit Hilfe ein Makro Programmiert mit 1 Klassenmodul.
Im Klassenmodul steht fogendes
Public WithEvents objDynCommandbutton As CommandButton

Private Sub objDynCommandbutton_Click()
MsgBox "Hallo du hast " & objDynCommandbutton.Caption & " geklickt !", vbInformation
End Sub

Im Modul selbst werden im Tabellenblatt Buttons angelegt für jedes Sheet einer.
Jetzt erreiche ich durch mein Makro wenn ich eine Button klicke ,das eine Msgbox kommt mit dem Namen des geklickten Buttons.
Und wie ich das bis jetzt sehe wird hier dem Button ein Name zugewiesen damit das Programm dan weiß welcher geklickt wurde.
Set aCommbutt(intJ).objDynCommandbutton = ActiveSheet.OLEObjects(intJ).Object
und hier steht ja in ActiveSheet.OLEObjects(intJ).Object "Falsch" als Wert.
Was wird dann dem Set aCommbutt(intJ).objDynCommandbutton zugewiesen? Falsch ?
Ich verstehe es nicht.Würde mich freuen wenn du oder jemand mir das erklären könnte.
Hier noch das Makro was in Modul1 steht.
Option Explicit
Public aCommbutt() As New cls_Commandbuttons
Public intCheckCount As Integer
Dim pos As Integer
Dim mysheet As Worksheet
Dim nurtest1 As String
Dim nurtest2 As String
Dim nurtest3 As String
Sub buttons_löschen_starten()
Dim objDynCommandbuttons As OLEObject
For Each objDynCommandbuttons In ActiveSheet.OLEObjects
nurtest3 = TypeName(objDynCommandbuttons.Object)

If TypeName(objDynCommandbuttons.Object) = "CommandButton" Then
objDynCommandbuttons.Delete
End If
Next
End Sub
Sub erstellen_buttons_starten()
'Makroaufruf mit Variablenübergabe von "ActiveSheet"
ChbDynamischErzeugen ActiveSheet
End Sub
Public Function ChbDynamischErzeugen(wksSheet As Worksheet)
Dim chbCommandbutton As OLEObject
pos = 20
For Each mysheet In ActiveWorkbook.Worksheets
Set chbCommandbutton = wksSheet.OLEObjects.Add(ClassType:="Forms.commandbutton.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=10, _
Top:=pos, _
Width:=100, _
Height:=20)


chbCommandbutton.Object.Caption = mysheet.Name
Set chbCommandbutton = Nothing

'Position der CommandButtons
pos = pos + 20
Next
Application.OnTime Now + TimeValue("00:00:01"), "OLE_Class_Setten"
End Function
Sub OLE_Class_Setten()
Dim intJ As Integer
intCheckCount = 0
For intJ = 1 To ActiveSheet.OLEObjects.Count
If TypeName(ActiveSheet.OLEObjects(intJ).Object) = "CommandButton" Then

ReDim Preserve aCommbutt(1 To intJ)
Set aCommbutt(intJ).objDynCommandbutton = ActiveSheet.OLEObjects(intJ).Object

End If
Next
End Sub
Vielen Dank !!!!!!!!!!!
Anzeige
AW: nochmal klassenmodule und übergabe werte
14.10.2005 14:38:44
Nepumuk
Hallo Chris,
der Klasse wird ein Verweis auf das Objekt übergeben. Intern ist es ein bisschen komplizierter, da wird in der Klasse ein Pointer auf einen Pointer erzeugt. Wenn du mit der Maus über
Set aCommbutt(intJ).objDynCommandbutton = ActiveSheet.OLEObjects(intJ).Object
gehts, wird dir die Default - Eigenschaft angezeigt. An die Pointer kommst du so:
Sub OLE_Class_Setten()
    Dim intJ As Integer
    intCheckCount = 0
    For intJ = 1 To ActiveSheet.OLEObjects.Count
        If TypeName(ActiveSheet.OLEObjects(intJ).Object) = "CommandButton" Then
            Redim Preserve aCommbutt(1 To intJ)
            Set aCommbutt(intJ).objDynCommandbutton = ActiveSheet.OLEObjects(intJ).Object
            Debug.Print ObjPtr(ActiveSheet.OLEObjects(intJ).Object)
            Debug.Print ObjPtr(aCommbutt(intJ).objDynCommandbutton)
        End If
    Next
End Sub

Die Adressen der Objekt im Stackframe werden im Dirktfenster ausgegeben.
Ich würde an deiner Stelle das übergeben an die Klasse direkt in das Erstellmakro der Buttons einbauen. Da hast du das Objekt schon in einer Variablen, dann musst du im Makro "OLE_Class_Setten" nicht nochmal nach den Buttons suchen.
Gruß
Nepumuk

Anzeige
AW: nochmal klassenmodule und übergabe werte
14.10.2005 18:51:33
chris
Hallo Nepumuk, das mit dem Direltfenster werd ich gleich mal probieren.
Danke schon mal für den guten Tipp !!!
Aber das verstehe ich nicht.Bin leider noch zu frisch im VBA :(((
Ich würde an deiner Stelle das übergeben an die Klasse direkt in das Erstellmakro der Buttons einbauen. Da hast du das Objekt schon in einer Variablen, dann musst du im Makro "OLE_Class_Setten" nicht nochmal nach den Buttons suchen.
AW: nochmal klassenmodule und übergabe werte
14.10.2005 18:56:35
Nepumuk
Hi,
na so:
Public Function ChbDynamischErzeugen(wksSheet As Worksheet)
    Dim chbCommandbutton As OLEObject
    Dim intJ As Integer
    pos = 20
    For Each mysheet In ActiveWorkbook.Worksheets
        Set chbCommandbutton = wksSheet.OLEObjects.Add(ClassType:="Forms.commandbutton.1", _
            Link:=False, DisplayAsIcon:=False, _
            Left:=10, _
            Top:=pos, _
            Width:=100, _
            Height:=20)
        chbCommandbutton.Object.Caption = mysheet.Name
        
        intJ = intJ + 1
        Redim Preserve aCommbutt(1 To intJ)
        Set aCommbutt(intJ).objDynCommandbutton = chbCommandbutton
        
        Set chbCommandbutton = Nothing
        'Position der CommandButtons
        pos = pos + 20
    Next
    Application.OnTime Now + TimeValue("00:00:01"), "OLE_Class_Setten"
End Function

Gruß
Nepumuk

Anzeige
AW: nochmal klassenmodule und übergabe werte
14.10.2005 19:25:49
chris
HI Nepumuk,
du bist der beste :)
Aber ich bekomm das scheiß ding nun gar nicht mehr zu laufen:(
Hab die datei ausversehen gelöscht und versuche sie neu herzustellen und nix geht.Kommt immer wieder ein fehler.
Ich kopier die folgenden Module nur was mache ich falsch :(
Und zu deinem letzten Beitrag.Du rufst ja dann die OLE_Class_Setten trotzdem auf.Ich hab mir gedacht das kann ich mir sparen dann.Aber ist auch nicht schlimm weiter.
Ich hoffe ich versteh das ganze auch mal das wäre super.
Hier meine Versuche das ganze wieder hinzubekommen.
Ins Klassenmodul kopiere ich.
Im Klassenmodul steht fogendes
Public WithEvents objDynCommandbutton As CommandButton

Private Sub objDynCommandbutton_Click()
MsgBox "Hallo du hast " & objDynCommandbutton.Caption & " geklickt !", vbInformation
End Sub

'---------------------------------------------------------------
und ins Modul1 kopiere ich.
Option Explicit
Public aCommbutt() As New cls_Commandbuttons
Public intCheckCount As Integer
Dim pos As Integer
Dim mysheet As Worksheet
Dim nurtest1 As String
Dim nurtest2 As String
Dim nurtest3 As String
Sub buttons_löschen_starten()
Dim objDynCommandbuttons As OLEObject
For Each objDynCommandbuttons In ActiveSheet.OLEObjects
nurtest3 = TypeName(objDynCommandbuttons.Object)
If TypeName(objDynCommandbuttons.Object) = "CommandButton" Then
objDynCommandbuttons.Delete
End If
Next
End Sub
Sub erstellen_buttons_starten()
'Makroaufruf mit Variablenübergabe von "ActiveSheet"
ChbDynamischErzeugen ActiveSheet
End Sub
Public Function ChbDynamischErzeugen(wksSheet As Worksheet)
Dim chbCommandbutton As OLEObject
pos = 20
For Each mysheet In ActiveWorkbook.Worksheets
Set chbCommandbutton = wksSheet.OLEObjects.Add(ClassType:="Forms.commandbutton.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=10, _
Top:=pos, _
Width:=100, _
Height:=20)
chbCommandbutton.Object.Caption = mysheet.Name
Set chbCommandbutton = Nothing
'Position der CommandButtons
pos = pos + 20
Next
Application.OnTime Now + TimeValue("00:00:01"), "OLE_Class_Setten"
End Function
Sub OLE_Class_Setten()
Dim intJ As Integer
intCheckCount = 0
For intJ = 1 To ActiveSheet.OLEObjects.Count
If TypeName(ActiveSheet.OLEObjects(intJ).Object) = "CommandButton" Then
ReDim Preserve aCommbutt(1 To intJ)
Set aCommbutt(intJ).objDynCommandbutton = ActiveSheet.OLEObjects(intJ).Object
End If
Next
End Sub
Anzeige
AW: nochmal klassenmodule und übergabe werte
14.10.2005 23:03:17
chris
Guten Abend Nepumuk,
bin wieder da.Also du hast recht.Deine Datei läuft einwandfrei.
Jetzt habe ich noch einmal versucht die datei nachzubauen also mit allen codes aus deiner Datei.
Und meiner meinung nach ist sie identisch.Aber meine läuft nicht.
Wäre super wenn du noch mal einen Blick darauf werfen könntest.
Danke
P.s ich hau mir jetzt noch den rest der nacht um die Ohren um den unterschied zu finden :)
wenn ich in noch rausffinde werde ichs gleich posten.
https://www.herber.de/bbs/user/27519.zip
Anzeige
AW noch ein zusatz
14.10.2005 23:11:26
cbpanther1@gmx.de
Hallo kleiner zusatz noch.
Mir ist gerade was aufgefallen was mich z3war auch nicht weiter bringt aber ich wollte es posten.
UNd zwar wenn ich im Klassenmodul in deiner datei bin und in dieser Zeile
Public WithEvents objDynCommandbutton As MSForms.CommandButton
eingebe
Public WithEvents objDynCommandbutton As MSForms.
erscheint nach der eingabe des Punktes . ein menü in dem ich die ereignisse auswählen kann wie z.b Commandbutton oder checkbos usw..
wenn ich das in meiner datei mache habe nich ganz andere wie z.b Commandbarbutton oder so.
und wenn ich nach dem objDynCommandbutton As leertaste klicke habe ich gar nicht die möglichkeit msForms auszuwählen.
Woran liegt das ?
Danke Christian
Anzeige
AW: AW noch ein zusatz
14.10.2005 23:49:52
chris
Hallo, ich habe jetzt mein Excel Komplett neu installiert und habe immer noch keine Msforms :((
Was kann ich machen ?
AW: AW noch ein zusatz
14.10.2005 23:54:08
Nepumuk
Hallo Christian,
bei dir fehlt der Verweis auf "MicrosoftForms 2.0 Object Library". Daraus stammt nämlich der Commandbutton.
Gruß
Nepumuk

AW: AW noch ein zusatz
15.10.2005 00:08:34
chris
Juhuuuu , jetzt hab ich mein Excel neu INstalliert und das war nicht mal nötig :)
Aber wie schaffe ich den verweis zu installieren ohne das ich eine Mappe in den Excel XLStart kopieren muss ?
Weil wenn ich im VBA editor die MSforms anklicke fragt mich excel wo ich die Mappe hinspeichern möchte.Und wenn ich Sie z.b auf den Desktop speicher habe ich die verweiße auch nur installiert wenn ich die datei öffne.
Geht das Anders ? Wenn ja wie.
Und danke schon mal das wars !!!
Anzeige
AW: AW noch ein zusatz
15.10.2005 00:15:02
Nepumuk
Hallo Christian,
in VBA - Editor unter Extras - Verweise suchst du nach "MicrosoftForms 2.0 Object Library" und aktivierst ihn. Andere Möglichkeit, du fügst ein Userform in die Mappe ein und löschst es wieder.
Gruß
Nepumuk

AW: AW noch ein zusatz
15.10.2005 00:22:57
chris
Danke Nepumuk,
ich habe es jetzt so gelöst.
Habe das "MicrosoftForms 2.0 Object Library" installiert unter Verweise.Also Hacken gesetzt.
Dann habe ich die Exceldatei als Addin gespeichert.Und jetzt beim Start von Excel lass ich immer dieses Addin laden und so habe ich immer die MSforms installiert:)
Danke vielmals für deine Hilfe.Hast mir wirklich super weitergeholfen heute den ganzen Tag :))
Schönes Wochenende !!!!
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige