質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.40%

  • VBA

    1957questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1684questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

Excelの全てのシートの名前を調べる際にエラーが出る

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,974

syusuke9999

score 5

ワークブックにあるすべてのワークシートの名前を調べ、特定の名前のシートがあった場合、なかった場合に分けて処理を行うためのコードですが、依然うまくいっていたのですが、今どういうわけかうまく動きません。
コードが以下のようなものです。

Dim sh As Object
    For Each sh In ThsiWorkbook.Worksheets
        If sh.Name = "Something" Then
            GoTo Step1
        End If
    Next sh

Step1:

途中でエラーが起きてしまい、
「アプリケーション定義、またはオブジェクト定義のエラーです」
と出てしまいます。

ワークシートを以下の通りとします。

Sheet1(NameOfSheet1)
Sheet2(NameOfSheet2)
Sheet3(NameOfSheet3)
Sheet4(NameOfSheet4)
Sheet5(NameOfSheet5)

sh.Nameをウォッチリストで見ているとまず、
「NameOfSheet5」
となり、
その次に
「<アプリケーション定義またはオブジェクト定義のエラーです。>」
となってしまいます。

また別のアプローチとして、
 Dim i   As Integer
   For i = 1 To Worksheets.Count
        Debug.Print "シート名:" & Worksheets(i).Name
   Next i
としても、
「アプリケーション定義またはオブジェクト定義のエラーです」
と出てしまいます。
i=1の時は名前を取得できていますが、2になったときにエラーが出ています。

どなたか、お力添えいただけませんでしょうか?

追記:Excelのバージョンは2016です。

追記:以下のコードを実行したところ以下のような結果になりました
Public Sub Count()

On Error Resume Next
    Dim i   As Integer

    For i = 1 To Worksheets.Count
        Debug.Print i & "番目シート名:" & Worksheets(i).Name
    Next i
    
End Sub

結果:
1番目シート名:NameOfSheet4
2番目シート名:NameOfSheet5
4番目シート名:NameOfSheet2
5番目シート名:NameOfSheet3
シートの名前が実際の順番とばらばらである事と、3をインデックスに指定するとエラーが起こるようです。

前回、2016で同様のコードを動かした時は問題なく動いていました。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Tak1wa

    2015/10/26 14:38

    以前うまくいっていた際のバージョンも2016ですか?

    キャンセル

  • syusuke9999

    2015/10/27 01:43

    今回の現象は2016で初めて経験しました。
    前回、2016で同様のコードを動かした時は問題なく動いていました。

    キャンセル

回答 3

checkベストアンサー

0

こんにちは。

Excel2016で試してみましたが、再現しません。
※ちなみにコードの「ThsiWorkbook」は「ThisWorkbook」ですよね?正しく記載をお願いします。

シート順序を入れ替えての確認なども行いましたが、
シート順に名前が取得されます。

sh.Nameをウォッチリストで見ているとまず、 
これはどこへブレークポイントを設定したのでしょうか。
デバッグの仕方に問題があるのか、またはブックの設定などなんらかの設定によって再現し得るのか判断が難しいところです。

こういうときは新規ブックを作成し提示したコードのみを設定した最小限の状態にて、
質問者さんの環境で発生するのか確認することです。

発生しなければ、現在発生するブックと同様の処理をひとつづつ付け足していき、どの処理によって発生するのか、問題点の切り分けを行うのが基本的な解決方法になるかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/27 01:38

    >「ThsiWorkbook」は「ThisWorkbook」ですよね?
    申し訳ありません。「ThisWorkbook」です。
    >これはどこへブレークポイントを設定したのでしょうか。
    If sh.Name = "Something" Then
    の行へブレークポイントを設定し、sh.nameをウォッチリストに登録し、観察しました。
    その他参考になりました。ありがとうございます。

    キャンセル

0

そのブックで問題のシートを削除すれば、マクロは問題なく動くのでしょうか?

また、例えば
ThisWorkbook.Worksheets("問題となるシート名").Visible = True
というマクロを試すとどうなりますか?

もし同じように
<アプリケーション定義またはオブジェクト定義のエラーです。>」
となるようであれば、問題のシートが壊れている可能性がありそうです
(ブックが開けないならまだしも、あるシートだけ壊れるという経験は無いですが・・・)

根本解決ではないですが、回避手段として、新しいシートを追加しそこに問題のシートの内容を丸ごとコピペして問題のシートを削除し新シートをリネームする、ということが可能であればそうして逃げるのも手かと思います

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/27 01:41

    ワークブックを開き直したら問題の現象が直りました。
    あくまで素人の見解ですが、ワークシートへのインデックスの割り当てが一時的にうまくいかない状態だったと考えると納得が行きます。
    お返事ありがとうございます。

    キャンセル

0

対象シートに保護がかかっていたり非表示になっていたりしないでしょうか。
読み出しにパスワードが必要な保護がかかっているとか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/27 01:41

    パスワード等はかけていません。

    キャンセル

同じタグがついた質問を見る

  • VBA

    1957questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1684questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。