iPS77 でバージョンを 0.36c にアップし、検証してもらったら‥‥
- 引数が「費目データ」となっているので、「歩数血圧」以前の状態だ...
- デバッグしても、おかしなコードを見つけられない...
- 行き詰って、家計簿77 以外のシートを全て削除したら‥‥ エラーは出ない。
自宅に戻り、再現用のデータを作成した。
- For i = 1 To Sheets.Count
- If Worksheets(i).Name = argシート名 Then Exit Function
- Next
- Worksheets.Add before:=Worksheets(1)
- ActiveSheet.Name = argシート名
- エラーが出る場所は、上記コードの No.2。
- argシート名(引数)は“費目データ”。
- Sheets.Count は 3
- i が 3 の時、エラーになる。
マルチウィンドウで、ワークシートを監視していたら、i=3 は[Graph1]シート(グラフシート)であることが判った。
- アクティブシートがワークシートかグラフかを判定するVBAのコード (インストラクターのネタ帳)
ワークシートかどうかを判定するサンプルマクロ
アクティブなシートが、ワークシートかそうでないかという判定なら以下のマクロでもOKです。If ActiveSheet.Type = xlWorksheet Then
msg = "ワークシートです。"
Else
msg = "ワークシートではありません。"
End If- し、しかし、これでは解決しなかったぁ〜〜〜
- SheetsとWorksheetsって何が違うの? (Office TANAKA)
シートはワークシートだけじゃない
一般に、ワークシートのことをシートと呼ぶことが多いです。しかし、Excelにはいろいろなシートが存在します。- たとえばグラフシートです。
- ほかにもあります。Excel 4.0のマクロを記述するためのモジュールシート。
- Excel 5.0/95時代のマクロで使用していたダイアログシート。
- そして、最も使う機会の多いワークシート。
VBAで、シートはSheetオブジェクトとして操作します。そのSheetオブジェクトの集合体がSheetsコレクションです。- し、知りませんでした...
■ 完成したコード
- For i = 1 To Sheets.Count
- If Sheets(i).Type = xlWorksheet Then
- If Sheets(i).Name = argシート名 Then Exit Function
- Next
- Worksheets.Add before:=Worksheets(1)
- ActiveSheet.Name = argシート名
インストラクターのネタ帳 および Office TANAKA には、何時もながら大変お世話になりました。
今の悩みは、家計簿77 でバグが続発する懸念がある‥‥ ということだ。