プロが教えるわが家の防犯対策術!

自作マクロを作成し別ブックから転記するものですがExcel2000では正常に動くのですが、Excel2007では、転記対象のセルが0なら空白にするという行(IF文)で「型が一致しません」と表示されてしまいます。
ExecuteExcel4Macroが悪いのか、いろいろ調べましたが型とは?などマクロ初心者なので分からないです。宜しくお願いします。

For i = 1 To 7
Cells(i, 1).Value = ExecuteExcel4Macro("'\[meca.xls]Sheet1'!R" & i & "C1")
If ExecuteExcel4Macro("'\[meca.xls]Sheet1'!R" & i & "C1") = "0" Then Cells(i, 1).Value = ""
Next i

A 回答 (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についてはご自分で調べてみてください。
そうすることがスキルアップにつながると考えます。
以上です。
    • good
    • 0
この回答へのお礼

エラーも無くなり、できました。
ステップごとにやってみてどうやら("'\[meca.xls]
あたりを疑って絶対パスに変更したら("'C:\[meca.xls]すんなりいきました。
お陰さまで大分勉強できてVBAの面白さも
わかってきました。
ありがとうございました。

お礼日時:2010/04/06 21:39

回答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ステップごとに「値の更新」という
ダイアログボックスが出て
その度にファイルを選び直さないと
値が転記されないのです。
どうすればよいでしょうか。

補足日時:2010/04/06 08:56
    • good
    • 0

手元に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

に代えてみてください。

以上です。
    • good
    • 0

度々すみません。


分かりやすいページがありました。
[開発]タブの[マクロのセキュリティ]でも設定できます。
ご参考まで。

参考URL:http://kiyopon.sakura.ne.jp/soft/2007.html

この回答への補足

ご連絡ありがとうございます。事前にマクロは有効にしていました。
動作させた後で実行したら「型が一致しません」のエラーが表示されました。

補足日時:2010/04/05 20:34
    • good
    • 0

マクロが無効になっているのではないでしょうか?エクセル2007では、標準の設定で、無効になっていると思います。

それを、有効に設定すればよいと思います。
    • good
    • 0

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