• ベストアンサー

エクセルVBAでシートの種類を取得したい

エクセル2000です。 BOOK内の全シートに、ある処理をしようと思いますが、シートの種類によって分岐させたいのです。そのためにはシートが Worksheetか、古いですがDialogsheetか、あるいはグラフなのかを判別しなければなりません。 ためしに、 Sub test01() For Each st In Sheets st.Activate MsgBox st.Type Next End Sub としてみましたが取得できませんでした。 シートの種類を取得するにはどのような記述になるのでしょうか?

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.1

こんな感じで如何でしょうか。 Sub test01() Dim st As Object For Each st In Sheets   st.Activate   MsgBox TypeName(st) Next End Sub

merlionXX
質問者

お礼

ありがとうございます。完璧です!

すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAでSheet1.ActivateとSheet(n).Activate

    エクセル2000です。 VBAでの疑問点を教えてください。 Sub test1() Sheet1.Activate MsgBox ActiveSheet.Name End Sub これは問題なく作動します。 Sub test2() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheet(n).Activate MsgBox ActiveSheet.Name Next End Sub これは「SubまたはFunctionがていぎされていません」というエラーになります。 もちろん、 Sub test3() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets(n).Activate MsgBox ActiveSheet.Name Next End Sub のように書けばOKなのは存じておりますが、これではSheet名に係らず、左から順番となってしまいます。 Sub test4() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets("Sheet" & n).Activate MsgBox ActiveSheet.Name Next End Sub のように明確にシート名として記述すればOKなのですが、それでは、Test1のSheet1.Activate が通って、Sheet(n).Activate が通らないのはなぜでしょう? しょうもない質問でごめんさない。

  • エクセルVBAで一番左の可視シート名を取得

    エクセルVBAで一番左側にあるシート名を取得する場合、通常は Sub test01()   MsgBox Sheets(1).Name End Sub で簡単にできますが、このSheets(1)が非表示になっている場合でもその名前が取得されるため、見た目での一番左側にあるシート名ではなくなってしまいます。 もちろん、非表示になっているシートを除外して Sub test02()   Dim n As Integer   For n = 1 To Sheets.Count     If Sheets(n).Visible Then       MsgBox Sheets(n).Name       Exit For     End If   Next End Sub とすれば取得できるのはわかりますが、こんなまだるっこい方法以外に簡単に一番左の可視シート名を取得する方法はないでしょうか? (^∇^)? ご教示くださいませ。

  • 開いているシートをチェックする

    いつもこちらでお世話になってます。 VBAで、ひとつのブックの開いているシートをチェックする方法を教えてください。 "sheet1" "sheet2"  "sheet3" と同じブックにあるとし、 "sheet1"を開いてマクロを実行したら、 「シート1です」とメッセージボックスを出し、"F4"を選択。 "sheet2"を開いてマクロを実行したら、 「シート2です」とメッセージボックスを出し、"G4"を選択。 "sheet3"を開いてマクロを実行したら、 何もしない。 というようなコードをどうすればいいいのでしょうか? 自分なりに試してみたのは、以下のようなものです。 ' Macro () If Sheets("sheet1").Activate Then MsgBox "シート1です"   Sheets("sheet1").range("f4").select End If If Sheets("sheet2").Activate Then MsgBox "シート2です" Sheets("sheet2").range("g4").select End If End Sub これだと、どのシートを開いていても、 "sheet1"が開いて、"シート1です" のメッセージが出て、OKを押すと、"F4"を選択し、そのまま "sheet2"が開いて、"シート2です" のメッセージが出て、OKを押すと、"G4"を選択してし、 "sheet2"が開いた状態になってしまいます。 今現在は、2つのマクロが別々にあります。 マクロのオプションでCtrl+半角キーを同じにしたい、と考えています。 マクロのオプションで同じ半角キーをすることはできるようなのですが、 そうすると、Private Sub Worksheet_Activateで "sheet1"が開いたときは"E4"を選択するようにしているので、デバックが出てしまいます。 どのようにすればいいのでしょうか?

  • エクセルVBAで SendKeys "{TAB}"

    エクセル2000です。 一つのブックに何枚かシートがあります。 各シートは保護されており、いくつかロックされていないセルがあります。 各シートの最初のロックされていないセル(シートにより異なります)にカーソルを飛ばしたいのですが、下記のようにやってもセルA1が選択されたままで飛んでくれません。 どこが悪いのでしょうか? Sub TEST() Dim sh As Worksheet For Each sh In Worksheets sh.Activate sh.Cells(1, 1).Activate SendKeys "{TAB}" MsgBox ActiveCell.Address Next End Sub なお、 sh.EnableSelection = xlUnlockedCells を挿入すればSendKeys "{TAB}"がなくとも、カーソルが飛びますが、今回はEnableSelection = xlUnlockedCellsしたくないのです。 よろしくおねがいします。

  • エクセル デバッグできるのとできないのがある

    シートイベントについて教えてください。 シートモジュールに --------------------------------------------------------- Option Explicit Private Sub Worksheet_Activate() MsgBox "" End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "" End Sub Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "" End Sub --------------------------------------------------------- と記載した時に、 F8で動かせるのは、Worksheet_Activateだけなのですがなぜでしょうか? ほかのイベントは、F8で実行させても、OSの音が鳴るだけで、マクロの実行はされません。 ご回答よろしくお願いします。

  • Excel VBA 全sheet名の取得

    1つのbookに対して、存在する全てのsheet名を一括で取得して、"まとめ"用のsheetに表示させる。という処理をしたいのですが、中々うまくいきません。 条件としましては… ・"まとめ"sheetは既に作成済 ・sheet数は複数ある ・まとめsheetの名前も一番最後に表示されると思いますが…!? 今回は処理を考慮しません。 まとめ sheetには セルA1,A2,A3…という感じで表示させてたい。で、以下がソースになります。 Sub 全sheet名_取得() Dim ws As Worksheet Dim str As String i = 1 For Each ws In ActiveWorkbook.Sheets str = ActiveSheet.Name Worksheets("まとめ").Range("A" & i) = str i = i + 1 Next End Sub Webの解説を色々と参考にはしてみたものの中々上手く処理出来ません。大変雑な処理になってしまい…、他にこんな方法もあるという場合はご教授ください。アドバイスよろしくお願い致します。

  • 「 このコード 」 のチェック を お願い致します。

    下記コードは何とか動作しますが、チェックお願い致します。 1、 MsgBox "「 空白シート 」 は ありません。"    の    追加編集が、よくわかりません。 2、 1以外に、おかしな箇所をご教示お願い致します。 --------------------------- '「 ブック1 」 に空白シートがあったら、そこへ貼り付ける Sub 空白シートへコピー() Dim ws As Worksheet For Each ws In Workbooks("ブック1.xls").Sheets If IsEmpty(ws.UsedRange) = True Then Workbooks("ブック2.xls").Activate Cells.Select Selection.Copy Workbooks("ブック1.xls").Activate ws.Select Range("A1").Select ActiveSheet.Paste Else MsgBox "「 空白シート 」 は ありません。" End If Next End Sub

  • エクセルVBA/シェープの文字列を取得

    エクセル2010です。 BOOK内の各シートにボタンやチェックボックス、ラベルやテキストボックスなどが配置されています。 これらの貼り付けられたものの一覧を作りたいのです。 Sub obj_Check() Dim st Dim sp Dim i As Long For Each st In Sheets For Each sp In st.Shapes i = i + 1 With Sheets("Sheet3") .Cells(i, "A").Value = sp.Name ' .Cells(i, "B").Value = sp.Caption ’これがエラー .Cells(i, "C").Value = st.Name End With Next sp Next st End Sub とやってみましたがsp.Captionがエラーになります。 .Cells(i, "B").Value = sp.Shapes.Range.Character.Text としても同じです。 どうやったら、シェープに書かれた文字列が取得できるのでしょうか?

  • エクセルVBAでシートコピー

    Sheets("Sheet1")をCopyして、現在の最終のシートの後に持っていき、それを変数wsに設定しようとしています。 Sub TEST01() Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) Set ws = Sheets(Sheets.Count) MsgBox ws.Name End Sub これで通常はうまくいきますが、最終シートが非表示になっているとwsはその非表示のシートが指定され、Sheets("Sheet1")をCopyしたものでなくなってしまいます。 Sheets("Sheet1")をCopyして、現在の最初のシートの前に持っていき、それを変数に設定しようとしています。 Sub TEST02() Sheets("Sheet1").Copy Before:=Sheets(1) Set ws = Sheets(1) MsgBox ws.Name End Sub これで通常はうまくいきますが、最初のシートが非表示になっているとwsはその非表示のシートが指定され、Sheets("Sheet1")をCopyしたものでなくなってしまいます。 Set ws = ActiveSheet で設定できましたが、それ以外の方法はないでしょうか?

  • エクセルVBAで全シートをアクティブにするには?

    ブック内の全シートを選択するのはSheets.Selectですね。 そうやって選択した全部のワークシートをアクティブにするにはどう記述するのでしょうか? SelectedSheets.Activateや Sheets.Activateではエラーになってしまいました。 何をしたいかといえば、全シートをアクティブにしてページ設定(横向きに)したいのです。

ミニPC LB-C12のUSB給電について
このQ&Aのポイント
  • ミニPC LB-C12のUSB給電についてのお困りごとを詳しく聞かせていただきました。パソコンの電源が切れてもUSBから給電されるため、外付けのファンが止まらないという問題が発生しています。USBからの給電を止める方法についてアドバイスをいただきたいです。
  • ミニPC LB-C12を使用している際に発生するUSB給電の問題についての質問です。パソコンの電源が切れてもUSBからの給電が続いており、それによって外付けのファンが止まらなくなってしまいます。この問題を解決する方法についてアドバイスをいただきたいです。
  • ミニPC LB-C12のUSB給電に関しての質問です。パソコンの電源が切れてもUSBから給電されるため、外付けのファンが止まりません。ファンが止まらない原因と対策方法について教えてください。
回答を見る

専門家に質問してみよう