Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10653 / 13644 ツリー ←次へ | 前へ→

【20458】アプリケーション定義またはオブジェクト定義のエラーです コウ 04/12/9(木) 18:09 質問[未読]
【20473】Re:アプリケーション定義またはオブジェク... ni 04/12/9(木) 22:21 回答[未読]
【20475】Re:アプリケーション定義またはオブジェク... [名前なし] 04/12/9(木) 22:28 発言[未読]
【20481】Re:アプリケーション定義またはオブジェク... ni 04/12/10(金) 1:24 発言[未読]
【20486】Re:アプリケーション定義またはオブジェク... コウ 04/12/10(金) 10:39 お礼[未読]
【20516】Re:アプリケーション定義またはオブジェク... [名前なし] 04/12/10(金) 21:49 発言[未読]
【20586】Re:アプリケーション定義またはオブジェク... ni 04/12/12(日) 23:25 発言[未読]
【20588】Re:アプリケーション定義またはオブジェク... [名前なし] 04/12/13(月) 0:14 発言[未読]
【20638】Re:アプリケーション定義またはオブジェク... ni 04/12/13(月) 18:10 発言[未読]
【20641】Re:アプリケーション定義またはオブジェク... [名前なし] 04/12/13(月) 21:46 発言[未読]

【20458】アプリケーション定義またはオブジェクト...
質問  コウ  - 04/12/9(木) 18:09 -

引用なし
パスワード
   たびたびすいません。よろしくお願いします。
CSVファイルからExcelシートにデータをコピーするプログラムを作成しているのですが、
途中でエラーがでます。原因が良くわからないので、ご助力いただけたらと思います。

・環境:Windows2000,Excel2000

・ソースコード(すいません、作成中なので無限ループになっています。)
  'CSVデータシートをオブジェクト変数に設定する
  Set obCsvSheet = wkbWorkBook.Worksheets(strCsvSheetName)
  '支店名検索開始位置を設定する
  strSittenSelNo = "A1"
  'CSVデータシートからセンター計を検索する
  Set rngCenterSelNo = obCsvSheet.Range("A:A").Find(What:="センター計", lookat:=xlWhole, _
    MatchByte:=True)
  '支店名検索ループ
  Do
    'CSVデータシートから支店名を検索する
    Set rngSittenSelNo = obCsvSheet.Range(Range(strSittenSelNo), Range(rngCenterSelNo.Address)).Find(What:="支店", lookat:=xlPart, _
      MatchByte:=True)
    '支店名の入ったセル位置を退避する
    strSittenSelNo = rngSittenSelNo.Address
    'ワークブックにワークシートを追加する
    wkbWorkBook.Worksheets.Add Before:=Sheets(1)
    '追加したワークシートに名前を付ける
    wkbWorkBook.Worksheets(1).Name = rngSittenSelNo.Value
    '営業所別入電件数シートからレイアウトをコピー
    Layout230.Range("A1:AH4").Copy _
      Destination:=wkbWorkBook.Worksheets(rngSittenSelNo.Value).Range("A1:AH4")
    '支店名を設定する
    wkbWorkBook.Worksheets(rngSittenSelNo.Value).Range("A1").Value = rngSittenSelNo.Value
    '日付のセル位置を取得する
    strDateSelNo = obCsvSheet.Range(strSittenSelNo).Offset(1, 2).Address
    'CSVデータシートから日付、曜日をコピーする
    obCsvSheet.Range(strDateSelNo).Resize(2, 31).Copy
    wkbWorkBook.Worksheets(rngSittenSelNo.Value).Range(strDateSelNo).Offset(-1, 0).PasteSpecial Paste:=xlPasteValues
    '営業所検索開始位置を設定する
    strEigyouSelNo = strSittenSelNo
    'ワークブック内営業所データコピー開始位置を設定する
    strWkbStartSelNo = "C5"
    '営業所検索ループ
    Do
      ActiveCell.Copy: Application.CutCopyMode = False
      'CSVデータシートから合計を検索する
      Set rngGokeiSelNo = obCsvSheet.Range(Range(strEigyouSelNo), Range(rngCenterSelNo.Address)).Find(What:="合計", lookat:=xlWhole, _
        MatchByte:=True)★
      'CSVデータシートから営業所を検索する
      Set rngEigyouSelNo = obCsvSheet.Range(Range(strSittenSelNo), Range(rngGokeiSelNo.Address)).Find(What:="営業所", lookat:=xlPart, _
        MatchByte:=True)
      '営業所の入ったセル位置を退避する
      strEigyouSelNo = rngEigyouSelNo.Address
      '営業所データコピー開始位置を設定する
      strEigyouStartSelNo = Range(strEigyouSelNo).Offset(-1, 0)
      '営業所別入電件数シートからレイアウトをコピー
      Layout230.Range("A5:AH8").Copy _
        Destination:=wkbWorkBook.Worksheets(rngSittenSelNo.Value).Range(strEigyouStartSelNo)
      'CSVデータシートから営業所のデータをコピーする
      obCsvSheet.Range(strEigyouStartSelNo).Resize(3, 31).Copy
      wkbWorkBook.Worksheets(rngSittenSelNo.Value).Range(strWkbStartSelNo).PasteSpecial Paste:=xlPasteValues
      'ワークブック内営業所データコピー開始位置を設定する
      strWkbStartSelNo = Range(strWkbStartSelNo).Offset(3, 0)
      i = 0
    Loop


  Loop

部分的なのですが、コードは上記のとうりです。実行すると★の部分で、エラーが
発生します。内容は、
エラーコード:1004
エラー内容:アプリケーション定義またはオブジェクト定義のエラーです。

【20473】Re:アプリケーション定義またはオブジェ...
回答  ni  - 04/12/9(木) 22:21 -

