Tabellenbereich einblenden

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Tabellenbereich einblenden

von toni » Di, 06.03.2007 09:26

Dank euch beiden,

dein Tip mit dem Fokuserhalt, Stephan, ist die Lösung!!!
Da hätte ich auch selber drauf kommen können, wenn ich mir die Eigenschaften mal näher angesehen hätte... :oops:

Allerdings wundert es mich schon, dass das Verhalten nicht einheitlich ist.

Gruss

Thomas

von Stephan » Mo, 05.03.2007 22:08

Ne Ahnung, woran es liegen könnte?
Ja - daran das die Schaltfläche mit der Du das Makro startest den Fokus erhält. Das Fokus-Ereignis der Schaltfläche ist zwar abgeschlossen bevor das Makro startet, die Zellmarkierung übernimmt unter den gegebenen Umständen jedoch den Fokus nicht, die MsgBox jedoch schon, womit nach Verschwinden der MsgBox der Fokus wiederum an das Element zurückfällt was ihn vor der Übernahme durch die MsgBox inne hatte, ebend Deine Schaltfläche.
Du kannst das nachvollziehen wenn Du der Schaltfläche jeweils ein Makro für Fokuserhalt und Fokusverlust zuordnest.

Die einfachste Möglichkeit das Ganze zu verhindern ist es der Schaltfläche erst garkeinen Fokus zu geben, setze dazu in den Eigenschaften der Schaltfläche die Eigenschaft "Fokussieren bei Klick" von True auf False (bzw. Ja auf Nein).




Gruß
Stephan

von kannenklaus » Mo, 05.03.2007 19:45

hallo thomas,
Ne Ahnung, woran es liegen könnte?
es liegt an der msgbox. brauchst du die an dieser stelle im code? oder versuch es mit

Code: Alles auswählen

   oView.freezeAtPosition(0,1)
grüße
klaus

von toni » Mo, 05.03.2007 14:48

Hallo Klaus,

so langsam verzweifel ich!

Ich habe deinen Code in einem leeren Calc-Dokument getestet.
Er funktioniert mit und ohne msgBox, mit 'setFirstVisibleRow' oder mit 'select'.

Sobald ich die Sub aber in mein bestehendes Programm einfüge tritt wieder das alte Phänomen auf:
Mit

Code: Alles auswählen

   meineZelle=oSheet.getCellRangeByName("A1")
   oView.setActiveSheet(oSheet)
   oView.select(meineZelle)
ist alles in Ordnung und die erste Zeile ist im Blickfeld.

Mit

Code: Alles auswählen

   meineZelle=oSheet.getCellRangeByName("A1")
   msgBox "Meldung"
   oView.setActiveSheet(oSheet)
   oView.select(meineZelle)
springt die Ansicht in Zeile 300, wo der Button liegt, mit dem ich die Sub aufgerufen habe.

Ich habe die Button ausgetauscht, es in anderen Sheets der Anwendung versucht, es passiert immer das selbe.

Ne Ahnung, woran es liegen könnte?

Gruß

Thomas

von kannenklaus » Mo, 05.03.2007 10:28

hallo thomas,
die Sicht auf Zeile 1 behalten
so kommst du im gerade aktiven blatt auf die zelle a1

Code: Alles auswählen

Sub Main

	oView=thisComponent.CurrentController
	oSheet = ThisComponent.CurrentController.ActiveSheet 
	meineZelle=oSheet.getCellRangeByName("A1")

	oView.setActiveSheet(oSheet)
	oView.select(meineZelle)

End Sub
oView hat auch die eigenschaften "freezeAtPosition" bzw. setFirstVisibleColumn" bzw. "setFirstVisibleRow"

grüße
klaus

Tabellenbereich einblenden

von toni » Mo, 05.03.2007 09:38

Hallo zusammen,

Mit einem Button am Ende meines Sheets (Zeile 300), führe ich eine Plausiprüfung durch. Bei einem Eingabefehler sollen zwei Dinge passieren:
1. Eine Meldung soll angezeigt werden.
2. Der Tabellenbereich in dem sich die entsprechende Zelle befindet, soll sichtbar sein.
Mit

Code: Alles auswählen

oZelle = oSheet.getCellRangeByName("A1")
      ThisComponent.CurrentController.Select(oZelle) 
bekomme ich auch den obersten Bereich des Sheets angezeigt, aber in Verbindung mit einer Meldung springt dann die Ansicht wieder in den Bereich, wo sich der Plausibutton befindet (Zeile 300).

Code:

Code: Alles auswählen

Sub sel
    Dim osheet, oZelle
      oSheet = ThisComponent.CurrentController.ActiveSheet   
      oZelle = oSheet.getCellRangeByName("A1")
      ThisComponent.CurrentController.Select(oZelle)         
      MsgBox "Meldung"
End Sub

Wenn ich diesen Code per Button ausführe (Button liegt z.B. in Zeile 300), springt die Anzeige nach Schließen der msgBox wieder in die Zeile 300, wo der Button liegt.
Ich möchte aber die Sicht auf Zeile 1 behalten.

Weiß jemand Rat?

Gruß

Thomas

Nach oben