Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1832to1836
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

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

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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige