• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ワードVBAからエクセルのソートができない)

ワードVBAからエクセルのソートができない

このQ&Aのポイント
  • MS Word 2007から条件に合う語を抜き出してエクセルに貼り付けた後、ソートをするマクロを書いているのですが、ソートの部分で「型が一致しない」というエラーが出てしまい困っています。
  • エクセルのVBAでは問題なく動作しており、Word VBAで実行するとエラーが発生しています。
  • 書き換えや修正を試みましたが、エラーは解消されないため、Windows 7/8 64bitのWord 2007とExcel 2007を使用している環境でどのように解決すればよいか、知恵をお持ちの方がいらっしゃいましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

コードの先頭部分がないので見当違いかもしれませんが 実行時バインディングにしているのなら ?xlAscending 1 ?xlSortNormal 0 ?xlTopToBottom 1 ?xlPinYin 1 にそれぞれExcelの定数を変更してみては? 事前バインディングにもかかわらずエラーになる場合は不明です。

tuktukrace
質問者

お礼

ありがとうございます。 定数を数値にしましたがダメでした。 そもそもオプションはすべてデフォルトなので、オプション部分をすべて削除した状態で実行しましたが変わりません。 たとえば myExcel.workbooks(BookName).sheets(1).Range("A1:B2").Select と書けば、A1:B2がきちんと範囲選択されるので、オブジェクト自体にはちゃんとアクセスできています。Word VBAからだとSortオブジェクトにアクセスできないのでしょうか。 Sort オブジェクト? あ、ちょっと試したいことが見つかったので試してみます。

tuktukrace
質問者

補足

できました! Range指定のたびに、オブジェクトから書き始めなければならないようです。 myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Add Key:=Range("A1") ではなく、 myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Add Key:=myExcel.workbooks(BookName).sheets(1).Range("A1") とするとできました。 参照設定で Microsoft Excel Object Library 12をオンにしていれば、定数が xl~でも大丈夫なようです。参照設定をオフにすると、一部の定数を数値で表さなければならないようです。 英語で調べたらこのサイトがヒットしました。 http://superuser.com/questions/569996/office-2007-how-to-sort-an-excel-table-from-within-a-word-macro ここではオブジェクトの定義を関数の外にするよう指示していますが、私の場合は関数内のままでもできました。

関連するQ&A