2010年5月8日 星期六

Ooo :先搜尋再寫入

  
REM 工作上,我會收集同事做的檔案,再整合交給主管。
REM 同事負責的檔案資料各不相同,但有一「特定編號」。
REM 我的做法是,將所有同事的檔案按日 01-31 抄至不同分頁。
REM 然後按「特定編號」將每日資料抄回 main 頁,再匯出成 excel 檔案。
REM 以下是其中一份 code 。
 
REM ***** BASIC *****
 
option VBAsupport 1
 
sub Match01()
  Dim oFuncService As Object
  Dim oRange As Object
  'Dim vntRC As Variant
  Dim oSelection As Object
'************************ 在ActiveSheet 讀取 cell 內的值
   oActiveSheet=ThisComponent.CurrentController.ActiveSheet
   oCrits=oActiveSheet.getCellByPosition(1,5) ' 指定要讀取的儲存格
   myvalue = oCrits.getString() ' 讀出指定儲存格的值
   'print myvalue ' 顯示是否正確
'************************ 承上,以 Array 來讀取 ActiveSheet 一系列 cell 內的值
  'oSelection = oDocument.CurrentController.Selection
  DataRange = Range("B4").CurrentRegion '將所需資料存入 陣列DataRange ,必須指定開始的位置
  DataRangeRowsCount = Range("B4").CurrentRegion.Rows.Count ' 陣列DataRange 的行數
  DataRangeColsCount = Range("B4").CurrentRegion.columns.Count ' 陣列DataRange 的行數
  mmm=DataRange(1,3) ' 由於使用了 vba array,故 DataRange(x,y)中的 x為列數,y為欄數
'************************ 跳回 main 頁,並進行搜尋,然後取出vntRC所在列數(未減 1 的列數)
  oFuncService = CreateUnoService("com.sun.star.sheet.FunctionAccess") ' 呼叫 match 基本功能
  oRange = ThisComponent.Sheets.getByName("Main").getCellRangeByName("A1:A47") '指定要搜尋的範圍
  'vntRC = oFuncService.callFunction("MATCH", Array("中國人", oRange, 0) )
  aArrayValue=DataRange(1,1) '將要搜尋的 index 轉換為變數
  vntRC = oFuncService.callFunction("MATCH", Array(aArrayValue, oRange, 0) )'進行搜尋

 If IsEmpty(vntRC) Then
    MsgBox "NotFound" '測試用語用
 Else
    MsgBox vntRC '讀出所在列
 End If

  'Sheets("Main").range("B" & vntRC -1 )=aArrayValue
  'Sheets("Main").cells(vntRC , 4 )=aArrayValue '寫入變數
  Sheets("Main").cells(vntRC , 4 )=DataRange(1,2) '寫入變數
  Sheets("Main").cells(vntRC , 4+1 )=DataRange(1,3) '寫入變數
End sub
  
  
  

沒有留言: