
ワークシートの名前を変更したいと思っております。
名前は別のシートのA1セルに入っているので、
以下のコードで機能すると思っておりました、、、。
ところが実際にやってみると画像のエラーメッセージの通りで
機能しません。
以下のコードを単体で別のワークブックで試してみたところ、
問題なく動作しました。
前述のエラーが発生するワークブックには
他にもマクロが入っているので、その影響があるようです。
こういうエラーメッセージが出る場合で、
ワークシートに別のワークシートのA1セルの値を入力したい場合
(別の同じワークブック上の)
どういう風に対処すればいいのでしょうか?
すいませんが詳しい方、説明の上手な方、直接、コードで説明できる方、
教えて下さい。よろしくお願いします。
機能しないコードは以下のとおりです。
---------
Sub Macro6()
Worksheets("Sheet3").Name = Worksheets("Sheet99").Range("A1")
End Sub
↑どのワークブックでも動作します
Sub Macro7()
Worksheets("Sheet1").Name = Worksheets("取込").Range("A20")
End Sub
↑作成中のマクロの入ったワークブックでは動作しません
----動作しないワークブックには、以下のマクロと他にもコードが入っています----
Option Explicit
Public Const dirName As String = "d:\goo\excel\goo33"
'3つのワークブックからシートをコピーする
Public Sub CopySheets()
Dim dirName As String
Dim trgbooks As Variant
Dim trgsheets As Variant
Dim i As Long
trgbooks = Array("注文リスト-佐藤.xlsm", "注文リスト-田中.xlsm", "注文リスト-山本.xlsm")
trgsheets = Array("10-24-佐藤", "10-24-田中", "10-24-山本")
For i = 0 To UBound(trgbooks)
'sheetの取り込み
Call GetSheet(trgbooks(i), trgsheets(i))
Next
End Sub
'指定ブックの指定シートを取り込む
Public Sub GetSheet(ByVal bookName As String, ByVal SheetName As String)
Dim fullName As String
Dim myBook As String
Dim mySheet As String
myBook = ThisWorkbook.Name
mySheet = Worksheets(1).Name
If ExistsWorkSheet(SheetName) Then
Application.DisplayAlerts = False 'シート削除時の警告を出さないようにする
Worksheets(SheetName).Delete '既に該当シートがあるなら削除する
Application.DisplayAlerts = True 'シート削除時の警告を出すようにする(元に戻す)
End If
fullName = dirName & "\" & bookName
If Dir(fullName) = "" Then
MsgBox (fullName & "は存在しません")
Exit Sub
End If
Workbooks.Open fullName
Workbooks(bookName).Activate
If ExistsWorkSheet(SheetName) = False Then
MsgBox (bookName & "中に" & SheetName & "は存在しません")
Workbooks(bookName).Close
Exit Sub
End If
Worksheets(SheetName).Copy after:=Workbooks(myBook).Worksheets(mySheet)
Workbooks(bookName).Close
Workbooks(myBook).Activate
MsgBox (bookName & "中の" & SheetName & "をコピー完了")
End Sub
'ワークシートの存在チェック
Public Function ExistsWorkSheet(ByVal SheetName As String) As Boolean
Dim ws As Worksheet
ExistsWorkSheet = False
For Each ws In Worksheets
If ws.Name = SheetName Then
ExistsWorkSheet = True
Exit Function
End If
Next ws
End Function

