2015年3月21日土曜日

LibreOffice のマクロ

以下は、昨日に作成したLibreOffice用(Windows上で動作)のマクロです。

私は、Access2003 は持っていますが、Excel は持っておらず、Excel の代わりにLibreOffice やOpenOfficeの Calc を使用しています。LibreOffice の Calc のデータを、Access のデータベースにコピーするためのマクロです。 Calc ファイルの、2列目、3列目、4列目のデータを、サンプルデータベース.mdb というAccessデータベースのサンプルテーブルにコピーしています。入力するデータは、日付、JANコード、商品名です。同じJANコードのレコードがすでに、Accessデータベース側に存在する場合には、メッセージを出力し、コピーは行われません。

なお、以前にも LibreOffice のマクロでAccessデータベースにレコードを入力するサンプルを紹介させていただいたことはありました。


sub adodb_put_mdb2

    Dim hiduke as String
    Dim jancode as String
    Dim shouhinmei as String
     Dim j as Integer
     Dim kison as Boolean
       
       
    j = inputbox("行数を入れてください","はじめる行数","3")
   
    j = j-1
   

 Set conn = CreateObject("ADODB.Connection")
 Set rs = CreateObject("ADODB.Recordset")
   
   conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\Users\hiroshi\Dropbox\doc\mdb\サンプルデータベース.mdb"
  
   
    rs.Open "select * from サンプルテーブル", conn ,3,3
'

    do while j < 2000


    hiduke= ThisComponent.Sheets.getByName("3月").getCellByPosition(1,j).string
    jancode= ThisComponent.Sheets.getByName("3月").getCellByPosition(2,j).string
    shouhinmei= ThisComponent.Sheets.getByName("3月").getCellByPosition(3,j).string

    ' msgbox jancode
   
   
    if jancode = "" then
         exit do
    end if
       
   
    rs.Movefirst()
    kison = false
   
    do until rs.EOF
   
   
        'msgbox rs.Fields.Item("JANコード").value
       
        if    jancode = rs.Fields.Item("JANコード").Value then
            msgbox "既にあります。" & jancode & rs.Fields.Item("商品名").value
            kison = true
            '& rs.Fields.Item("日付").value
           
        end if
       
        rs.Movenext()           
    loop

    if kison = false then
   

    rs.AddNew
     rs.Fields.Item("日付").value=hiduke
     rs.Fields.Item("JANコード").value=jancode
     rs.Fields.Item("商品名").value=shouhinmei
     rs.Update

      end if
     
 
  j = j+1
 
  loop
 
    rs.Close
    conn.Close
   
msgbox "end"

end sub

0 件のコメント:

コメントを投稿