重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは

MS Word 2007から条件に合う語を抜き出してエクセルに貼り付けた後、ソートをするマクロを書いているのですが、ソートの部分で「型が一致しない」というエラーが出てしまい困っています。エクセルのVBAでは問題なく動作しています。

次がエクセルVBAで作ったソートのVBAです。
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:A6")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

これをWord VBAに貼り付けて、一部を変更しました。
myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Clear
myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With myExcel.workbooks(BookName).sheets(1).Sort
.SetRange Range("A1:A6")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

myExcelは事前に作成したExcelオブジェクトです。BookNameは作成したブックのファイル名です。2行目「myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal」でエラーになります。
「型が一致しない」と表示されます。ちょこちょこ書き換えているのですがエラーは解消されません。

Windows 7/8 64bit
Word 2007. Excel 2007

解決策をご存じでしたら教えてください。

A 回答 (1件)

コードの先頭部分がないので見当違いかもしれませんが


実行時バインディングにしているのなら
?xlAscending
1
?xlSortNormal
0
?xlTopToBottom
1
?xlPinYin
1
にそれぞれExcelの定数を変更してみては?
事前バインディングにもかかわらずエラーになる場合は不明です。

この回答への補足

できました!

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-200 …

ここではオブジェクトの定義を関数の外にするよう指示していますが、私の場合は関数内のままでもできました。

補足日時:2014/03/03 14:04
    • good
    • 0
この回答へのお礼

ありがとうございます。
定数を数値にしましたがダメでした。
そもそもオプションはすべてデフォルトなので、オプション部分をすべて削除した状態で実行しましたが変わりません。

たとえば
myExcel.workbooks(BookName).sheets(1).Range("A1:B2").Select

と書けば、A1:B2がきちんと範囲選択されるので、オブジェクト自体にはちゃんとアクセスできています。Word VBAからだとSortオブジェクトにアクセスできないのでしょうか。

Sort オブジェクト?

あ、ちょっと試したいことが見つかったので試してみます。

お礼日時:2014/03/03 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!