Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Alten Zellwert sichern - Fehlermeldung

Forumthread: Alten Zellwert sichern - Fehlermeldung

Alten Zellwert sichern - Fehlermeldung
15.06.2021 15:38:52
Dirk
Hallo VBA Profis,
ich habe ein Problem mit einem bestehenden VBA-Code.
Im März hatte ich einen Thread mit dem u.g. Code und der anhängenden Beispieldatei eröffnet. In der Beispieldatei klappt der Code gut, in einer anderen Datei kommt allerdings eine Fehlermeldung "Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert"!?
Ausgelöst wird die Meldung durch die Code-Zeile "Dim xDic As New Dictionary".
Habt ihr eine Idee warum der Code in der einen Datei klappt und in der anderen nicht (gleicher Rechner, gleiche Softwareversionen...)?
https://www.herber.de/bbs/user/146629.xlsm
Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary

Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xDCell As Range
Dim xHeader As String
Dim xCommText As String
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Previous value :"
x = xDic.Keys
For I = 0 To UBound(xDic.Keys)
Set xCell = Range(xDic.Keys(I))
Set xDCell = Cells(xCell.Row, Target.Column + 1)
xDCell.Value = ""
xDCell.Value = xDic.Items(I)
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim I, J As Long
Dim xRgArea As Range
On Error GoTo Label1
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Set xDependRg = Target.Dependents
If xDependRg Is Nothing Then GoTo Label1
If Not xDependRg Is Nothing Then
Set xDependRg = Intersect(xDependRg, Range("B:B,E:E,H:H"))
End If
Label1:
Set xRg = Intersect(Target, Range("B:B,E:E,H:H"))
If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
Set xChangeRg = xRg
Else
Application.EnableEvents = True
Exit Sub
End If
xDic.RemoveAll
For I = 1 To xChangeRg.Areas.Count
Set xRgArea = xChangeRg.Areas(I)
For J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Formula
Next
Next
Set xChangeRg = Nothing
Set xRg = Nothing
Set xDependRg = Nothing
Application.EnableEvents = True
End Sub
Danke schon einmal im Voraus
Gruß
Dirk
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Alten Zellwert sichern - Fehlermeldung
15.06.2021 16:08:40
Werner
Hallo,
das sollte auch so lauten:

Dim xDic As Object
Und im Code zum Erstellen des Dictionary Objects dann:

Set xDic = CreateObject(Scripting.Dictionary)
Gruß Werner
Als 'Dictionary' kann man nur deklarieren, ...
15.06.2021 20:04:57
Luc:-?
…Dirk,
wenn VBA dieser ObjektTyp bekannt ist. Da der aus VBS stammt, muss man entweder die ScriptingRuntime-DLL einbinden (VBE-Extras-Verweise) oder kann nur As Object deklarieren. Außerdem muss dann natürlich noch das Objekt geSetzt wdn, sonst ist es Nothing. Das geht so wie von Werner gezeigt, nur fehlte bei ihm etwas: Set xDic = CreateObject("Scripting.Dictionary")
Gruß, Luc :-?
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige