Forum to ja znam (i napisałem na pl i eng), pisałem o dokumentacji:-) Ale dzięki, nawet nie pomyślałem, żeby tam sprawdzić.
Opis problemu z rozwiązaniem.
Problem:
Chcę aby po naciśnięciu enter na ostatniej komórce kolumny (nie tej Excelowej) przeszło mi do następnej do pierwszego wiersza. Oto jak wygląda przykładowy arkusz:
A B C D E
1.- - - - - --
2.- -1- - -11-
3.- -2- - -12-
4.- -3- - -13-
5.- -4- - -14-
6.- - - - - -
1 i 6 wiersz są puste. Kolumny excelowe A i D będą wypełniane i będzie w ich wierszach używany "enter".
Koniec kolumny rozpoznamy jeżeli komórka c + 1, w + 1 będzie pusta ([c,w] to aktualna komórka). Wtedy chcemy przejść do wiersza 2 (czyli nr 1, bo numeracja zaczyna się od 0) i kolumny c + 1.
Excelowa kolumna C oddziela nasze kolumny/tabele. Pozostaje ona usta i należy ją "przeskoczyć".
Oto rozwiązanie problemu:
' rejestracja handlera na klawiaturę
Sub RegisterKeyHandler
oDocView = ThisComponent.getCurrentController()
oKeyHandler = createUnoListener("KeyHandler_", "com.sun.star.awt.XKeyHandler")
oDocView.addKeyHandler(oKeyHandler)
End Sub
' zdarzenie "keyPressed"
Function Keyhandler_KeyPressed(oEvt) As Boolean
KeyHandler_KeyPressed = TRUE
'sprawdzanie czy naciśnięty klawisz to "enter"
If (oEvt.KeyCode = com.sun.star.awt.Key.RETURN) Then
'wywołanie makra na przechodzenie miedzy kolumnami
Macro1
EndIf
End Function
' zdarzenie released
Function KeyHandler_KeyReleased(oEvt) As Boolean
KeyHandler_KeyReleased = FALSE
End Function
' makro na przechodzenie do kolumny
Sub Macro1
oDocument = ThisComponent
oSelectedCells = oDocument.CurrentSelection
oActiveCell = oSelectedCells.CellAddress
nSheet = oActiveCell.Sheet
nColumn = oActiveCell.Column
nRow = oActiveCell.Row
MsgBox nColumn & " " & nRow & " " & nSheet & "jjjj"
Sheet = ThisComponent.CurrentController.ActiveSheet
'Sheet = thisComponent.Sheets(0)
Cell = Sheet.getCellByPosition(nColumn+1,nRow+1)
cellCheck = Sheet.getCellByPosition(nColumn+1,nRow+1)
if cellCheck.String = "" then
cellToSelect = Sheet.getCellByPosition(nColumn+2,1)
ThisComponent.CurrentController.Select(cellToSelect)
oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
ThisComponent.CurrentController.Select(oRanges)
end if
End Sub
Pozdrawiam,
A.
P.S. Bo, nie chodziło mi o "excelowe" wiersze. Nie wiedziałem jak się wyrazić, bo jak utworzę sobie własny obszar w excelu i nazwę go tabelą, to nazewnictwo będzie te same. Mogłem jednak używać w odniesieniu do własnych "tabeli" słów krotka/atrybut. Byłoby może łatwiej to rozróżnić.