前提・実現したいこと
VBA初学者です。
繰り返し処理で、以下のことを実現したいです。
① グループ化されている列を全表示にする。
② 3行目の最終列から数えて、任意の列(下記コードでは最終列から左へ39列目)から、左へ3列を列選択する。
② ②の3列を追加でグループ化し、グループ化した箇所を非表示にする。
③ ①、②の処理を各シートで繰り返す。
※新規でグループ化した列は、既にグループ化されている列と結合させたいです。
発生している問題・エラーメッセージ
実行時エラー1004
「アプリケーション定義またはオブジェクト定義のエラーです」
1シート目は狙い通りの処理が実行されるのですが、
2シート目以降を処理する際、上記エラーにより処理が止まってしまうみたいです。
該当のソースコード
Sub
1 Dim ii As Long 2 Dim sh1 As Worksheet, sh11 As Worksheet 3 Dim GroupLastColumn As Integer 4 5 For ii = 4 To Worksheets.Count 6 Set sh11 = Worksheets(ii) 7 sh11.Cells.EntireColumn.Hidden = False 8 GroupLastColumn = sh11.Range("C3").End(xlToRight).Offset(0, -39).Column 9 With sh11 10 .Range(.Columns(GroupLastColumn), .Columns(GroupLastColumn - 2)).Select 11 End With 12 Selection.Columns.Group 13 sh11.Outline.ShowLevels ColumnLevels:=1 14 15 Next 16 17End sub 18
補足情報(FW/ツールのバージョンなど)
この処理の前にFor Next文、変数を使って各シートの特定の位置にある情報をコピーペーストしているのですが、こちらはちゃんと動きました。
念のため上記処理と変数は分けています。
・コードは「コードの挿入」で記入してください。
・゛シートのグループ化を解除し、゛と゛既にグループ化されている列゛が矛盾しているかと思うのですが違いますか?
・エラーはどこで発生していますか?
Worksheetsが4から始まってますが、全体で何シートあるんですか?
meg_様
ご指摘ありがとうございます。そして失礼いたしました。
コードの挿入と、「グループ化を解除し」→「グループ化されている列を全表示にする」に変更いたしました。
エラーは一回目の処理が終わり、Nextで処理しようとするときに発生しています。「For ii = 4 To Worksheets.Count」の後にmsgboxを設けて変数の格納状態を確認しようとしましたが、5と表示されずに上記エラーが出て処理が止まってしまいます。
sazi様
変更したいシートは全てで5シートです。
動作確認のためのサンプル用なので、本運用する際には3桁くらいに増えます。
「アプリケーション定義またはオブジェクト定義のエラーです」が出たときに、エラーダイアログのデバッグボタンをクリックするとどのコードが反転表示されますか。
>エラーは一回目の処理が終わり、Nextで処理しようとするときに発生しています。
結果だけをみるとWorksheets.Countの値によるものと思われますので、Worksheets.Countをforの前で確認して下さい。
hatena19様
どのコードも反転表示されないので、ステップインで一行ずつ実行していったところ、「.Range(.Columns(GroupLastColumn), .Columns(GroupLastColumn - 2)).Select」の処理を行う手前までは動くみたいでした。
また、ステップインで各シートの処理を行ったところ、処理するシートをアクティブにした状態だと処理が狙い通り実行されるみたいです。別のシートから処理を行おうとするとエラーで止まるようです。
sazi様
ご回答ありがとうございます。
Worksheets.Countをmsgboxで確認したところ、9と表示されました。
4シート目から5シート作業したいので、この数値で問題はなさそうです。
Activeではないシート内のセルをSelectしようとするとエラーになります。
そこでエラーが出ているのなら、原因の一つはこれでしょう。
加えて、Range内のColumnsの指定が0以下になっている可能性も考えられますが、そちらは大丈夫でしょうか?
回答2件
あなたの回答
tips
プレビュー