「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:1955
現在:4


Calcでのマクロ(VBA)のRange.Copyでセルのコピーができません

ページOpenOffice.org FAQの登録ページ
投稿者CW
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-06-09 17:48:48 (水)
OSWindows XP Pro SP2
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

OOoUG Q&A担当者様

お世話になります。

VBAマクロを含む既存のExcelをCalcに移行しようとしています。
移行したCalcのマクロで、Range.Copyでのセルの範囲のコピーができていないようです。
使用方法がまずいのでしょうか?
正しい使用方法等ありましたらご教授お願いします。
もし、CalcのVBAの不具合であれば、回避策をご教授おねがいします。

OpenOffice.orgでマクロを動作させる設定(ツール>オプションで、「マクロセキュリティ」を「中」に設定し、「読み込みと保存」で「VBA属性」のすべてにチェックをいれました)をし、CalcでExcelのファイルを読み込み、ods形式で保存しました。

マクロの管理で、読み込んだマクロに必要な修正(マクロ内で読み込むファイルを.xlsからodsに変更)をしました。
Excelでは問題なく動作しているマクロです。

不要な箇所を削除したサンプルを添付します。
よろしくお願いします。


無題

CW (2010-06-09 18:08:56 (水))

添付したファイルの使い方ですが、
とりまとめの1枚目のシートに、SAMPLEtest.odsを格納したパスを記入していただき、それからtest2と記入した状態で送付しましたが、SAMPLEtest2.odsではなく、SAMPLEtest.odsを添付してしまいましたので、test2をtestに修正をしていただき、データをまとめるボタンをクリックします。

xlsのファイルは、SAMPLEとりまとめ.odsをもとにxlsで保存し、マクロのコードをodsからコピペしたものです(読み込むファイル名を.odsから.xlsに修正など、多少編集しています)
動作はodsと同じです。

xlsの読み込みファイルを追加しようとしているのですが、うまくアップロードできませんので、後ほどアップロードをしてみます。

無題

CW (2010-06-09 18:11:58 (水))

アップロードできたようですので、test2のファイルもアップロードしました。
このファイルの主な違いは、読み込む箇所(コピーしたい箇所)が、別なシートの参照か、直接値が記入されているかの違いです。(値自体も違っていますが)

兼用ではなく移行ですね?

ike@九州 (2010-06-10 12:16:35 (木))

VBA形式での記述では限界があります。

今回の件では、新たに BOOK を開く事によりそちらがアクティブな BOOK になり
Copy、Paste は対象がアクティブな BOOK でのみの動作に限られるようです。

アクティブな BOOK の変更が VBA 記述では実行不能なようで
Workbooks("hoge.ods").activate など動作しませんでした。

なので OOoBasic だと以下のような記述になります(値のみコピー)

〜
File = PATH & "\" & FILENAME & KANA & ".ods"
NewDoc = Stardesktop.loadComponentfromURL(convertToURL(File),"_blank",0,Array())
oRange = ThisComponent.getSheets().getByName("まとめ").getCellRangeByName("A2:AC2")
oTargetRange = NewDoc.getSheets().getByName("集計").getCellRangeByName("A2:AC2")

'oTargetRange の値のみを oRange へコピー
'セルの数は同数必須で日付などがある場合は oRange で予め日付書式設定が必要
oRange.setDataArray(oTargetRange.getDataArray())
NewDoc.close(true)


VBA互換モードは以下で詳細にレポートされてます
http://freeopenoffice.jimdo.com/

OOoBasic は以下必読です
http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic%2FCalc

無題

CW (2010-06-11 17:46:51 (金))

ike@九州様

回答およびサンプルコード提示ありがとうございます。

サンプルではシンプル化のため、1件決め打ちでしたが、実際には複数レコードの処理を予定しています。
そのために、getCellRangeByNameをgetCellRangeByPositionに変更しました。
引数の渡し方で少々てこずりましたが、集計のシートに値をコピーできることを確認しました。
ありがとうございます。

お名前:
題名:


添付ファイル: fileSAMPLEtest2.ods 478件 [詳細] fileSAMPLEtest.xls 415件 [詳細] fileSAMPLEtest2.xls 431件 [詳細] fileSAMPLEとりまとめ.xls 442件 [詳細] fileSAMPLEtest.ods 458件 [詳細] fileSAMPLEとりまとめ.ods 439件 [詳細]