スタッフブログ

タダより高いモノは無い!? 一期5回 OpenOfficeの可能性を探れ

2012.01.24

技術の小林です。

遅々として進んでない気がしますが、焦っても仕方ない。
今回はOpenOffice(LibreOffice)でのファイルオープンとコピー&ペースト。

データの比較を行う為に、比較対象となる別のブック(つまり別ファイル)のシートの内容をコピーして並べてみる…なんて事をよくやります。
素直にデータインポートの方向でマクロを作っておけば良かったものの、その頃は思いつかなかった。

'Excelファイル(シート1)のインポート
Function InportExcelSheet(sDirName As String, sFileName As String) As Boolean
    Dim i As Integer
    Dim iYCnt2 As Integer
    On Error GoTo ErrorHandler
    InportExcelSheet = True
    Application.DisplayAlerts = False
    gPass0 = ThisWorkbook.Name①
    'ファイルオープン
    Workbooks.Open Filename:=sDirName & sFileName②
    'コピー
    Sheets(1).Select
    Cells.Select
    Selection.Copy
    'ペースト
    Windows(gPass0).Activate③
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Paste
    ActiveSheet.Name = sFileName
    '参照ファイルのクローズ④
    Windows(sFileName).Activate
    ActiveWindow.Close
    Application.DisplayAlerts = True
    Exit Function
ErrorHandler:
    MsgBox "ファイルインポートでエラーが発生しました." & Chr(13) & _
           "ファイル名が間違っているか、ファイルが存在しません." & Chr(13) & _
           "シートSettingを参照してください.", vbOKOnly, "Excelファイル(シート1)のインポート"
    InportExcelSheet = False
End Function


①で大元のブック名を保持しておく。
②で別ファイルがオープンされて、以降それがアクティブなブックになる。
 そのままシート1をコピー。
③コピーしたデータを別ウィンドウの大元のブックにペースト。
 またここでアクティブブックが移る。
④別ファイルのウィンドウを閉じる

という実にアナクロな流れw
アクティブとなっているブックからの相対的なシートやセルのフォーカスをきちんとやれるのか?
というのが今回の懸念点。

「アクティブなブックってどれよ?」

…てな話だ。


前書きは置いて、実際のテスト。

koba_04_013.jpg

koba_04_014.jpg

 

koba_04_015.jpg

koba_04_016.jpg
 

 エラーで止まる。

別ファイルは開いているから、ペーストする為の元のブックに戻って来れない。


koba_04_017.jpg

 Windows(gPass0).Activateエラー
ファイル名は代入されている。

むむむ、Windows(gPass0).Activateがあかんみたい。


 

 

koba_04_018.jpg

ふと思い立ってWindowsオブジェクトでなくてWorkbooksオブジェクトにしてみた。
Excelなら挙動は結果的に変わんない(と思う)。

 

 

koba_04_019.jpg

 

動きました。

ああああ、こういう同じ意味っぽいやりとりはなるべく正規な形でコーディングしないとダメだねえ。


これで我がソースの一通りの「よくやる操作」は検証できたよ!

ちゃんと見てやればOpenOffice(LibreOffice)でもしっかり動くねえ。
中々VBA互換がんばってる。

 

今日はこれまで!

投稿者:技術部