Page 494 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼1004実行時エラー goro 03/1/2(木) 3:02 ┗Re:1004実行時エラー Jカーター 03/1/2(木) 9:15 ┗Re:1004実行時エラー goro 03/1/2(木) 17:55 ─────────────────────────────────────── ■題名 : 1004実行時エラー ■名前 : goro ■日付 : 03/1/2(木) 3:02 -------------------------------------------------------------------------
goroと申します。超初心者です。 winのexcel2002で、初歩的なマクロをつくって勉強中ですが、 以下のsubroutineが、実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです で、最後の行で止まります。 シート名を指定してのactivateをこの前にやってみても一緒です。 R1C1型のアドレス指定が問題なのかとも一瞬思いましたが、 エラーメッセージのコメントを見るとそうでもなさそうです。 よろしくお願いします。 ---------------------------------- Sub getlocation() Dim rowln, clmln As Long, datarange As String Application.DisplayAlerts = False Range("A1").Select Cells.Find("gmdc").Activate rowln = ActiveCell.Row clmln = ActiveCell.Column MsgBox "列は" & clmln & "。 行は" & rowln datarange = "R2C1:R" & rowln - 1 & "C" & clmln ActiveSheet.Range("F5:J8").Select ActiveCell.Formula = datarange ActiveSheet.Range(datarange).Select End Sub |
おはようございます。 まず感想から Select とか Actieveはほとんどが必要ないです。 Findメソッドの引数は省略すると結果に影響することがあります。 Findメソッドで検索値がなかった場合 > Cells.Find("gmdc").Activate でエラーになります。(ないものをアクティブに出来ません。) F5:J8セルにR2C1:R*C*の文字を入れたいみたいですが > ActiveSheet.Range("F5:J8").Select > ActiveCell.Formula = datarange ではF5セルにしか入力できません。 (複数選択されていてもActiveCellは一つです) エラーの原因はがR1C1形式でしょう?(確実ではありません) (試しに datarange = "A2:D" & rowln - 1にしたらエラーにならなかったので) 最初の > Application.DisplayAlerts = False は何のためにあるのですかTrueの戻さなくていいのですか? 変数宣言で > Dim rowln, clmln As Long としていますが rowlnに変数の型が明示されたいないのでVariant型になってしまいます。 ところで提示されたマクロは何をしたいのでしょうか? 一応代案を考えてみました。 Option Explicit Sub test() Dim Rowln as Long , Clmln As Long Dim Frg As Range, Datarange As Range Set Frg = Cells.Find("gmdc", , xlValues, xlWhole) If Not Frg Is Nothing Then Rowln = Frg.Row Clmln = Frg.Column MsgBox "列は" & Clmln & "。 行は" & Rowln Set Datarange = Range("A2", Frg.Offset(-1)) Range("F5:J8").Formula = Datarange.Address(, , xlR1C1) Datarange.Select Set Datarange = Nothing Set Frg = Nothing End If End Sub やりたいことをよく理解していません。 間違っていたらごめんなさい。 |
おめでとうございます。 新春から素人の質問に答えていただき有難うございます。 _o_ >Select とか Actieveはほとんどが必要ないです。 >Findメソッドの引数は省略すると結果に影響することがあります。 >Findメソッドで検索値がなかった場合 >> Cells.Find("gmdc").Activate >でエラーになります。(ないものをアクティブに出来ません。) こういうのをサッと教えてもらえるのはホント助かります。 >F5:J8セルにR2C1:R*C*の文字を入れたいみたいですが >> ActiveSheet.Range("F5:J8").Select >> ActiveCell.Formula = datarange >ではF5セルにしか入力できません。 >(複数選択されていてもActiveCellは一つです) これは承知してました。 これは最後の行がうまくいかなかったのでちゃんとデータが入ってるか知りたくて、 ActiveSheet.Range("F5:J8").Select の行とともに入れただけです (^^ゞ ですから、やりたいこととは無関係。 >エラーの原因はがR1C1形式でしょう?(確実ではありません) >(試しに datarange = "A2:D" & rowln - 1にしたらエラーにならなかったので) やっぱり、R1C1形式ですね。この形式を使う時は要注意ですね。 >最初の >> Application.DisplayAlerts = False >は何のためにあるのですかTrueの戻さなくていいのですか? これは確かに不要ですよね (^^; 実は別のsubroutineを作ってて、copy後にclose()をするときに clipboardに残ったデータのために毎回ダイアログが出てたので、 (For End For が入ってるのでうざったかった) netで検索したQ&A(?)を参考に入れたのがそのまま残ってました。 混乱させてすみません。 これにも正当派のやり方があるようですね。 >変数宣言で >> Dim rowln, clmln As Long >としていますが >rowlnに変数の型が明示されたいないのでVariant型になってしまいます。 ご指摘有難うございます。これも気がついて訂正しました _o_ >ところで提示されたマクロは何をしたいのでしょうか? >一応代案を考えてみました。 (中略) >やりたいことをよく理解していません。 >間違っていたらごめんなさい。 いえ、本当に有難うございます。目的は…ですねぇ。 1.毎日の来訪者データ(データ数は変動する。休日などで抜ける日もある)を 月単位で一つのファイルに追加する形でまとめる、というのを狙った。 そのための部分的テスト。 2.今後のために色々試してみたかった というところです。 結局、くどいR1C1を使わない形で作り直し、全体も出来て動くようになりました。 まだ「美しく」ないので時間があれば(ご指摘を参考に)少し磨こうと思います。 自分がexcel4.0のころのマクロしかやってなかったので、 VBの概念と構造がまだよく把握できてなかったようです。 まだmac古いマシンを現役で使っているもので、時間がとれないままに、 当時の4.0マクロをwin新とmac旧、mac新、で使いまわしていたりします。 (データのやり取りがwin←→mac間でも一部ありますので) 今回も馴染んだ4.0で作っていたら、2002では認識しないコマンドがあったので、 やむなく正月休みを利用して、作りながら覚えよう、といった状況でした。 本当に有難うございました >Jカーターさん&サイト・オーナーさん また何かありましたらよろしくお願いします。 :-) |