引用なし
パスワード
   こんにちは

詳しくは見ていないのですが、

> Set rngGokeiSelNo = obCsvSheet.Range(Range(strEigyouSelNo), Range(rngCenterSelNo.Address)).Find(What:="合計", lookat:=xlWhole, _
        MatchByte:=True)

これを、

 Set rngGokeiSelNo = obCsvSheet.Range(obCsvSheet.Range(strEigyouSelNo), _
      obCsvSheet.Range(rngCenterSelNo.Address)).Find(What:="合計", _
      lookat:=xlWhole, _
        MatchByte:=True)

このようにしてみて下さい。
引数の Range の対象を指定していないので、エラーになったと思われます。
            

【20475】Re:アプリケーション定義またはオブジェ...
発言  [名前なし]  - 04/12/9(木) 22:28 -

引用なし
パスワード
   ▼ni さん:
>こんにちは
>
>詳しくは見ていないのですが、
>
>> Set rngGokeiSelNo = obCsvSheet.Range(Range(strEigyouSelNo), Range(rngCenterSelNo.Address)).Find(What:="合計", lookat:=xlWhole, _
>        MatchByte:=True)
>
>これを、
>
> Set rngGokeiSelNo = obCsvSheet.Range(obCsvSheet.Range(strEigyouSelNo), _
>      obCsvSheet.Range(rngCenterSelNo.Address)).Find(What:="合計", _
>      lookat:=xlWhole, _
>        MatchByte:=True)
>
>このようにしてみて下さい。
>引数の Range の対象を指定していないので、エラーになったと思われます。
>            
'CSVデータシートから支店名を検索する
のところも同じような書き方してるようですけど、そちらがエラーにならないのは
なんででしょうね。

【20481】Re:アプリケーション定義またはオブジェ...
発言  ni  - 04/12/10(金) 1:24 -

引用なし
パスワード
   ▼[名前なし] さん:
           
>'CSVデータシートから支店名を検索する
>のところも同じような書き方してるようですけど、そちらがエラーにならないのは
>なんででしょうね。

おそらく、そちらはActiveSheetが同じシートなのだと思います。
途中で、シートを追加しているので、追加したシートが
アクティブになっているのでしょう。

【20486】Re:アプリケーション定義またはオブジェ...
お礼  コウ  - 04/12/10(金) 10:39 -

引用なし
パスワード
   返信有難うございます。
教えて頂いた方法でやってみたいと思います。

【20516】Re:アプリケーション定義またはオブジェ...
発言  [名前なし]  - 04/12/10(金) 21:49 -

引用なし
パスワード
   ▼ni さん:
>▼[名前なし] さん:
>           
>>'CSVデータシートから支店名を検索する
>>のところも同じような書き方してるようですけど、そちらがエラーにならないのは
>>なんででしょうね。
>
>おそらく、そちらはActiveSheetが同じシートなのだと思います。
>途中で、シートを追加しているので、追加したシートが
>アクティブになっているのでしょう。

なるほど。そういうことでしたか。

Set rngGokeiSelNo = obCsvSheet.Range(strEigyouSelNo,rngCenterSelNo.Address).Find(What:="合計", lookat:=xlWhole, _
        MatchByte:=True)
という書き方はどうでしょう。

【20586】Re:アプリケーション定義またはオブジェ...
発言  ni  - 04/12/12(日) 23:25 -

引用なし
パスワード
   ▼[名前なし] さん:
>Set rngGokeiSelNo = obCsvSheet.Range(strEigyouSelNo,rngCenterSelNo.Address).Find(What:="合計", lookat:=xlWhole, _
>        MatchByte:=True)
>という書き方はどうでしょう。

動けばいいんじゃないですか^^

With obCsvSheet
 Set rngGokeiSelNo = .Range(.Range(strEigyouSelNo), _
      .Range(rngCenterSelNo.Address)).Find(What:="合計", _
      lookat:=xlWhole, MatchByte:=True)
End With

と言う書き方もありますね。

【20588】Re:アプリケーション定義またはオブジェ...
発言  [名前なし]  - 04/12/13(月) 0:14 -

引用なし
パスワード
   ▼ni さん:
>動けばいいんじゃないですか^^
>
>With obCsvSheet
> Set rngGokeiSelNo = .Range(.Range(strEigyouSelNo), _
>      .Range(rngCenterSelNo.Address)).Find(What:="合計", _
>      lookat:=xlWhole, MatchByte:=True)
>End With
>
>と言う書き方もありますね。

それもありですね。
確かに、「結果的に期待した動作」になれば、自分のやりやすい方法で
いいかもですね。

【20638】Re:アプリケーション定義またはオブジェ...
発言  ni  - 04/12/13(月) 18:10 -

引用なし
パスワード
   こんにちは

>>動けばいいんじゃないですか^^

↑ なんだか、失礼なコメント書いてしまいました。m(__)m
動作確認が出来ていなかったので、「OKです」と書けませんでした。

Sheet2を選択しておいて、

Sub test()
  Sheet1.Range("A1", "B3").Value = 1
End Sub

で、Sheet1のA1:B3に1が書き込めましたので、名前なしさんの方法でもOKだと思います。

【20641】Re:アプリケーション定義またはオブジェ...
発言  [名前なし]  - 04/12/13(月) 21:46 -

引用なし
パスワード
   ▼ni さん:
>動作確認が出来ていなかったので、「OKです」と書けませんでした。
いえいえ、どうかお気になさらずに。

>で、Sheet1のA1:B3に1が書き込めましたので、名前なしさんの方法でもOKだと思います。
実際自分でもやってみて出来たんですが、実は「こういう場合は出来ない」とか
あるんじゃないかと思ってました。

なんか本題と関係なくなってきたんでこの辺で・・・。(^^A

10653 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free