Excel VBA質問箱 IV

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

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


11192 / 13646 ツリー ←次へ | 前へ→

【17474】実際のワークシート数について 西ヤン 04/8/31(火) 12:21 質問[未読]
【17475】Re:実際のワークシート数について IROC 04/8/31(火) 12:46 回答[未読]
【17476】Re:実際のワークシート数について 西ヤン 04/8/31(火) 12:58 質問[未読]
【17477】Re:実際のワークシート数について IROC 04/8/31(火) 13:03 回答[未読]
【17478】Re:実際のワークシート数について 西ヤン 04/8/31(火) 13:17 質問[未読]
【17479】Re:実際のワークシート数について つん 04/8/31(火) 13:40 回答[未読]
【17480】Re:実際のワークシート数について IROC 04/8/31(火) 13:47 回答[未読]
【17481】Re:実際のワークシート数について つん 04/8/31(火) 13:51 回答[未読]
【17482】あら?……ごめんなさい つん 04/8/31(火) 15:14 発言[未読]
【17484】Re:あら?……ごめんなさい Jaka 04/8/31(火) 16:28 発言[未読]
【17486】Re:あら?……ごめんなさい Kein 04/8/31(火) 17:16 発言[未読]
【17562】Re:あら?……ごめんなさい 西ヤン 04/9/2(木) 12:05 お礼[未読]

【17474】実際のワークシート数について
質問  西ヤン  - 04/8/31(火) 12:21 -

引用なし
パスワード
   エクセルでは初期状態としてシートが3つ用意されていますが、マクロ中で実際に更新していないシートをアクティブにしようとするとエラーとなってしまいます。
Worksheet.Countにより数を求めているのですが、2シート目のアクティブでエラーとなってしまいます。実際は1つ目のシートしか更新していないので、2シート目以降の処理をスキップしたいのですが、方法がわかりません。ご存知の方、よろしくお願いします。

【17475】Re:実際のワークシート数について
回答  IROC  - 04/8/31(火) 12:46 -

引用なし
パスワード
   >マクロ中で実際に更新していないシートをアクティブにしようとするとエラー

どのようなマクロでエラーになるのでしょうか?

【17476】Re:実際のワークシート数について
質問  西ヤン  - 04/8/31(火) 12:58 -

引用なし
パスワード
   ▼IROC さん:
>>マクロ中で実際に更新していないシートをアクティブにしようとするとエラー
>
>どのようなマクロでエラーになるのでしょうか?
西ヤンです
インデックスが有効範囲ではありません というエラーです。
初心者なもので、宜しくお願いします。

【17477】Re:実際のワークシート数について
回答  IROC  - 04/8/31(火) 13:03 -

引用なし
パスワード
   エラーの種類ではなく、どのようなコードを書いているのか
お聞きしたいのですけど・・・


dim i as long

for i = 1 to worksheets.count
msgbox worksheets(i).name
next i

-------------

dim sh as worksheet
for each sh in worksheets
  msgbox sh.name
next sh

【17478】Re:実際のワークシート数について
質問  西ヤン  - 04/8/31(火) 13:17 -

引用なし
パスワード
   ▼IROC さん:
>エラーの種類ではなく、どのようなコードを書いているのか
>お聞きしたいのですけど・・・
>
>
>dim i as long
>
>for i = 1 to worksheets.count
>msgbox worksheets(i).name
>next i
>
>-------------
>
>dim sh as worksheet
>for each sh in worksheets
>  msgbox sh.name
>next sh

すいません。以下の様にしています。
Worksheets(I).Activateでエラーとなります。

Do While (Len(I_FNAME) <> 0)
  If Right$(I_FNAME, 4) = ".XLS" Or Right$(I_FNAME, 4) = ".xls" Then
   
   Workbooks.Open FileName:=F + I_FNAME
   
   K = Worksheets.Count
   LDX = SDX
   For I = 1 To K Step 1
   
     Worksheets(I).Activate

