- ベストアンサー
Excel2000のマクロが2007で型が一致しませんと表示されます
- Excel2000のマクロがExcel2007で型が一致しないと表示されます。自作マクロを作成し、別のブックから転記するものですが、Excel2000では正常に動作するのに、Excel2007では転記対象のセルが0の場合にエラーが出てしまいます。
- マクロ初心者であるため、ExecuteExcel4Macroや型について調べましたが、理解できませんでした。解決策を知りたいです。
- 質問のコードは、1から7までの行のセルにExecuteExcel4Macroを使って別のブックのセルの値を転記するものです。転記対象のセルが0の場合には空白にするという処理を行っています。しかし、Excel2007では「型が一致しません」というエラーが出てしまいます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
またまた登場、myRangeです。 >転記されるようになりましたが ということは、エラーの原因は先の回答のように meca.xlsの該当セルに●エラー値●があったから、という理解でいいですか? それが一番重要なことですから、コメントした方がいいと思います。 また、「エラー値」が原因なら、 エクセルのバージョンに関係なく同じエラーになるはずです。(I'm Sure) ま、それは置いといて、補足の回答。 >1ステップごとに「値の更新」というダイアログボックスが出て コードの前後を、DisplayAlerts プロパティで挟みましょう。 '--------------------------------------------------------- Application.DisplayAlerts = False '●最初はFalse For i = 1 To 7 Cells(i, 1).Value = ExecuteExcel4Macro("'\[meca.xls]Sheet1'!R" & i & "C1") If IsError(Cells(i, 1).Value) Then Cells(i, 1).Value = "" If Cells(i, 1).Value = 0 Then Cells(i, 1).Value = "" Next i Application.DisplayAlerts = True '●最後はTrueに戻しておく '------------------------------------------- DisplayAleartsについてはご自分で調べてみてください。 そうすることがスキルアップにつながると考えます。 以上です。
その他の回答 (4)
- myRange
- ベストアンサー率71% (339/472)
回答3、myRangeです。 回答2で上手くいかなかったら(同じエラーが出たら) meca.xlsから読み込んでいるセルの値に●エラー値(#VALUE,#DIV/0等)があることが考えられます。 それは、meca.xlsを見なくてもCells(i,1)に転記されてるはずなので直ぐ確認できます。 もしエラー値が原因だったら、以下のようにエラー値を判断します。 '-------------------------- For i = 1 To 7 Cells(i, 1).Value = ExecuteExcel4Macro("'\[meca.xls]Sheet1'!R" & i & "C1") If IsError(Cells(i, 1).Value) Then Cells(i, 1).Value = "" If Cells(i, 1).Value = 0 Then Cells(i, 1).Value = "" Next i '--------------------------- エラー値だったら、空白を転記 0だったら、空白を転記 マクロになれてきたら、On Error ステートメントを使うのもいいかも知れません。 以上です。
補足
myRange様。 細かい点まで解答していただいて感謝します。 転記されるようになりましたが 1ステップごとに「値の更新」という ダイアログボックスが出て その度にファイルを選び直さないと 値が転記されないのです。 どうすればよいでしょうか。
- myRange
- ベストアンサー率71% (339/472)
手元に2007がないので検証できないので何ですが。。。 >If ExecuteExcel4Macro("'\[meca.xls]Sheet1'!R" & i & "C1") = "0" Then Cells(i, 1).Value = "" の ="0" を = 0 にしてみてください。 それでダメなら、 ExecuteExcel4Macro("'\[meca.xls]Sheet1'!R" & i & "C1") を2度使う必要はないので、IF文を If Cells(i, 1).Value = 0 Then Cells(i, 1).Value = 0 に代えてみてください。 以上です。
- ro-chan
- ベストアンサー率38% (45/116)
度々すみません。 分かりやすいページがありました。 [開発]タブの[マクロのセキュリティ]でも設定できます。 ご参考まで。
補足
ご連絡ありがとうございます。事前にマクロは有効にしていました。 動作させた後で実行したら「型が一致しません」のエラーが表示されました。
- ro-chan
- ベストアンサー率38% (45/116)
マクロが無効になっているのではないでしょうか?エクセル2007では、標準の設定で、無効になっていると思います。それを、有効に設定すればよいと思います。
お礼
エラーも無くなり、できました。 ステップごとにやってみてどうやら("'\[meca.xls] あたりを疑って絶対パスに変更したら("'C:\[meca.xls]すんなりいきました。 お陰さまで大分勉強できてVBAの面白さも わかってきました。 ありがとうございました。