2010年11月16日 星期二

另一個取代 Range ("A65536").End (xlUp).Row 方法

REM  *****  BASIC  *****

Sub Main
  '指定要取得 "Sheet1" B 欄 的最後欄位
  'Ooo 由零開始,我習慣 +1
  LastRow=GetLastRow("Sheet1","B") +1
  msgbox LastRow
End Sub

Function GetLastRow(SHT as string , COL as string)as integer
  With ThisComponent
    oController = .getCurrentController()
    oSheets = .getSheets()
    '讀取傳入的「分頁名稱」變數 SHT
    oSheet1 = oSheets.getByName( SHT )
    oController.setActiveSheet( oSheet1 )
  End With

  '呼叫 UNO
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

  rem ----------------------------------------------------------------------
  '讀取傳入的「欄位」變數 COL,再以 UNO 控制「游標」到最後一行 1048576
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "ToPoint"
  args1(0).Value = COL & "1048576"
 
  dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

  REM -------------------------------------------------------------------------------
  '以 UNO 控制「游標」由最後一行 1048576 跳至有資料的一行
  dim args4(1) as new com.sun.star.beans.PropertyValue
  args4(0).Name = "By"
  args4(0).Value = 1
  args4(1).Name = "Sel"
  args4(1).Value = false

  dispatcher.executeDispatch(document, ".uno:GoUpToStartOfData", "", 0, args4())
REM -------------------------------------------------------------------------------
  ' 同樣,取得該行的 ROW 數,傳回 GetLastRow 再交回主程式。
  GetLastRow=ThisComponent.CurrentController.getSelection().RangeAddress.StartRow
  'GetLastCol=ThisComponent.CurrentController.getSelection().RangeAddress.StartColumn
End Function

沒有留言: