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

解決済みの質問

EXCELマクロ シートのありなし

EXCELのマクロでシートの存在を返す関数を作っています。
一応動くのですが、ブックをいちいちアクティブにしているのが
気に入りません。スマートな手法を教えて頂けませんか。
よろしくお願いします。
例)
 A.xls、B.xls、C.xls、D.xlsのように複数のブックが開かれています。
 マクロは、マクロ.xlsというファイルに記述しているとします。
 例えば、A.xlsというファイルにsheet4という名前のシートが存在するか調べたい。


Function isExistingSheetName2(Bookname As String, sheetname As String) As Boolean
Dim wb As Workbook
Dim ws As Worksheet
Dim flag As Boolean
Dim wbown As Workbook
Dim wsown As Worksheet

'現在を記憶
Set wbown = ThisWorkbook
Set wsown = ActiveSheet

'判定
Set wb = Workbooks(Bookname)
wb.Activate                  ’←特に気に食わない

  For Each ws In Worksheets
If ws.Name = sheetname Then flag = True
Next ws

'元に戻る
wbown.Activate                ’←気に食わない   
wsown.Select                 ’←若干気に食わない

  '戻り値
If flag = True Then
isExistingSheetName2 = True
Else
isExistingSheetName2 = False
End If
End Function

’excel 2002 SP3
’windowsXP Pro SP3

投稿日時 - 2013-08-10 02:16:33

QNo.8213316

困ってます

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

シートの有無を調べるだけならActivateする必要はありません。

'判定
Set wb = Workbooks(Bookname)

For Each ws In wb.Worksheets ' ← wbのワークシートでFor eachを回す
 If ws.Name = sheetname Then flag = True
Next ws

'元に戻る ← 不要

投稿日時 - 2013-08-10 03:01:26

補足

遅くなりました。申し訳ありません。
試させて頂き、本日中に入力致します。

投稿日時 - 2013-08-19 12:17:56

お礼

どうもありがとうございます。
まさに、求めていたのはこの回答なのですが
>wb.Worksheets
これを試してダメだったので質問したつもりが
どこか別のミスがあったみたいです。
アホですね。私。
助かりました。どうもありがとうございます。

投稿日時 - 2013-08-19 21:19:56

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

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

回答(2)

ANo.2

こんにちは、お邪魔します。

"スマート"、と、私が思うやり方です。

' Re8213316
Function isExistingSheetName9(BookName As String, SheetName As String) As Boolean
  On Error Resume Next
  isExistingSheetName9 = Workbooks(BookName).Sheets(SheetName).Cells.Row
End Function

投稿日時 - 2013-08-10 06:25:23

補足

遅くなりました。申し訳ありません。
試させて頂き、本日中に入力致します。

投稿日時 - 2013-08-19 12:17:32

お礼

なるほど、エラーを使う訳ですか。
スマートですね。
コードも短いし、すばらしいです。
ありがとうございます。

投稿日時 - 2013-08-19 21:19:25

あなたにオススメの質問