Hilfe bei Ereignisbehandlung

Hallo,

hatte die Netiquette leider nur bis zum Punkt Abmeldung gelesen.

Hier mal der Versuch mein Problem zu beschreiben.
Habe eine Mappe ‘Muster01.ods’ mit mehreren leeren Blättern ‘Tabelle1’, ‘Tabelle2’ usw. neu erstellt.
Für diese Mappe habe ich in ‘Muster01.ods/Standard/Module1’ folgendes Makro geschrieben:
REM ***** BASIC *****

option Explicit

'######################################################################

Public Sub InhaltGeaendert()

  Dim s As String

  'Verweis auf die aktuelle Zelle
  Dim oCellAddress As Object
  oCellAddress = ThisComponent.CurrentSelection.CellAddress
  
  'Verweis auf das Blatt mit der geänderten Zelle
  Dim oSheet As Object
  oSheet = ThisComponent.Sheets(oCellAddress.Sheet)
  
  'Zeile mit der geänderten Zelle
  Dim iRow as Integer
  iRow = oCellAddress.Row
  
  'Spalte mit der geänderten Zelle
  Dim iCol As Integer
  iCol = oCellAddress.Column
  
  'Verweis auf die geänderte Zelle
  Dim oCell As Object
  oCell = oSheet.getCellByPosition(iCol,iRow)
  
  'Inhalt der geänderten Zelle als Variant
  Dim v As Variant
  v = oCell.String
  
  s = "InhaltGeändert()"
  s = s & chr(13)
  s = s & "Sheet=" & oSheet.Name
  s = s & chr(13)
  s = s & "Row=" & iRow & ", Col=" & iCol
  s = s & chr(13)
  s = s & "Value=" & v
  
  MsgBox s
  
End Sub 'InhaltGeaendert(..)

'######################################################################

Dem Ereignis “Der Status ‘Geändert’ wurde geändert” habe ich die Aktion ‘Standard.Module1.InhaltGeaendert’ zugewiesen und im ‘Muster01.ods’ gespeichert.

Erwarten tu ich, dass bei Änderung des Inhalts einer beliebigen Zellen auf einem beliebigen Blatt dieser Mappe eine entsprechende Meldung angezeigt wird. Das funktioniert auch, jedoch nur einmal. Wird eine weitere Zelle geändert, dann passiert nichts.

Was mach ich falsch?

Gruß von Henning

Hallo Martens,

Hier mal der Versuch mein Problem zu beschreiben. Habe eine Mappe
‘Muster01.ods’ mit mehreren leeren Blättern ‘Tabelle1’, ‘Tabelle2’
usw. neu erstellt. Für diese Mappe habe ich in
‘Muster01.ods/Standard/Module1’ folgendes Makro geschrieben: REM
***** BASIC *****

option Explicit

'######################################################################

Public Sub InhaltGeaendert()

Dim s As String

'Verweis auf die aktuelle Zelle Dim oCellAddress As Object
oCellAddress = ThisComponent.CurrentSelection.CellAddress

'Verweis auf das Blatt mit der geänderten Zelle Dim oSheet As
Object oSheet = ThisComponent.Sheets(oCellAddress.Sheet)

'Zeile mit der geänderten Zelle Dim iRow as Integer iRow =
oCellAddress.Row

'Spalte mit der geänderten Zelle Dim iCol As Integer iCol =
oCellAddress.Column

'Verweis auf die geänderte Zelle Dim oCell As Object oCell =
oSheet.getCellByPosition(iCol,iRow)

'Inhalt der geänderten Zelle als Variant Dim v As Variant v =
oCell.String

s = "InhaltGeändert()" s = s & chr(13) s = s & "Sheet=" &
oSheet.Name s = s & chr(13) s = s & "Row=" & iRow & ", Col=" &
iCol s = s & chr(13) s = s & "Value=" & v

MsgBox s

End Sub 'InhaltGeaendert(..)

'######################################################################

Dem Ereignis “Der Status ‘Geändert’ wurde geändert” habe ich die
Aktion ‘Standard.Module1.InhaltGeaendert’ zugewiesen und im
‘Muster01.ods’ gespeichert.

Erwarten tu ich, dass bei Änderung des Inhalts einer beliebigen
Zellen auf einem beliebigen Blatt dieser Mappe eine entsprechende
Meldung angezeigt wird. Das funktioniert auch, jedoch nur einmal.
Wird eine weitere Zelle geändert, dann passiert nichts.

Nur mal so als Vermutung: Kann es sein, dass Du vielleicht am Ende
Deiner Aktionen entweder die Datei speichern musst oder sonstwie den
Status wieder auf ungeändert stellen musst, damit bei der nächsten
Zell-Änderung Dein Makro wieder ausgelöst wird?

Was mach ich falsch?

Gruß von Henning

.... und tschüss

            Franklin

Hallo Henning,

Dem Ereignis “Der Status ‘Geändert’ wurde geändert” habe ich die Aktion ‘Standard.Module1.InhaltGeaendert’ zugewiesen und im ‘Muster01.ods’ gespeichert.

Erwarten tu ich, dass bei Änderung des Inhalts einer beliebigen Zellen auf einem beliebigen Blatt dieser Mappe eine entsprechende Meldung angezeigt wird. Das funktioniert auch, jedoch nur einmal. Wird eine weitere Zelle geändert, dann passiert nichts.

Der Status 'Geändert' wird

1. geändert, wenn du in einem Dokument eine Änderung vornimmst - d.h. wenn du vor dem Schließen gefragt würdest, ob die Änderungen gespeichert werden sollen
2. wenn du ein Dokument speicherst - d.h. wenn die Änderungen permanent in das Dokument übernommen werden, so dass anschließend das Dokument wieder ohne Nachfrage geschlossen werden könnte.

Man sieht das auch an dem Diskettensymbol (speichern). Wenn dieses ausgegraut/nicht anwählbar ist, wurde noch keine Änderung vorgenommen bzw. gerade gespeichert. Wenn dieses aktiv ist, wurde eine Änderung vorgenommen - wobei eben nicht unterschieden wird ob nur eine oder 200 Änderungen.

Daher funktioniert dein Makro nicht, wie du es erwartest. Beim Speichern wird Dein Makro ebenfalls ausgeführt, zeigt jedoch den Inhalt und die Koordinaten der Speicherzelle an, auf der der Cursor gerade steht. Direkt danach wird aber wieder auf eine Änderung reagiert.

Stefan