Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1556to1560
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

Ausnahme für Macrostart

Ausnahme für Macrostart
22.05.2017 16:16:30
Thomas
Hallo excelfreunde,
ich möchte mit diesem Makro die Eingaben in einer Arbeitsmappe zu protokollieren.
Dazu habe ich auch ein aus meiner Sicht super Makro gefunden.
Aber wie es so ist fehlt noch eine Kleinigkeit.
Es protokolliert alle eingaben auch dann wenn ich einzelne Zellen kopiere. Leider bekomme ich eine Fehlermeldung " Typenunverträglichkeit" wenn mehr als nur eine Zelle kopiert wird.
Weiss jemand wie ich dies lösen könnte?
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'If Target.Address = Target.EntireRow.Address Then _
'MsgBox "Es sind " & Target.Rows.Count & " Zeilen selektiert", , Target.Address
Dim intZeile As Integer
If Sh.Name = "Änderungen" Then Exit Sub
If sValue  Target.Value Then
With Worksheets("Änderungen")
Application.EnableEvents = False
intZeile = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Cells(intZeile, 1).Value = Sh.Name
.Cells(intZeile, 2).Value = Sh.Cells(Target.Row, 1)
.Cells(intZeile, 3).Value = Sh.Cells(1, Target.Column)
.Cells(intZeile, 4).Value = sValue
.Cells(intZeile, 5).Value = Target.Value
.Cells(intZeile, 6).Value = Environ("username")
.Cells(intZeile, 7).Value = Date
.Cells(intZeile, 8).Value = Time
.Cells(intZeile, 9).Value = Target.Address
Application.EnableEvents = True
End With
End If
End Sub
habt schon mal besten dank für eurer Interesse an meinem Problem.
MFG Sipel

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ausnahme für Macrostart
22.05.2017 16:27:58
UweD
Hi
wo kommt den sValue her ?
Bitte mal Beispielmappe
AW: Ausnahme für Macrostart
22.05.2017 18:21:13
Daniel
Hi
das Problem ist, das viele bei solchen Aufgabenstellungen übersehen, dass TARGET auch mal mehr als eine Zelle sein kann.
In diesem Falle wird dann Target.value zu einem Array, welches nicht wie ein Einzelwert behandelt werden darf.
Man benötigt hier dann eine Schleife über die Zellen des Arrays.
Ebenso musst du beim Speichern des Alt-Wertes im Selection-Change-Event dies berücksichtigen.
ein Code hierfür könnte so aussehen.
Option Explicit
Dim WertAlt As Object
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Zelle As Range
Dim intZeile As Integer
If Sh.Name = "Änderungen" Then Exit Sub
Application.EnableEvents = False
For Each Zelle In Target
If WertAlt(Zelle.Address)  Zelle.Value Then
With Worksheets("Änderungen")
intZeile = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Cells(intZeile, 1).Value = Sh.Name
.Cells(intZeile, 2).Value = Sh.Cells(Zelle.Row, 1)
.Cells(intZeile, 3).Value = Sh.Cells(1, Zelle.Column)
.Cells(intZeile, 4).Value = WertAlt(Zelle.Address)
.Cells(intZeile, 5).Value = Zelle.Value
.Cells(intZeile, 6).Value = Environ("username")
.Cells(intZeile, 7).Value = Date
.Cells(intZeile, 8).Value = Time
.Cells(intZeile, 9).Value = Zelle.Address
End With
End If
Next
Application.EnableEvents = True
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim Zelle As Range
Set WertAlt = CreateObject("Scripting.dictionary")
For Each Zelle In Target
Select Case VarType(Zelle.Value)
Case vbEmpty
Case Else: WertAlt(Zelle.Address) = Zelle.Value
End Select
Next
End Sub
Beachte, dass du jetzt nicht mehr alle Zellen selektieren solltest, denn dass sind dann zu viele Zellen und die Schleife läuft ne Weile.
Gruß Daniel
Anzeige
AW: Ausnahme für Macrostart
22.05.2017 19:24:33
thomas
Hallo Uwe und Daniel,
erstmal besten dank für die schnelle Antwort.
Das sValue kommt von der Ausnahme
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'If Sh.Name "Tabelle6" Then sValue = ActiveCell.Value
dies hatte ich leider nicht mit geschrieben. Sorry.
Sollte ich langsam mal gelernt haben anbei eine Beispieltabelle.
Daniel dein Vorschlag habe ich da schon eingebaut.
Das tolle ist die Fehlermeldung ist weg aber leider wird auch nichts mehr protokolliert. Da ist bestimmt noch was foul.
Könnt ihr euch dies nochmal anschauen?
https://www.herber.de/bbs/user/113731.xlsm
liebe grüsse thomas
und sorry das ich erst jetzt antworte es ging einfach nicht früher
Anzeige
AW: VBA spricht englisch
22.05.2017 19:43:51
Daniel
daher muss es auch heißen:
Dim wertalt As Object
und nicht Objekt
btw, das gibt bei mir schon ne Fehlermeldung.
Gruß Daniel
Klasse dummer Fehler von mir
22.05.2017 20:11:08
mir
Hallo Daniel,
hab recht vielen dank jetzt passt es.
Ich wünsch dir noch ein ruhigen Feierabend. Du hast mir sehr geholfen und ich kann nun doch weiter an mein plan arbeiten. Ich dachte schon das ich aufgeben muss.
MFG Thomas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige