* Calcでのマクロ(VBA)のRange.Copyでセルのコピーができません [#y24ade51]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|CW|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(重要,faq03,priority)|
 |~状態|#listbox3(回答中,faq03,state)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Calc 表計算,faq03,category)|
 |~投稿日|2010-06-09 17:48:48 (水)|
 |~OS|Windows XP Pro SP2|
 |~依存するページ||
 |~バージョン|#listbox3(3.1.1,faq03,version)|
 
 ** メッセージ [#m68bc81f]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 OOoUG Q&A担当者様~
 ~
 お世話になります。~
 ~
 VBAマクロを含む既存のExcelをCalcに移行しようとしています。~
 移行したCalcのマクロで、Range.Copyでのセルの範囲のコピーができていないようです。~
 使用方法がまずいのでしょうか?~
 正しい使用方法等ありましたらご教授お願いします。~
 もし、CalcのVBAの不具合であれば、回避策をご教授おねがいします。~
 ~
 OpenOffice.orgでマクロを動作させる設定(ツール>オプションで、「マクロセキュリティ」を「中」に設定し、「読み込みと保存」で「VBA属性」のすべてにチェックをいれました)をし、CalcでExcelのファイルを読み込み、ods形式で保存しました。~
 ~
 マクロの管理で、読み込んだマクロに必要な修正(マクロ内で読み込むファイルを.xlsからodsに変更)をしました。~
 Excelでは問題なく動作しているマクロです。~
 ~
 不要な箇所を削除したサンプルを添付します。~
 よろしくお願いします。
 
 ----
 ***無題 [#y67a24d3]
 >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の読み込みファイルを追加しようとしているのですが、うまくアップロードできませんので、後ほどアップロードをしてみます。~
 
 //
 ***無題 [#ca728a03]
 >CW (2010-06-09 18:11:58 (水))~
 ~
 アップロードできたようですので、test2のファイルもアップロードしました。~
 このファイルの主な違いは、読み込む箇所(コピーしたい箇所)が、別なシートの参照か、直接値が記入されているかの違いです。(値自体も違っていますが)~
 
 //
 ***兼用ではなく移行ですね? [#b27ea35b]
 >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~
 
 //
 ***無題 [#x50f6125]
 >CW (2010-06-11 17:46:51 (金))~
 ~
 ike@九州様~
 ~
 回答およびサンプルコード提示ありがとうございます。~
 ~
 サンプルではシンプル化のため、1件決め打ちでしたが、実際には複数レコードの処理を予定しています。~
 そのために、getCellRangeByNameをgetCellRangeByPositionに変更しました。~
 引数の渡し方で少々てこずりましたが、集計のシートに値をコピーできることを確認しました。~
 ありがとうございます。~
 
 //
 #article