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

Sortierfunktion verursacht Fehler

Sortierfunktion verursacht Fehler
Mike
Hi,
ich verwende unten stehenden Code um Änderungen in einem Tabellenblatt zu protokollieren.
Werden dort in den ersten 1000 Zeilen Daten geändert, wird beim Speichern der Datei ein Log-File als Textdatei erstellt.
Das klappt soweit sehr gut.
Mein Problem, dass offenbar das Verwenden der Sortierfunktion diesen Code durcheinander bringt, da jedes Mal, wenn ich die Daten sortiere der Debugger anspringt und einen Run Time Error anzeigt.
Fehlermeldung: Run Time Error 13, Type Mismatch.
Angezeigte Zeile im Debug-Modus: mstrOld(rng.Row, rng.Column) = rng.Value (ganz am Ende des Codes).
Wisst Ihr irgendeinen Trick, wie man das vermeiden kann ?
Verwendeter Code:
Option Explicit
Dim mstrOld(1 To 1000, 1 To 16384) As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1000 Then Exit Sub
Dim strDatei As String, strText As String
Dim intFile As Integer, rng As Range
Const strDELIM As String = " | "
intFile = FreeFile
With ThisWorkbook
strDatei = "C:\Users\Notebook\Desktop\My Documents\LogFiles\LogFile_" & Replace(.Name, " _
.xlsm", "") & ".txt"
End With
Open strDatei For Append As #intFile
If LOF(intFile) = 0 Then
strText = "Date & Time      | User     | Cell   | Old Value | New Value"
Print #intFile, strText
End If
For Each rng In Target.Cells
If rng.Value  mstrOld(rng.Row, rng.Column) Then
strText = _
Format(Now, "YYYY/MM/DD hh:mm") & strDELIM & _
Environ("username") & strDELIM & _
rng.Address & strDELIM & _
mstrOld(rng.Row, rng.Column) & strDELIM & _
IIf(Len(rng), rng.Value, "---") & strDELIM
Print #intFile, strText
End If
Next
Close #intFile
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > 1000 Then Exit Sub
Dim rng As Range
For Each rng In Target.Cells
mstrOld(rng.Row, rng.Column) = rng.Value
Next
End Sub
VG und vielen Dank Euch im Voraus für jeden Tipp,
Mike

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Sortierfunktion verursacht Fehler
12.04.2012 01:53:29
fcs
Hallo Mike,
eigentlich sollte das Sortieren keine Probleme machen, funktionierte bei mir jedenfalls ohne Probleme.
Probleme gibt es wenn in den Zellen Fehlerwerte wie #WERT!, #DIV/0! oder #NV
stehen können.
Dies ist üblicherwiese nur der Fall wenn in Zellen Formeln stehen. Wird eine solche Zelle selektiert, dann wird Fehler 13 angezeigt.
Mit einer entsprechenden Fehler-Prüfung kann man den kontrolliert abarbeiten.
Statt mit rng.Value wird dann mit rng.Text gearbeitet, um ggf. Änderungen zu erfassen bzw. zu überspringen.
Ob das bei dir hilf weiss ich nicht.
Alternativen:
1. Du könntest vor dem Sortieren die Ereignismakros deaktivieren und danach wieder aktivieren.
2. Falls möglich könnte man die Spalten-Nummern mit den problematischen Werten in beiden Ereignisprozeduren prüfen und vom Änderungs-Loggen ausschliessen.
Gruß
Franz
Option Explicit
Dim mstrOld(1 To 1000, 1 To 16384) As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1000 Then Exit Sub
On Error GoTo Fehler
Dim strDatei As String, strText As String
Dim intFile As Integer, rng As Range
Const strDELIM As String = " | "
intFile = FreeFile
With ThisWorkbook
strDatei = "C:\Users\Notebook\Desktop\My Documents\LogFiles\LogFile_" & Replace(.Name,  _
_
".xlsm", "") & ".txt"
strDatei = "C:\Users\Public\Test\Data\LogFile_" & Replace(.Name, _
".xlsm", "") & ".txt"
End With
Open strDatei For Append As #intFile
If LOF(intFile) = 0 Then
strText = "Date & Time      | User     | Cell   | Old Value | New Value"
Print #intFile, strText
End If
For Each rng In Target.Cells
If rng.Value  mstrOld(rng.Row, rng.Column) Then
strText = _
Format(Now, "YYYY/MM/DD hh:mm") & strDELIM & _
Environ("username") & strDELIM & _
rng.Address & strDELIM & _
mstrOld(rng.Row, rng.Column) & strDELIM & _
IIf(Len(rng), rng.Value, "---") & strDELIM
Print #intFile, strText
End If
NextRng:
Next
Close #intFile
Fehler:
With Err
Select Case .Number
Case 0 'alles ok
Case 13
If rng.Text  mstrOld(rng.Row, rng.Column) Then
strText = _
Format(Now, "YYYY/MM/DD hh:mm") & strDELIM & _
Environ("username") & strDELIM & _
rng.Address & strDELIM & _
mstrOld(rng.Row, rng.Column) & strDELIM & _
IIf(Len(rng.Text), rng.Text, "---") & strDELIM
Print #intFile, strText
End If
Resume NextRng
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, vbInformation + vbOKOnly, _
"Fehler - Worksheet_Change"
Close
End Select
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > 1000 Then Exit Sub
On Error GoTo Fehler
Dim rng As Range
For Each rng In Target.Cells
mstrOld(rng.Row, rng.Column) = rng.Value
Next
Fehler:
With Err
Select Case .Number
Case 0 'alles ok
Case 13
mstrOld(rng.Row, rng.Column) = rng.Text
Resume Next
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, vbInformation + vbOKOnly, _
"Fehler - Worksheet_SelectionChange"
End Select
End With
End Sub

Anzeige
AW: Sortierfunktion verursacht Fehler
12.04.2012 20:35:40
Mike
Hallo Franz,
vielen Dank auch dafür - komischerweise habe ich zu diesem Thread keine Email erhalten, daher die verspätete Antwort, sorry !
Das Tabellenblatt, um das es geht enthält ausschließlich Text, d.h. keine der genannten Fehlermeldungen erscheinen dort aktuell.
Ich hatte den Fehler sowohl beim Testen im Büro (Windows NT, Office 2007), als auch zu Hause (Windows Vista, Office 2010).
Evtl. liegt es aber nicht am manuellen Sortieren, sondern an dem Makro, das ich zum Sortieren verwende.
Ich dachte bisher, das hätte hier keine Auswirkungen, da recht simpel gestrickt, habe es aber jetzt doch unten ergänzt.
Hilft das vielleicht weiter ?

Sub DataCleanup()
' Key combination: CTRL + d  (password protected)
If InputBox("Admin macro started - enter password to proceed")  "9" Then
MsgBox "Password check failed - access to macro denied !"
Exit Sub
End If
With ActiveWorkbook.Worksheets(1)
.Rows("2:1000").Sort _
Key1:=.Range("J2"), Key2:=.Range("A2"), Key3:=.Range("B2"), _
Order1:=xlAscending, Order2:=xlAscending, Order3:=xlAscending, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal, Header: _
=xlNo
.Columns("A:J").WrapText = True
Application.Goto .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
End Sub
VG und nochmals danke,
Mike
Anzeige
AW: Sortierfunktion verursacht Fehler
12.04.2012 22:06:55
fcs
Hallo Mike,
ich konnte jetzt beim Testem nichts feststellen.
Das Sortieren startet jedoch das SelectionChange-Makro . Diese kann man verhindern, indem man die Ereignismakros vorübergehend deaktiviert.
Verbundene Zelen dürfen in der Tabelle auch nicht vorkommen. Dies kann ebenfals Probleme beim Sortieren oder auslesen der Werte verursachen.
Gruß
Franz
Sub DataCleanup()
' Key combination: CTRL + d  (password protected)
If InputBox("Admin macro started - enter password to proceed")  "9" Then
MsgBox "Password check failed - access to macro denied !"
Exit Sub
End If
With ActiveWorkbook.Worksheets(1)
Application.EnableEvents = False
.Rows("2:1000").Sort _
Key1:=.Range("J2"), Key2:=.Range("A2"), Key3:=.Range("B2"), _
Order1:=xlAscending, Order2:=xlAscending, Order3:=xlAscending, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal, Header: _
=xlNo
.Columns("A:J").WrapText = True
Application.EnableEvents = True
Application.Goto .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
End Sub

Anzeige
AW: Sortierfunktion verursacht Fehler
15.04.2012 17:20:02
Mike
Hallo Franz,
auch hierzu noch eine Rückmeldung und nochmals sorry für die verspätete Antwort !
Auch hier hast Du das Problem behoben und der Code funktioniert nun einwandfrei - eine riesen Hilfe ! :-)
Viele Grüße und nochmals danke für alle Mühe - ist echt klasse,
Mike

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige