Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
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

VBA SheetChange

VBA SheetChange
06.07.2022 14:51:53
Joschi
Hallo Forum.
ich versuche mich gerade mit dem Workbook_SheetChange-Event.
Mein Problem dabei: wie kann ich einen Aufruf erkennen, der durch einfügen bzw. löschen einer (oder mehrerer) Zeilen entstanden ist?
Die Änderung von bestehenden Zelle habe ich meines Erachtens im Griff.
Gruß Joschi

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA SheetChange
06.07.2022 15:05:32
Nepumuk
Hallo Joschi,
im Modul "DieseArbeitsmappe":

Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Select Case CheckRows(Sh)
Case 0 'no row delete or insert
Case 1 'row insert
MsgBox Application.UserName & " insert row"
Case 2 'row delete
MsgBox Application.UserName & " delete row"
End Select
Select Case CheckColumns(Sh)
Case 0 'no column delete or insert
Case 1 'column insert
MsgBox Application.UserName & " insert column"
Case 2 'column delete
MsgBox Application.UserName & " delete column"
End Select
End Sub
In einem Standardmodul:

Option Explicit
Private Const ERROR_REFERENCE As String = "#REF!"
Public Function CheckRows(ByRef probjWorksheet As Worksheet) As Integer
Const LOCAL_NAME As String = "LastRow"
Dim objName As Name
With probjWorksheet
For Each objName In .Names
If objName.Name = .Name & "!" & LOCAL_NAME Then
If objName.RefersTo = "=" & .Name & "!" & ERROR_REFERENCE Then
CheckRows = 1
ElseIf objName.RefersToRange.Row  .Rows.Count Then
CheckRows = 2
End If
Exit For
End If
Next
.Names.Add Name:=LOCAL_NAME, RefersTo:= _
.Cells(.Rows.Count, 1), Visible:=False
End With
End Function
Public Function CheckColumns(probjWorksheet As Worksheet) As Integer
Const LOCAL_NAME As String = "LastColumn"
Dim objName As Name
With probjWorksheet
For Each objName In .Names
If objName.Name = .Name & "!" & LOCAL_NAME Then
If objName.RefersTo = "=" & .Name & "!" & ERROR_REFERENCE Then
CheckColumns = 1
ElseIf objName.RefersToRange.Column  .Columns.Count Then
CheckColumns = 2
End If
Exit For
End If
Next
.Names.Add Name:=LOCAL_NAME, RefersTo:= _
.Cells(1, .Columns.Count), Visible:=False
End With
End Function
Du musst einmal Zeilen und Spalten löschen damit die notwendigen Namen gesetzt werden.
Gruß
Nepumuk
Anzeige
AW: VBA SheetChange
06.07.2022 15:42:56
Joschi
Hallo Nepumuk.
Danke für Deine bereitgestellten Codes.
Ich verstehe die beiden .Names.Add nicht.
Der bei "Select Case" ausgewertete Code wird weder beim Einfügen noch beim Löschen gesetzt. Dafür immer der .Names.Add-Command ausgeführt.
Gruß Joschi
AW: VBA SheetChange
06.07.2022 15:52:29
Nepumuk
Hallo Joschi,
die Namen werden in Spalte A in die letzte Zeile und in Zeile 1 letzte Spalte gesetzt. Wenn du Zeilen oder Spalten einfügst, geben die Namen einen Bezugsfehler (#REF!) zurück, wenn du Zeilen oder Spalten löschst, wandern die Namen nach innen in die Tabelle und das wird ausgewertet.
Gruß
Nepumuk
AW: VBA SheetChange
06.07.2022 15:57:36
Joschi
Hallo Nepumuk.
Danke für Deine Erklärung.
Ich habe mich inzwischen für die Lösung von Thorsten entschieden. und den Thread bereits als erledigt gekennzeichnet.
Gruß Joschi
Anzeige
AW: VBA SheetChange
06.07.2022 15:21:31
Oberschlumpf
Hi,
das hier funktioniert vielleicht auch (ungetestet)
in ein allgemeines Modul:

Option Explicit
Public ploOldRows As Long, ploOldCols As Long
in das Modul des Tabellenblatts:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If ploOldRows  ActiveSheet.UsedRange.Rows.Count Then
If ploOldRows  ActiveSheet.UsedRange.Columns.Count Then
If ploOldCols 
Hilfts?
Ciao
Thorsten
AW: VBA SheetChange
06.07.2022 15:54:44
Joschi
Hallo Thorsten.
Auch Dir herzlichen Dank für Deinen Vorschlag.
Ich habe ihn probiert und konnte die gewünschten Informationen damit ermitteln.
Mein Problem ist damit gelöst. Danke.
Gruß Joschi
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige