自分のパソコンではVBAが起動しますが‥
他のパソコンでやってみると起動せずに
インデックスが有効範囲にありませんの
エラーが出てしまいます。
何故でしょう?
だいたい下記のようなVBAになります。
Sub SendingSheet()
Dim wb As Variant
Dim WkBk As Variant
For Each wb In Workbooks
If (wb.Name) Like "FTN*【チェックシート】*.xls?" And wb.Name <> ActiveWorkbook.Name Then
Set WkBk = wb
Exit For
End If
Next
If IsObject(WkBk) Then
On Error Resume Next
With WkBk
ActiveSheet.Copy After:=WkBk.Worksheets(.Worksheets.Count)
ActiveSheet.name= "シートA"
Beep 'コピーしたら音がなる
End With
If Err.Number <> 0 Then
MsgBox Err.Number & " :" & Err.Description
End If
On Error GoTo 0
Else
MsgBox "該当するブックは開いていません。", vbExclamation
End If
End Sub
----------------
よろしくお願いします。
No.1
- 回答日時:
まず、エラーストップした場所をきちんとご確認ください。
でないと正確なことが分かりません。ご記載頂いたマクロを私もPC上で走らせて見ましたが、おっしゃるようなエラーストップは発生しませんでした。
以下は推測です。
ぱっと思うのは、On Error を使っていらっしゃるので、エラーでストップするということはそれ以前の部分の記述に問題がある(お使いのPCごとの条件の違いが影響する)可能性が高いと思われます。
また、「インデックスが有効範囲にない」ということは、コレクション等を指定する際に、()内に指定された名前もしくはindex番号で指定できるコレクションがない、ということです。
たとえば、開いているExcelファイルが2つしかないのに、
Workbooks(3)~
のような記述をすると、そんなWorkbookはない、とエラーになるわけです。
ただし、For Each文を使っているので、参照のエラーが出る理由はよく分かりません。
もうひとつ気になる点を上げるとすれば、AcvtiveWorksheetをWkBkにコピーした後、ActiveWorksheet名を「シートA」に変えている点ですかね。同じファイルを開いたままこのマクロを繰り返し実行すると、WkBKに「シートA」がいくつも作られます。私の使用PC(Excel2016)ではシート名の後ろに「(2)」などの番号が入り、マクロは停止しないものの「すでに名前が使われています」と警告メッセージが出ました。バージョンの違いでそこがうまく走らない可能性はあるかと思います。
No.2
- 回答日時:
補足して頂いたことから分かるのは、
1.マクロはストップしていない
2.おそらくWkBkにWorkbookが格納されていない。
の2点でしょうか。
1.についてですが、おそらく表示されたのは
If Err.Number <> 0 Then
MsgBox Err.Number & " :" & Err.Description
End If
このメッセージボックスでしょう。
エラーストップの場所を確認するためには、On Error の文を’でコメントアウトしてマクロを実行してみてください。
2.についてですが、ご記載のマクロ内にあるif文は、FTN~のファイルがアクティブな状態だとWkBkに何も変数が代入されません。FTNがアクティブな以上、「AND wb.Name <> "FTN~"」の部分が成立しないためです。
ただ、そうなるとシートがコピーされるのは不自然ですので、ここが不明です。
ところで、質問者様がこのマクロで実現したいことは、
・このマクロを保存しているファイル(A)と、FTN~のファイル(B)およびそのほかのファイル(C他)を起動しているときに、
・ファイルAのシートをファイルBに挿入し、名前を「シートA」にしたい(挿入した場合はBeep音鳴らす)
・ファイルBが起動されていないときはそれをアナウンス
ということでしょうか。
もしそうであるなら、以下のように修正してみてはいかがでしょうか。
Sub sumple1()
Dim wb As Variant
Dim WkBk As Variant
Dim twb As Variant 'ファイルA
Set twb = ThisWorkbook
For Each wb In Workbooks
If wb.Name Like "FTN*【チェックシート】*.xls?" And wb.Name <> twb.Name Then
Set WkBk = wb
Exit For
End If
Next
If IsObject(WkBk) = False Then
MsgBox "該当するブックは開いていません。", vbExclamation
Exit Sub
Else
With WkBk
twb.ActiveSheet.Copy after:=.Worksheets(.Worksheets.Count)
.Worksheets(.Worksheets.Count).Name = "シートA"
Beep 'コピーしたら音がなる
End With
End If
End Sub
ファイルAにシートが複数ある場合は、twb.sheets("シート名")かtwb.sheets(シート番号)で指定してください。
意図と違う場合は、やはりエラー箇所を確認して修正するべきでしょう。
No.3ベストアンサー
- 回答日時:
ちょっと割り込みさせていただきます。
ほとんど、前の方のやり取りは読まずに、コードを直してみました。
"FTN*【チェックシート】*.xls? というブックがあったら、そこにシートのコピーを送るというマクロですよね。
見た目は簡単なマクロのようですが、ひじょうにややこしくしているのは、マクロを搭載しているThisWorkbookの存在です。そのBookと、"FTN*【チェックシート】*.xls?は、同一ではない、というコードになっているからです。その条件は含め、ご質問者さんのコードは活かしました。
>"FTN*【チェックシート】*.xls?"
>上記のBookにコピーしてほしいのに
>アクティブBookへ名前を付けてコピーされて
>しまいます。
やはりそうなのですね。こちらのマクロでも、なぜかコピー後に、Active化が移動していないということです。(Excel 2016) //明示的にActiveの親オブジェクト(Book)から指定しなくてはならないようです。
ファイル(ブック)を特定化するロジックが大雑把ですね。一旦、見つけたブックを、さらに、Activeかどうかを調べるのであって、同時に両方の条件を調べたら、ブックがないことになってしまいます。
なお、こちらでは、エラーを避けるために、「 "シートA-" & .Worksheets.Count 'オプショナル」というオプションを設けました。それと、エラー・ストップというのは、通常は、ステップマクロで分かるものです。
'//標準モジュール(アドインを含む)
Sub SendingMySheet()
Dim Wb As Variant
Dim WkBk As Workbook
Dim acWb As Workbook
Dim sh As Worksheet
On Error GoTo ErrHandler
For Each Wb In Workbooks
If Wb.Name Like "FTN*【チェックシート】*.xls?" Then
If Wb.Name <> ActiveWorkbook.Name Then
Set WkBk = Wb
Exit For
Else
MsgBox Wb.Name & "はアクティブではできません。", vbExclamation
Exit Sub
End If
End If
Next Wb
If Not WkBk Is Nothing Then
Set acWb = ActiveWorkbook
With WkBk
acWb.ActiveSheet.Copy After:=.Worksheets(.Worksheets.Count)
.ActiveSheet.Name = "シートA-" & .Worksheets.Count 'オプショナル
Beep
End With
Else
MsgBox "該当するブックは開いていません。", vbExclamation
End If
ErrHandler:
If Err() <> 0 Then
MsgBox Err.Number & " :" & Err.Description
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
ワイルドカード「*」を使うとう...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
別ブックをダイアログボックス...
-
エクセルのマクロについて教え...
-
エクセルのマクロを使ってメー...
-
【困っています2】VBA 追加処...
-
エクセルVBAが途中で止まります
-
マクロで最終行を取得したい
-
エクセルのマクロについて教え...
-
拡張メタファイルにて貼り付け
-
【ご教示ください】VBAの記述方...
-
ExcelのVBAです。フォルダ内の...
-
VBAで複数のブックを開かずに処...
-
EXCEL VBA 単語置き換え につい...
-
Excelのマクロコードについて教...
-
【マクロ】違うフォルダにある...
-
【ExcelVBA】インデックスが有...
-
vbaでvbaProjectのパスワード解...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】zip圧縮されたCSV...
-
vbaでvbaProjectのパスワード解...
-
VBAで別ブックのシートを指定し...
-
ExcelのVBAです。フォルダ内の...
-
vbaで他のブックに転記したい。...
-
フォルダ内の全てのファイルに...
-
VBAで複数のブックを開かずに処...
-
VBSでExcelのオープン確認
-
VBA 実行時エラー 2147024893
-
【Excel VBA】書き込み先ブック...
-
VBA シート名が一致した場合の...
おすすめ情報
ありがとうございます。
エラーストップの確認ですが‥
確認の仕方が分かりません。
ただ
"FTN*【チェックシート】*.xls?"
上記のBookにコピーしてほしいのに
アクティブBookへ名前を付けてコピーされて
しまいます。
っという事は
"FTN*【チェックシート】*.xls?"
のBookを見つける事が
出来てないという事でしょうか?