【17479】Re:実際のワークシート数について
回答  つん E-MAIL  - 04/8/31(火) 13:40 -

引用なし
パスワード
   こんにちは。
横から失礼します。

>Worksheets(I).Activateでエラーとなります。
>
>Do While (Len(I_FNAME) <> 0)
>  If Right$(I_FNAME, 4) = ".XLS" Or Right$(I_FNAME, 4) = ".xls" Then
>   
>   Workbooks.Open FileName:=F + I_FNAME
>   
      ↓
>   K = Worksheets.Count
>   LDX = SDX
>   For I = 1 To K Step 1
>   
      ↓
>     Worksheets(I).Activate

「↓」の部分で、ちゃんとブック名から指定すればどうですか?
それか、ブックをオープンした時点で変数に入れて、それで処理するとか・・・

【17480】Re:実際のワークシート数について
回答  IROC  - 04/8/31(火) 13:47 -

引用なし
パスワード
   処理の目的は何ですか?

なんだか無駄なことをしているコードに見えるのですけど・・

【17481】Re:実際のワークシート数について
回答  つん E-MAIL  - 04/8/31(火) 13:51 -

引用なし
パスワード
   >>Do While (Len(I_FNAME) <> 0)
>>  If Right$(I_FNAME, 4) = ".XLS" Or Right$(I_FNAME, 4) = ".xls" Then
>>   
>>   Workbooks.Open FileName:=F + I_FNAME
    ↑ここで、オープンされたブックがアクティブにはなりますが
>>   
>>   K = Worksheets.Count
      ↑ここはマクロの書かれているブックのシート数を
       カウントしてるみたいです
>>   LDX = SDX
>>   For I = 1 To K Step 1
>>   
>>     Worksheets(I).Activate

【17482】あら?……ごめんなさい
発言  つん E-MAIL  - 04/8/31(火) 15:14 -

引用なし
パスワード
   今一度、別のファイルを使って、改めてコードを書いてみると、
ちゃんと、「オープンされてアクティブになったブック・
に対して、「Worksheets.Count」も実行されてたわ(^^;
でも、さっきは確かに、アクティブになっているブックの
シート数ではなくて、コードの書かれているブックのシート数を数えていました。
(何度も確かめました)

すみません。なんかあやふやな情報を・・・
一度ステップ実行で、「K = Worksheets.Count」のKの値などを
確かめてみてください。

【17484】Re:あら?……ごめんなさい
発言  Jaka  - 04/8/31(火) 16:28 -

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

For I = 1 To K Step 1
  Worksheets(I).Activate
   ここの下のコードはどうなっていますか?
   これだと何やっているのか解らないので、
   ほとんど、推測の回答になりますよ。
   途中で別のブックをアクティブにしたとか...。

【17486】Re:あら?……ごめんなさい
発言  Kein  - 04/8/31(火) 17:16 -

引用なし
パスワード
   Dim MyB As Workbook

Set MyB = Workbooks.Open(FileName)

として MyB.Worksheets.Count などとするか、変数を使わずにやるなら
ActiveWorkbook.Worksheets.Count というように参照すれば良いでしょう。

【17562】Re:あら?……ごめんなさい
お礼  西ヤン  - 04/9/2(木) 12:05 -

引用なし
パスワード
   ▼Kein さん:
>Dim MyB As Workbook
>
>Set MyB = Workbooks.Open(FileName)
>
>として MyB.Worksheets.Count などとするか、変数を使わずにやるなら
>ActiveWorkbook.Worksheets.Count というように参照すれば良いでしょう。

いろいろと助言いただきありがとうございます。
作業改善のツール用にマクロ作成をしていたのですが、本業の方が忙しく
なり、マクロ作成は暫く中断する事になりました。
別途、質問を上げるかもしれませんが、その時はよろしくお願いします・
・・・・・ソースコード等を明示じて、具体的に質問する様に致します m(__)m

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