タダより高いモノは無い!? 一期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
アクティブとなっているブックからの相対的なシートやセルのフォーカスをきちんとやれるのか?
というのが今回の懸念点。
「アクティブなブックってどれよ?」
…てな話だ。
前書きは置いて、実際のテスト。
エラーで止まる。
別ファイルは開いているから、ペーストする為の元のブックに戻って来れない。
Windows(gPass0).Activateでエラー。
ファイル名は代入されている。
むむむ、Windows(gPass0).Activateがあかんみたい。
ふと思い立ってWindowsオブジェクトでなくてWorkbooksオブジェクトにしてみた。
Excelなら挙動は結果的に変わんない(と思う)。
動きました。
ああああ、こういう同じ意味っぽいやりとりはなるべく正規な形でコーディングしないとダメだねえ。
これで我がソースの一通りの「よくやる操作」は検証できたよ!
ちゃんと見てやればOpenOffice(LibreOffice)でもしっかり動くねえ。
中々VBA互換がんばってる。
今日はこれまで!