Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro hinter Excel-Tabellen

Forumthread: Makro hinter Excel-Tabellen

Makro hinter Excel-Tabellen
17.09.2013 16:30:51
Pamela
Guten Tag
Bereits letzte Woche wurde mir hier in diesem tollen Forum geholfen. Eigentlich ist meine aktuelle Frage eine Ergänzungsfrage zu meinem Post am 13.09.
Dennoch erlaub ich mir, meine Frage hier als neues Post zu eröffnen.
Meine Frage lautet wie folgt:
In einer Excel Arbeitsmappe mit 24 Tabellenblätter hab ich hinter jedes Tabellenblatt folgende Codes (welche ich dank tollster Hilfe hier aus dem Forum zusammenbauen konnte) kopiert:
Public AlterWert As String
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Const Logfilename = "\Archiv\\Aenderungen_log.txt"
Dim User As String
Dim Protokoll As Long
Dim Logfile As String
Dim Zelle As Range
Dim S_Alpha As String ' Variable für den String, der der Spalztennummer entspricht (1=A, 2=B,  _
26=Z, 27=AA...
Dim objHyp As Hyperlink, arrEndung, strEnde, strMatch As String
User = UserName()
Logfile = ActiveWorkbook.Path & Logfilename ' Logfile im gleichen Pfad ablegen, wie die  _
Excel-Datei.
Open Logfile For Append As #1
' Behandlung der Spalten>Z, da dann mit AA, AB etc. weitergemacht wird.
If Target.Column > 26 Then
S_Alpha = Chr(Asc("A") + (Target.Column \ 26) - 1) & Chr(Asc("A") + (Target.Column Mod 26) _
- 1) '  = div-Operator
Else
S_Alpha = Chr(Asc("A") + Target.Column - 1)
End If
'   Chr (Asc("A") + Target.Column - 1) oops, diese Zeile ist wohl überflüssig. Überbleibsel vom  _
Testen
' Wurde 1 Zelle geändert (count=1) oder mehrere (Else-Zweig) ?
' Die Print-Anweisung schreibt einfach den dahinter mit & gebildeten Stringg in das Logfile
If Target.Cells.Count = 1 Then
Print #1, Date & ": " & ActiveSheet.Name _
& ": " & S_Alpha & Target.Row & ": " & AlterWert & ":" & Target.Text
Else
For Each Zelle In Target
Print #1, Date & ": " & ActiveSheet.Name _
& ": " & S_Alpha & Zelle.Row & ": " _
& ": " & Zelle.Text
Next Zelle
End If
Close #1
'nun wird für jede Zeile geprüft ob in Spalte "D" ein Hyperlink steht. Wenn ja, dann wird aus  _
dem Link die Dateiendung ermittelt
'und in die Spalte "P" geschrieben
arrEndung = Array(".xls", ".xlsx", ".xlsm", ".doc", ".docx", ".docm", _
".dotx", ".pptx", ".ppsm", ".ppsx", ".xltx", ".csv", ".jpg", ".gif", ".pdf", ".ppt", ".pps", " _
.txt") 'anpassen
With ActiveSheet
For Each objHyp In .Hyperlinks
strMatch = objHyp.TextToDisplay
strEnde = Right(strMatch, Len(strMatch) - InStrRev(strMatch, ".") + 1)
If Not IsError(Application.Match(strEnde, arrEndung, 0)) Then
.Cells(objHyp.Range.Row, 16) = strEnde
End If
Next
End With
End Sub

Public Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
On Error Resume Next
AlterWert = Target ' Wert sichern, wenn neue Zelle selektiert wird. Ersatz für ein " _
Before_Change" Ereignis.
End Sub

Mein Problem besteht nun darin, dass mir mein Excel ständig hängenbleibt (Meldung: reagiert nicht mehr) vermutlich weil mein obiger Programmcode in einer Endschlaufe loopt ?
Frage:
kann ich das obige Programm irgendwie so anpassen, dass dieses nicht mehr loopt sondern nur noch solange arbeitet wie auch Datensätze auf dem Tabellenblatt vorhanden sind?
Meine Idee: Zuerst pro Tabellenblatt die Anzahl vorhandenen Datensätze ermitteln und das Programm nur solange in einer Schleife durchlaufen lassen, bis die Anzahl Datensätze durchlaufen ist.
Ich hoffe sehr, man versteht meine Frage und kann mir hier wie schon letzte Woche weiterhelfen.
ich danke euch!
Pamela

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro hinter Excel-Tabellen
17.09.2013 16:44:30
EtoPHG
Hallo Pamela,
Wenn du innerhalb einer Change-Prozedur Zellen veränderst, dann wird die Change-Prozedur wiederum selbst aufgerufen, was tatsächlich zu einem Endlos-Loop führt. Darum sollten von Veränderung die Ereignissteuerung aus- und nachher wieder eingeschaltet werden. Also korrigiere:
        Application.EnableEvents = False
.Cells(objHyp.Range.Row, 16) = strEnde
Application.EnableEvents = True

Gruess Hansueli

Anzeige
AW: Makro hinter Excel-Tabellen
17.09.2013 16:59:47
Rudi
Hallo,
schalte die Events ab. Unbedingt mit Fehlerbehandlung!
S_Alpha: das ist Quatsch.
Die Adresse der geänderten Zelle(n) erhältst du einfacher mit Target.Address bzw. Zelle.Address.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Const Logfilename = "\Archiv\\Aenderungen_log.txt"
Dim User As String
Dim Protokoll As Long
Dim Logfile As String
Dim Zelle As Range
Dim objHyp As Hyperlink, arrEndung, strEnde, strMatch As String
On Error GoTo ERREXIT
Application.EnableEvents = False
User = UserName()
Logfile = ActiveWorkbook.Path & Logfilename ' Logfile im gleichen Pfad ablegen, wie die _
Excel-Datei.
Open Logfile For Append As #1
' Wurde 1 Zelle geändert (count=1) oder mehrere (Else-Zweig) ?
' Die Print-Anweisung schreibt einfach den dahinter mit & gebildeten Stringg in das Logfile
If Target.Cells.Count = 1 Then
Print #1, Date & ": " & ActiveSheet.Name _
& ": " & Target.Address(0, 0) & ": " & AlterWert & ":" & Target.Text
Else
For Each Zelle In Target
Print #1, Date & ": " & ActiveSheet.Name _
& ": " & Zelle.Address(0, 0) & ": " _
& ": " & Zelle.Text
Next Zelle
End If
Close #1
'nun wird für jede Zeile geprüft ob in Spalte "D" ein Hyperlink steht. Wenn ja, dann wird aus  _
_
dem Link die Dateiendung ermittelt
'und in die Spalte "P" geschrieben
arrEndung = Array( _
".xls", ".xlsx", ".xlsm", ".doc", ".docx", ".docm", ".dotx", ".pptx", _
".ppsm", ".ppsx", ".xltx", ".csv", ".jpg", ".gif", ".pdf", ".ppt", _
".pps", ".txt")     'anpassen
With ActiveSheet
For Each objHyp In .Hyperlinks
strMatch = objHyp.TextToDisplay
strEnde = Right(strMatch, Len(strMatch) - InStrRev(strMatch, ".") + 1)
If Not IsError(Application.Match(strEnde, arrEndung, 0)) Then
.Cells(objHyp.Range.Row, 16) = strEnde
End If
Next
End With
ERREXIT:
Application.EnableEvents = True
End Sub

Gruß
Rudi

Anzeige
AW: Makro hinter Excel-Tabellen
18.09.2013 10:17:09
Pamela
Hallo Rudi (da sieht man sich also wieder :-) )
Vielen Dank für dein überarbeitetes Programm. Noch ist mir nicht ganz klar, wie es sich versteht, Events abzuschalten und dann wieder einzuschalten.
Aber ich werde mir nun mal im Excel-VBA-Hilfeteil darüber etwas schlau machen versuchen.
Dein neues Programm hingegen scheint wirklich zu funktionieren. Vielen Dank !
Pamela
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