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

Probleme mit Laufzeifehler 13 Typen unverträglich

Probleme mit Laufzeifehler 13 Typen unverträglich
14.01.2004 08:04:13
Scotty
Guten Morgen,
habe eine Arbeitsmappe mit zwei Arbeitsblättern. 1. Blatt (tabelle1) 2. Blatt (Protokoll). Im Blatt Protokoll werden Änderungen aus Blatt 1 protokolliert. Im Blatt Protokoll sind untenstehende Makros. Das Protokollieren funktioniert ganz gut es gibt nur ein Problem. Wenn ich in Tabelle 1 einen Wert ändere, in dem ich einen Wert mit gedrückter linker Maustaste durch ziehen in eine andere Zelle kopiere, kommt die Fehlermeldung "Laufzeitfehler 13, Typen unverträglich" und es wird die Zeile: 'If InhaltNeu = "" Then' im Makro gelb markiert. Was mach ich falsch??

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
InhaltAlt = Target.Value
ZellAddress = Target.Address(False, False, xlA1)
End Sub


Private Sub worksheet_change(ByVal Target As Range)
Dim InhaltNeu, Benutzer As String, DatZeit
ZeilProt = Worksheets("Protokoll").Range("A1").CurrentRegion.Rows.Count + 1
InhaltNeu = Target.Value
If InhaltNeu = "" Then
InhaltNeu = "leer"
ElseIf InhaltAlt = "" Then
InhaltAlt = "leer"
End If
Benutzer = Application.UserName
DatZeit = Date + Time
With Worksheets("Protokoll")
.Cells(ZeilProt, 1).Value = ActiveSheet.Name
.Cells(ZeilProt, 2).Value = ZellAddress
.Cells(ZeilProt, 3).Value = InhaltAlt
.Cells(ZeilProt, 4).Value = InhaltNeu
.Cells(ZeilProt, 5).Value = Benutzer
.Cells(ZeilProt, 6).Value = DatZeit
End With
ZeilProt = ZeilProt + 1
End Sub

Schönen Dank schonmal an alle die helfen
Gruß Scotty

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Target
14.01.2004 11:01:16
Galenzo
Hallo Scotty,
das liegt wohl daran, daß das Target beim "Ziehen" aus mehreren Zellen besteht.
Versuche mal, explizit die 1.Zelle zuzuweisen, also
InhaltNeu = Target(1, 1).Value
Schreib' mal, wie's funktioniert...
mfg
AW: Target
14.01.2004 11:38:58
Scotty
Hi Galenzo,
habe dein Tipp auch bei Inhalt alt angewandt und die Fehlermeldung ist weg. jetzt gibt es das nächste Prob. es wird nicht mehr richtig protokolliert. Habe z. B. in F1 eine Formel, die aus verschiedenen Zellen etwas errechnet. In F1 kommt dann z. B. 24 raus. Wenn ich diese Formel dann nach F2, F3... "ziehe" und in F2 dann 34 und F3 35 rauskommt, wird im Protokoll angezeigt, das Zelle F2 von 24 in 24 geändert wurde, obwohl das nicht richtig ist. Das gleiche bei F3 usw. Das Makro nimmt immer den Wert der Ausgangszelle. Hast du vielleicht noch ne Idee. Wär echt nett.
Gruß Scotty
Anzeige
AW: mußtu alle Zellen protokollieren
14.01.2004 13:46:56
Galenzo
Das geht dann so nicht.
Wenn du die Änderung mehrerer Zelle protokollieren willst, dann solltest du ALLE diese Zellen des Bereiches durchlaufen und die Veränderungen protokollieren.
So wie du das bisher machst, funzt es nur für 1 Zelle. Mit meinem Tip wird für alle Zellen eines Bereiches, der verändert wird, die Änderung der 1. Zelle protokolliert.
Bastle am besten was mit "for each...".
Viel Erfolg dabei!
AW: mußtu alle Zellen protokollieren
14.01.2004 13:59:19
Scotty
Ich selbst würde beim Ändern der Zellen auch auf das "ziehen" verzichten. Nur greifen auf diese Tab. mehrere zu und logischerweise wird der Einfachheit wegen durch "ziehen" kopiert und geändert. Mal schauen, ob ich das Prob irgendwie in den Griff bekomme. Schade das dein Tipp nicht funktioniert hat.
Danke trotzdem für deine Hilfe
schönen Tag noch
Gruß Scotty
Anzeige
So geht es nicht
14.01.2004 17:01:00
Reinhard
Hi Scotty,
nachfolgender Code würde funktionieren , wenn Excel beim 'herunterziehen' erst selektion-Change auslösen, dann die Werte ändern und dann change auslösen würde.
Macht es aber nicht.
Beim runterziehen werden schon die neuen Werte eingetragen, dann erst selektionchange ausgelöst. Das erkennst du daran dass selektion_change noch an der msgbox hängt, während schon die Werte neu da stehen. Somit liest man dann die 'neuen' werte als 'alt' ein.
Vielleicht wäre es eine Idee das Blatt in einem andern Blatt zu spiegeln, dann bei Change-ereignissen die beiden Blätter vergleichen, aktualisieren usw.
Gruß
Reinhard
Dim InhaltNeu()
Dim InhaltAlt()
Dim Zelladdress()

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "selekchange"
anz = Target.Cells.Count
ReDim InhaltAlt(anz)
ReDim Zelladdress(anz)
n = 1
For Each Zelle In Target.Cells
InhaltAlt(n) = Zelle.Value
If InhaltAlt(n) = "" Then InhaltAlt(n) = "leer"
Zelladdress(n) = Zelle.Address
n = n + 1
Next Zelle
End Sub


