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
760to764
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
760to764
760to764
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Auf der Suche nach dem "Column.Add"-Event ...

Auf der Suche nach dem "Column.Add"-Event ...
02.05.2006 10:02:18
Arthur
Hallo zusammen.
Mit Hilfe von euch habe ich mir für eine superbreite Liste ein Eingabe-Tabellenblatt entwickelt. Darin werden die Werte per Bereich.Verschieben(x;y;###) aus einem zweiten Tabellenblatt (Quelle) ermittelt. Soweit alles klasse.
Wenn in der Quelle eine Spalte hinzugefügt wird ist alles Asche. Zwar habe ich eine kleine Routine, die die Referenzen aktualisiert. Sie muss allerdings manuell aufgerufen werden und die eingefügte/ gelöschte Spalte muss explizit angegeben werden. Der Grund dafür: Ich habe keine Ahnung, wo ich ein Event wie Tabellenblatt.Columns.BeforeAdd o.Ä. finde.
Wo muss ich suchen?
Gruß
-Arthur

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

Betreff
Datum
Anwender
Anzeige
AW: Auf der Suche nach dem "Column.Add"-Event ...
02.05.2006 10:14:42
ANdreas
Hallo Athur,
so ein Event gibt es auch nicht.
Man könnte hilfsweise das Change Event nutzen, ist allerdings nur ein Vorschlag:

Private Sub Worksheet_Change(ByVal Target As Range)
' Bei Änderungen die ganze Spalten betreffen
If Target.Cells.Count / Target.Columns.Count = Rows.Count Then
On Error Resume Next
Application.EnableEvents = False
Application.Undo ' letzte Aktion rückgängig machen
Application.EnableEvents = True
On Error GoTo 0
End If
End Sub

Wann immer beim Change Ereignis ganze Spalte betroffen sind, wird die Aktion rückgängig gemacht. Also beim Spalte(n) hinzufügen, Spalte(n) löschen, Werte einer ganzen Spalte löschen usw.
Funktioniert natürlich nur wenn Makros aktiviert sind.
Hoffe das hilft weiter,
Andreas
Anzeige
AW: Auf der Suche nach dem "Column.Add"-Event ...
02.05.2006 10:19:22
Arthur
Hallo Andreas.
Interessanter Ansatz. Ich habe den Gedanken kurz an einem Muster probiert. Könnte klappen.
Thnx
-Arthur
Und noch ein "Column.Delete"-Event ...
02.05.2006 10:43:19
Arthur
Leider muss ich die Frage nochmals öffnen.
Mit dem Vorschlag erkenne ich, dass Spalten eingefügt wurden. Leider aber nicht, wenn Spalten gelöscht werden. (Remark: Bei .Undo wäre es Wurst, aber Hinzufügen und Löschen ist legitim, solange ich darauf reagieren kann.
Wie geht's weiter?
-Arthur
AW: Und noch ein "Column.Delete"-Event ...
02.05.2006 14:20:15
ANdreas
Hallo Athur,
es ist nicht ganz einfach beim Change Ereignis festzustellen, was sich geändert hat.
Hier einmal ein Ansatz, an dem Du weiterarbeiten kannst:
Public intUsedRange As Integer ' Merker

Private Sub Worksheet_Activate()
intUsedRange = ActiveSheet.UsedRange.Columns.Count
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
Dim intChangedColumns%
' Bei Änderungen die ganze Spalten betreffen
If Target.Cells.Count / Target.Columns.Count = Rows.Count Then
On Error Resume Next
' UsedRange Anzahl von Spalten verändert?
intChangedColumns = ActiveSheet.UsedRange.Columns.Count - intUsedRange
Select Case intChangedColumns
Case 0 ' Spaltenanzahl UsedRange durch Change unverändert
Case Is < 0 ' Spalte(n) gelöscht
MsgBox Abs(intChangedColumns) & " Spalte(n) gelöscht", , Target.Address
Case Else ' Spalte(n) hinzugefügt
MsgBox Abs(intChangedColumns) & " Spalte(n) hinzugefügt", , Target.Address
End Select
On Error GoTo 0
End If
' Merker aktualisieren
intUsedRange = ActiveSheet.UsedRange.Columns.Count
End Sub

Hierbei wird die Anzahl der Spalten des UsedRange des Tabellenblattes vermerkt. Ändert sich diese Anzahl bei einer Aktion in der ganze Spalten verändert werden, wurde sehr wahrscheinlich eine Spalte hinzugefügt/gelöscht. In der Select Case Abfrage kannst Du darauf reagieren. Das Verschieben von Spalten ist natürlich eine Möglichkeit. Man müsste noch deutlich mehr abfragen, um alles zu erkennen. Nicht abgedeckt ist mit dem Ansatz auch der Fall das ganz vorne neue Spalten eingefügt werden.
Hoffe das hilft erst mal weiter,
Andreas
Anzeige
Danke
02.05.2006 15:31:37
Arthur
Hallo Andreas.
Das hilft mir ausreichend weiter. Ich merke mir zu dem UsedRange auch den Beginn dieses Bereichs. Verändert er sich, dann wurde die erste Spalte verändert.
Danke nochmals.
-Arthur

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige