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

Makro stürzt ständig ab, warum?

Makro stürzt ständig ab, warum?
09.07.2014 11:57:00
Bert Hofer

Hallo liebe Helfer!
Mein Makro, dass dynamisch generierten Code aufrufen soll, stürzt immmer wieder ab, warum?
https://www.herber.de/bbs/user/91433.xlsm
Danke für jede Hilfe!
LG
Bert

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro stürzt ständig ab, warum?
09.07.2014 13:26:19
Nepumuk
Hallo,
eine Klasse für die gleichen Objekte welche dann für jedes der Objekte eine identische Prozedur enthalten ist Unsinn.
1. Schreibe ein Klassenmodul mit einer Prozedur für ein Diagramm.
2. Gehe mit einer Schleife über alle ChartObjects-Objekt, erstelle für jedes Chart eine Instanz der Klasse und weise das Chart an die Event-Variable.
3. Fertig.
Mehr Code ist nicht notwendig:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not Saved Then
        Select Case MsgBox("Sollen Ihre Änderungen in '" & Name & _
                    "' gespeichert werden", vbExclamation Or vbYesNoCancel)
            Case vbYes
                Save
            Case vbNo
                Saved = True
            Case vbCancel
                Cancel = True
        End Select
    End If
    If Not Cancel Then Call TerminateClass
End Sub

Private Sub Workbook_Open()
    Call InitializeClass
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private lobjCharClassCollection As Collection

Public Sub InitializeClass()
    
    Dim objChartObject As ChartObject
    Dim objCharClass As clsChart
    
    Set lobjCharClassCollection = New Collection
    
    For Each objChartObject In Tabelle1.ChartObjects
        
        Set objCharClass = New clsChart
        
        Set objCharClass.Chart = objChartObject.Chart
        
        lobjCharClassCollection.Add objCharClass
        
        Set objCharClass = Nothing
        
    Next
End Sub

Public Sub TerminateClass()
    Set lobjCharClassCollection = Nothing
End Sub

' **********************************************************************
' Modul: clsChart Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private WithEvents mobjChart As Chart

Private Sub Class_Terminate()
    Set Chart = Nothing
End Sub

Friend Property Get Chart() As Chart
    Set Chart = mobjChart
End Property

Friend Property Set Chart(ByRef probjChart As Chart)
    Set mobjChart = probjChart
End Property

Private Sub mobjChart_MouseDown(ByVal Button As Long, _
        ByVal Shift As Long, ByVal x As Long, ByVal y As Long)

    
    Dim strNewName As String
    
    If Button = 1 Then
        
        If Len(Chart.Parent.Name) > 0 Then
            
            strNewName = InputBox("Geben Sie den Namen für das neue " & _
                "Diagramm ein! Der alte Name ist: " & Chart.Parent.Name)
            
            If Len(strNewName) > 0 Then Chart.Parent.Name = strNewName
            
        End If
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: Makro stürzt ständig ab, warum?
09.07.2014 14:08:16
Bert Hofer
Hallo Nepumuk!
Danke dir recht herzlich!
Du hast mir hier wirklich, wirklich weitergeholfen!
LG
Bert

AW: Makro stürzt ständig ab, warum?
09.07.2014 16:52:35
Bert Hofer
Hallo nochmal!
Wie bekomme ich jetzt eine Userform mit einer Textbox in die Klasse, dass der Name aus der Textbox genommen wird und mit einer OK Schaltfläche dann der Diagrammname umbenannt wird?
LG
Bert

AW: Makro stürzt ständig ab, warum?
09.07.2014 17:01:18
Bert Hofer
Hallo nochmal!
Wie bekomme ich jetzt eine Userform mit einer Textbox in die Klasse, dass der Name aus der Textbox genommen wird und mit einer OK Schaltfläche dann der Diagrammname umbenannt wird?
LG
Bert

AW: Makro stürzt ständig ab, warum?
10.07.2014 08:34:59
Nepumuk
Hallo,
nicht das Userform in die Klasse, sondern das Klassenobjekt (das Diagramm) in das Userform. Denn das Umbenennen des ChartObject-Objektes erfolgt logischerweise im Userform nicht in der Klasse des Charts.
Das Userform muss also wissen um welches Diagramm es sich handelt. Dazu definieren wir im Modul des Userform eine Eigenschaft (Property) an welche das Chart aus der Klasse übergeben wird.
Beispiel:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not Saved Then
        Select Case MsgBox("Sollen Ihre Änderungen in '" & Name & _
                    "' gespeichert werden", vbExclamation Or vbYesNoCancel)
            Case vbYes
                Save
            Case vbNo
                Saved = True
            Case vbCancel
                Cancel = True
        End Select
    End If
    If Not Cancel Then Call TerminateClass
End Sub

Private Sub Workbook_Open()
    Call InitializeClass
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private lobjChartClassCollection As Collection

Public Sub InitializeClass()
    
    Dim objChartObject As ChartObject
    Dim objChartClass As clsChart
    
    Set lobjChartClassCollection = New Collection
    
    For Each objChartObject In Tabelle1.ChartObjects
        
        Set objChartClass = New clsChart
        
        Set objChartClass.Chart = objChartObject.Chart
        
        lobjChartClassCollection.Add objChartClass
        
        Set objChartClass = Nothing
        
    Next
End Sub

Public Sub TerminateClass()
    Set lobjChartClassCollection = Nothing
End Sub

' **********************************************************************
' Modul: clsChart Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private WithEvents mobjChart As Chart

Private Sub Class_Terminate()
    Set Chart = Nothing
End Sub

Friend Property Get Chart() As Chart
    Set Chart = mobjChart
End Property

Friend Property Set Chart(ByRef probjChart As Chart)
    Set mobjChart = probjChart
End Property

Private Sub mobjChart_MouseDown(ByVal Button As Long, _
        ByVal Shift As Long, ByVal x As Long, ByVal y As Long)

    
    With UserForm1
        
        Set .Chart = Chart
        Call .Show
        
    End With
End Sub

' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private mobjChart As Chart

Public Property Get Chart() As Chart
    Set Chart = mobjChart
End Property

Public Property Set Chart(ByRef probjChart As Chart)
    Set mobjChart = probjChart
End Property

Private Sub CommandButton1_Click() 'OK-Button
    If TextBox1.TextLength > 0 Then
        Chart.Parent.Name = TextBox1.Text
        CommandButton2.Value = True
    Else
        Call MsgBox("Bitte einen Namen eingeben.", vbExclamation, "Hinweis")
    End If
End Sub

Private Sub CommandButton2_Click() 'Abbrechen-Button
    Call Unload(Me)
End Sub

Private Sub UserForm_Terminate()
    Set Chart = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: Makro stürzt ständig ab, warum?
12.07.2014 14:42:49
borntoflybert
Hallo Nepumuk!
Konnte erst jetzt antworten. Vielen Dank für die Hilfe!
LG
Bert

219 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige