こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA エラー表示についての原因がわかりません

お世話になります。
現在、社内集計作業のため下記のようなマクロを組みました。

条件として保存動作をすると実行…ということで諸々調べた結果、VBE→ThisWorkBookから指定のプロシージャを選んで、その中にコードを記入する、ということが多数でしたので、それに倣いました。
ところが、いざ下記コード内容で実行しようとすると「インデックス範囲が有効ではありません」とストップをかけられる上、最初の新規ワークブック追加~コピペすら正しく行われません。
標準モジュールでは正しく実行してくれるのですが、このようなケースでエラーになる理由がよくわかりません。
つきましては、下記コードがエラーとなる理由、そして可能であればどのように修正をすればよいかお教えください。
ご面倒をおかけしますが、よろしくお願いいたします。


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

' Macro2 Macro
'

'
Columns("A:A").Select
Range("A:FU").Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Columns("FU:FU").Select
Application.CutCopyMode = False
Selection.Copy
Columns("FT:FT").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("FT:GF").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("A:A").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.NumberFormatLocal = "G/標準"
Sheets("Sheet3").Select
Application.DisplayAlerts = False 'メッセージを出さない
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = False 'メッセージを出さない
Sheets("Sheet2").Select
ActiveWindow.SelectedSheets.Delete
Range("A1").Select
Columns("A:A").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks _
:=False, Transpose:=False


ChDir "\\sv-qlikview.dmsinc.local\Documents\社内実績集計画面\読込用(仮)"
Application.DisplayAlerts = False 'メッセージを出さない
ActiveWorkbook.SaveAs Filename:= _
"\\sv-qlikview.dmsinc.local\Documents\社内実績集計画面\読込用(仮)\第○営業部.xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close



End Sub

投稿日時 - 2016-02-16 21:34:34

QNo.9129209

困ってます

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

どこでエラーになるかはわかりませんが、気になるのはシートを選択しているところです。
Sheet2やSheet3という名前のシートが無いとエラーになるので、確認してみてください。

投稿日時 - 2016-02-17 16:50:37

お礼

ブックの名前をあらかじめ決めて、シートのありかを指定することで解決できました。ご回答ありがとうございました。

投稿日時 - 2016-02-26 13:38:57

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

回答というほどのものではないが、
当方で質問のコードを標準モジュールに貼り付けて実行すると、
Sheets("Sheet3").Select
のところで、「インデックス範囲が有効ではありません」で止まる。
最近は新規ブックには、Sheet1しかシートを作ってくれないので当然。
エラーの前の行にWorksheets.Add Count:=3
にして実行してみること。
するとファイル保存のところまでは走る。
止まらないだけで処理が正しいかは別。
参考
シートの追加
Sub test02()
'Worksheets.Add 3 'NO
'Worksheets.Add (3) 'NO
'Sheets.Add (3) 'NO
'Worksheets.Add(Count:=3) ’NO
Worksheets.Add Count:=3
End Sub
ーーー
質問のデータ状況(有様、テスト例データ)を読者側で作成して、を読者側でテストすることはむつかしく、質問者が処理内容の概要も、文章で説明していない。
質問のし方が悪く、回答しにくい質問だと思う。
自分のコードで、質問に関係ないものは略し、焦点を絞ったらどうか。
・標準モジュールにコードを置き、「実行」F5で実行する
・Selectionを適当に省くか具体的に書きなおしてテスト
・適宜の行の前にMsgBox ActiveWorkbook.Name 
 を入れて対象のブックがそれでよいかを確認する(Msgboxで変数の値を表示し、進行状況の確認をする)                                  

投稿日時 - 2016-02-20 20:16:53

お礼

ご回答ありがとうございました。
おっしゃる通り、余計なコードまでつけてしまいましたね。すみませんでした。
逆の発想で、予めブックの名前を決めてしまって、それからシートの名前をしてやるように設定したらうまく出来ました。
次回以降の質問の仕方の参考に致します。

投稿日時 - 2016-02-26 13:37:32

あなたにオススメの質問