No.1ベストアンサー
- 回答日時:
このエラーですと、すでに指定されたシート名が使われているということですが?そんなことはありませんか?
いつもご解答ありがとうございます。
おっしゃるとおりでした。
テスト時に使ったワークシートが残っており、
後ろの方にあるのに気が付きませんでした。
本当にありがとうございます。
いきなりのベストアンサーですが、、、、。
聞きたいことがあります。
エラーメッセージから、エラーの原因を判断する方法ってあるのでしょうか?
いつも思うのですが、エラー番号のリストか何かあるのでしょうか?
興味がありますので質問はしばらくあけておきます。
※今から帰宅しますので返答、確認はちょっと時間がかかります。
今回は本当にありがとうございます。
No.3
- 回答日時:
お疲れさまです。
全マクロがないのでうまい回答はできませんが、回答者#1さまのように同じシート名がないか確認するのが必要かと思います。
ただ、同じ名前のシート名があった場合はエラー1004でこの名前は既に使用されています。別の名前を入力してくださいの様なメッセージの様な気もします。
VBE上でCTRL+Fを押し、検索する文字列にsheet1を入力し、対象をカレントプロジェクトで検索をかけた場合、sheet1から値をとってくる記載がどこかにあるのではないでしょうか?
それらをすべて修正すれば治ると思います。
ご解答ありがとうございます。
VBE上でもCtrl+Fはつかえるんですね。
こらから活用してみようと思います。
今回は先にテストしたのでその時に書き込まれたシートが残っていたことが原因です。
要するに、2回目の本番の時にあるはずのない同名のシートが
ワークブックにありエラーになったという状況です。
こういうことがあるので、エラー対策って必要なんですね。
今回はご解答頂きありがとうございます。機会がありましたら、またお願いします。
No.2
- 回答日時:
「1004」の場合はいろいろな場合があるので、コード番号からは調べるのは難しいと思います。
それよりも後の文章の意味が理解できるか?ということだと思います。この辺は専門的な言い回しなので判りづらいですが、慣れでしょうか?ご解答ありがとうございます。
「~参照されるオブジェクトライブラリまたは~」とあるので、
他のマクロが読み込みに行っているのでダメなのかと思いました。
「~参照されるオブジェクトライブラリまたは~」
ということは「書き込もうとする名前と同じ名前のワークシートが存在する」
ということなんですね。
このあたりは慣れと経験なんでしょうね。
エラーメッセージはよくわからない言葉が並ぶので、
読むには読むのですが「僕のレベルでは意味がわからないから」
と思って深読みしないことがほとんどです。
ですが今回のものはご指摘頂いて「そういう意味か」と思えます。
これからはアドバイス通り、エラーメッセージの意味をいくつか考えて、
エラーの原因を推測するようにします。
それと今回やってみたのですが別のワークシートで
単体のマクロとして動かしてみるというのも良い方法ですよね。
せっかくそこまでやってみたのに、自力で解決出来ずちょっと残念です。
いつもご解答頂きありがとうございます。
機会がありましたら、またお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンボボックスへ降順に表示す...
-
VBAの書き方を教えてください 2
-
エクセル VBA シートの選択
-
エクセル:イベントが書かれた...
-
入力後のセルの移動について
-
エクセルのVBAについて教えてく...
-
Excelの文字を検索させるVBA
-
エクセルの図形(線)の情報
-
Worksheet Worksheets オブジェ
-
Auto_Openマクロ
-
複数のエクセルファイルとシー...
-
Excelで、あるセルの値に応じて...
-
Excel VBAで、散布図のデータ範...
-
Excel UserForm の表示位置
-
VBA 空白行に転記する
-
vba 2つの条件が一致したら...
-
EXCELのSheet番号って変更でき...
-
A列にある値をB列・C列にVBAで...
-
楽天RSSからエクセルVBAを使用...
-
「段」と「行」の違いがよくわ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでオブジェクトが必...
-
エクセルのVBAについて教えてく...
-
コンボボックスへ降順に表示す...
-
エクセルを共有にすると、シー...
-
エクセルマクロ(超初心者)
-
Access-VBAでExcelファイ...
-
複数シートを一括で保護を掛け...
-
エクセルマクロ 変数をワーク...
-
Excell VBA にて配列に定数を代...
-
マクロのコマンドボタン《Activ...
-
マクロ実行後、画面がちかちか...
-
エクセル2013
-
エクセルのマクロ(大量データ...
-
エクセルで品番を入れると、そ...
-
エクセルVBAを勉強中なのですが...
-
EXCEL【VBE】 範囲別にその...
-
エクセルVBA 別シートの最終セ...
-
excelのvbaでのシート指定が時...
-
VBAでVlookup機能を使うときに...
-
エクセル2007 複数のワークシ...
おすすめ情報