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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Q&A

解決済

3回答

11740閲覧

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

syusuke9999

総合スコア13

VBA

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

0グッド

0クリップ

投稿2015/10/26 05:07

編集2015/10/26 16:44

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

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で同様のコードを動かした時は問題なく動いていました。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2015/10/26 05:38

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

2015/10/26 16:43

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

回答3

0

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

投稿2015/10/26 09:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syusuke9999

2015/10/26 16:41

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

0

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

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

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

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

投稿2015/10/26 08:58

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syusuke9999

2015/10/26 16:41

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

0

ベストアンサー

こんにちは。

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

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

sh.Nameをウォッチリストで見ているとまず、

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

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

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

投稿2015/10/26 05:50

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syusuke9999

2015/10/26 16:38

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問