こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAで、作業対象を全ワークシートか選択シートかを切り替えたい

エクセル2000です。
VBAで、作業対象を全部のワークシートか選択されたシートかを任意で切り替えたいのです。
ためしに無理とは思いながら以下のように作ってみましたが、当然のようにエラーになります。
どうかお知恵をお貸しくださいませ。
お願い致します<(_ _)>

Sub test()
sc = ThisWorkbook.Worksheets.Count
ssc = ActiveWindow.SelectedSheets.Count

If sc <> ssc Then

ans2 = MsgBox(ssc & " 枚のシートだけでいいんですね?" _
& vbCr & "" _
& vbCr & "もし全部のシート(" & sc & "枚)を対象にするなら" _
& vbCr & "いいえを選択してください。", vbYesNo + vbQuestion, " o(^-^)o")
ts = IIf(ans = vbNo, Worksheets, ActiveWindow.SelectedSheets)'ここでエラー

End If

For Each sh In ts
sh.Activate
sh.Cells(1, 1).Value = sh.Name
Next sh

End Sub

投稿日時 - 2006-10-05 18:29:49

QNo.2453053

困ってます

質問者が選んだベストアンサー

こんにちは。

zap35 さんのご回答で解決済みだと思います。蛇足で恐縮ですが、オリジナル
のコードだと、全てのシートを選択状態で実行すると ts が Empty でエラー
になります。

Sub test()
  sc = ActiveWorkbook.Worksheets.Count
  ssc = ActiveWindow.SelectedSheets.Count
  Set ts = ActiveWindow.SelectedSheets
  If sc <> ssc Then
    ans2 = MsgBox(ssc & " 枚のシートだけでいいんですね?" _
    & vbCr & "" _
    & vbCr & "もし全部のシート(" & sc & "枚)を対象にするなら" _
    & vbCr & "いいえを選択してください。", vbYesNo + vbQuestion, " o(^-^)o")
    If ans2 = vbNo Then Set ts = ActiveWorkbook.Worksheets
  End If
  For Each SH In ts
    ' SH.Activate
    SH.Cells(1, 1).Value = SH.Name
  Next SH
End Sub

投稿日時 - 2006-10-05 21:29:03

お礼

KenKen_SP、おはようございます。
試してみましたが、まさにその通りでした。
よくよく見れば、If sc <> ssc のときにしかSet ts をしてないんですから当然なんですよね。
勉強になりました。いつもありがとうございます。o(^-^)o

投稿日時 - 2006-10-06 09:27:57

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

IIS関数を使用するところを以下に差し替えたら動きませんか? tsはオブジェクトなのでSetでないとダメではないでしょうか…?

If ans2 = vbYes Then
 Set ts = ActiveWindow.SelectedSheets
Else
 Set ts = ThisWorkbook.Worksheets
End If

投稿日時 - 2006-10-05 18:54:34

お礼

> tsはオブジェクトなのでSetでないとダメではないでしょうか…?

仰せの通りでございました。 (^^;;
ありがとうございます。

投稿日時 - 2006-10-05 19:14:53

あなたにオススメの質問