Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
948to952
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
948to952
948to952
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Event für Zeile löschen

Event für Zeile löschen
03.02.2008 13:11:00
Joachim
Hallo,
ich bin auf der Suche nach einem Event was ausgelöst wird, wenn man eine Zeile löscht...
Mit WorksheetChange kann man ja feststellen wenn eine Zeile eingefügt wird, aber leider wird dies scheinbar zumindest unter Excel 2000 nicht aufgerufen wenn eine Zeile gelöscht wird.
Was gibt es sonst noch für gute Möglichkeiten zu ermitteln wenn eine Zeile gelöscht wird und welche es ist?
VIELEN DANK

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

Betreff
Datum
Anwender
Anzeige
AW: Event für Zeile löschen
03.02.2008 13:53:52
Nepumuk
Hallo Joachim,
verwechselst du da nicht etwas? Bei mir wird in xl2000 das Change-Ereignis nur durchs löschen, aber nicht durchs einfügen ausgelöst. In 2003 wird es durch beides ausgelöst. Man kann es nur dadurch unterscheiden, dass bei jedem Selection_Change-Ereignis einen Referenzpunkt in eine Zelle geschrieben und geprüft wird, ob sich der verschoben hat. In 2000 würde ich wahrscheinlich alle Menüpunkte zum löschen und einfügen in eine Klasse packen und das Click-Ereignis der Buttons überwachen. Zusätzlich natürlich auch die Shortcuts Strg + und Strg -. Den Referenzpunkt benötige ich aber trotzdem, denn wenn keine ganze Zeile/Spalte markiert ist, kommt ein kleines Auswahlform und da kann ich auch abbrechen.
Gruß
Nepumuk

Anzeige
AW: Event für Zeile löschen
03.02.2008 14:07:00
Joachim
Hi,
ähm bei mir löst das Change-Ereignis beim einfügen aus! da bin ich mir sicher...
Also im Moment mache ich das folgendermassen:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
MsgBox "B geändert! in Zeile" & Target.Row
End if
....
....
Wie kann ich den die ganzen Menüeinträge ansprechen bzw. abfangen wenn der benutzer auf die verschiedenen menüs klickt?
Danke! Für die hilfe...

AW: Event für Zeile löschen
03.02.2008 14:30:42
Nepumuk
Hallo Joachim,

Wie kann ich den die ganzen Menüeinträge ansprechen bzw. abfangen wenn der benutzer auf die verschiedenen menüs klickt?


na indem du zwei Klassen erstellst (eine für's einfügen und eine für's löschen), mit der FindControls-Methode die entsprechenden ID's suchst und an die jeweilige Klasse verweist.
Gruß
Nepumuk

Anzeige
AW: Event für Zeile löschen
03.02.2008 18:05:08
Joachim
Hallo,
vielen Dank für die Infos.
Leider reichen scheinbar meine Kenntnisse noch nicht aus...
Wie ermittle ich mit der Methode die Ids und was mache ich dann?
Für weitere Tipps wäre ich sehr dankbar!!
Gruss
Joachim

AW: Event für Zeile löschen
03.02.2008 21:22:06
Nepumuk
Hallo Joachim,
na dann, erst mal die ID's. Mit folgender Prozedur lassen sich alle auflisten. Das sieht zwar ein bisschen umständlich aus, aber wenn ich durch das Auflistungsobjekt der Controls einer Commandbar laufe, bekomme ich komischerweise nicht alle zurück.
Public Sub ID_List()
    Dim lngIndex As Long, lngRow As Long
    Dim objBar As CommandBar, objControl As CommandBarControl
    lngRow = 1
    Application.ScreenUpdating = False
    Cells.Clear
    For lngIndex = 1 To 31500
        For Each objBar In Application.CommandBars
            Set objControl = objBar.FindControl(ID:=lngIndex, Recursive:=True)
            If Not objControl Is Nothing Then
                lngRow = lngRow + 1
                Cells(lngRow, 1) = objControl.ID
                Cells(lngRow, 2) = objControl.Index
                Cells(lngRow, 3) = Replace(objControl.Caption, "&", "")
                Cells(lngRow, 4) = objControl.Type
                If objControl.Type = 1 Then Cells(lngRow, 5) = objControl.FaceId
                Cells(lngRow, 6) = objBar.Name
                Cells(lngRow, 7) = objBar.NameLocal
                Cells(lngRow, 8) = objBar.Index
            End If
        Next
    Next
    With Range("A1:H1")
        .Value = Array("ID Control", "Index Control", "Caption Control", "Typ Control", "FaceId Control", "In Leiste engl.", "In Leiste deutsch", "Index Leiste")
        .Font.Bold = True
        .AutoFilter
    End With
    Columns.AutoFit
    Application.ScreenUpdating = True
End Sub

Über die ID eines Controls kannst du nach ihm suchen. Das geht so:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private objInsertButtonClass As clsInsertButton

Public Sub Intialize_Class()
    Dim objControls As CommandBarControls
    Set objControls = CommandBars.FindControls(ID:=3183) '3183=Zellen einfügen
    If Not objControls Is Nothing Then
        Set objInsertButtonClass = New clsInsertButton
        Set objInsertButtonClass.prpSetButton = objControls.Item(1)
    End If
End Sub

Public Sub Terminate_Class()
    Set objInsertButtonClass = Nothing
End Sub

Dazu benötigst du dann noch ein Klassenmodul mit dem Namen "clsInsertButton" und folgendem Code:
' **********************************************************************
' Modul: clsInsertButton Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private WithEvents mobjButton As Office.CommandBarButton

Friend Property Set prpSetButton(objButton As Office.CommandBarButton)
    Set mobjButton = objButton
End Property

Private Sub mobjButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    MsgBox "Einfügen"
End Sub

An Stelle der MsgBox kommt natürlich dein Code. Wenn du die Variable "CancelDefault" in der Prozedur auf True setzt, wird die Standardroutine des Buttons nicht ausgeführt und du kannst sie durch eine eigene Routine ersetzen.
Gruß
Nepumuk

Anzeige
AW: Event für Zeile löschen
03.02.2008 21:30:00
Joachim
Hey super!
Das sieht doch schonmal Klasse aus! Ich werde es spätestens morgen ausprobieren und bei mir in das System reinbasteln!
Vielen vielen Dank für den ausführlichen code!!! Damit sollte es auf alle Fälle klappen!
DANKE!
Gruss
Joachim

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige