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