こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

こんにちは

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

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

投稿日時 - 2014-03-03 10:00:45

QNo.8497982

すぐに回答ほしいです

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

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

投稿日時 - 2014-03-03 13:11:42

補足

できました!

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

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

投稿日時 - 2014-03-03 14:04:56

お礼

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

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

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

Sort オブジェクト?

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

投稿日時 - 2014-03-03 13:49:56

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問