Private Sub worksheet_change(ByVal Target As Range)
MsgBox "change"
Dim Benutzer As String, DatZeit As String
ZeilProt = Worksheets("Protokoll").Range("A1").CurrentRegion.Rows.Count + 1
anz = Target.Cells.Count
ReDim InhaltNeu(anz)
n = 1
For Each Zelle In Target.Cells
InhaltNeu(n) = Zelle.Value
If InhaltNeu(n) = "" Then InhaltNeu(n) = "leer"
n = n + 1
Next Zelle
Benutzer = Application.UserName
DatZeit = Date + Time
With Worksheets("Protokoll")
For n = 1 To anz
.Cells(ZeilProt, 1).Value = ActiveSheet.Name
.Cells(ZeilProt, 2).Value = Zelladdress(n)
.Cells(ZeilProt, 3).Value = InhaltAlt(n)
.Cells(ZeilProt, 4).Value = InhaltNeu(n)
.Cells(ZeilProt, 5).Value = Benutzer
.Cells(ZeilProt, 6).Value = DatZeit
ZeilProt = ZeilProt + 1
InhaltAlt(n) = InhaltNeu(n)
Next n
End With
End Sub

Anzeige
Danke für deine Ansätze
15.01.2004 09:45:47
Scotty
Hi Reinhard,
danke dir für deine Bemühungen und deine Ansätze. Vielleicht kann ich auf diesen Weg eine brauchbare Lösung finden.
Liebe Grüße
Scotty
AW: Probleme mit Laufzeifehler 13 Typen unverträgl
14.01.2004 11:49:12
Reinhard
Hi Scotty,
daran liegt m.E. nicht der fehler, aber deine Variablendeklaration ist nicht richtig. Option Explicit meckert zwar nicht weil die variablen 'bekannt' sind durch Dim, aber sie sind nicht deklariert/definiert.
man sieht das wenn du folgenden Code durchlaufen lässt:

Option Explicit
Sub test()
Dim InhaltNeu, Benutzer As String, DatZeit
MsgBox TypeName(InhaltNeu) '---->empty
MsgBox TypeName(Benutzer)  '---->string
MsgBox TypeName(DatZeit)   '---->empty
End Sub

ergo müßte es wie folgt aussehen:
Dim InhaltNeu as string, Benutzer As String, DatZeit as string
Ansonsten denke ich wie Galenzo dass am Target was 'faul' ist.
Gruß
Reinhard
Anzeige
AW: Probleme mit Laufzeifehler 13 Typen unverträgl
14.01.2004 13:08:38
Scotty
Hi Reinhard,
danke für deine Antwort. Leider ändert sie auch nichts an meinen Prob. Das zweite Prob, welches ich Galenzo beschrieben hatte, besteht immer noch. Hab Option Explicit wie von dir beschrieben geändert, leider ohne Auswirkungen. Es ist alles wie vorher. Leider. Hast du noch ne Idee??
Gruß Scotty

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige