過去ログ

                                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
 ───────────────────────────────────────  ■題名 : Re:1004実行時エラー  ■名前 : Jカーター  ■日付 : 03/1/2(木) 9:15  -------------------------------------------------------------------------
   おはようございます。
まず感想から
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

やりたいことをよく理解していません。
間違っていたらごめんなさい。
 ───────────────────────────────────────  ■題名 : Re:1004実行時エラー  ■名前 : goro  ■日付 : 03/1/2(木) 17:55  -------------------------------------------------------------------------
   おめでとうございます。
新春から素人の質問に答えていただき有難うございます。 _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カーターさん&サイト・オーナーさん
また何かありましたらよろしくお願いします。 :-)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 494