アプリ版:「スタンプのみでお礼する」機能のリリースについて

ワークシートの名前を変更したいと思っております。

名前は別のシートの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

「【EXCEL-VBA】ワークシートに別の」の質問画像

A 回答 (3件)

このエラーですと、すでに指定されたシート名が使われているということですが?そんなことはありませんか?

    • good
    • 1
この回答へのお礼

いつもご解答ありがとうございます。

おっしゃるとおりでした。
テスト時に使ったワークシートが残っており、
後ろの方にあるのに気が付きませんでした。

本当にありがとうございます。
いきなりのベストアンサーですが、、、、。

聞きたいことがあります。
エラーメッセージから、エラーの原因を判断する方法ってあるのでしょうか?
いつも思うのですが、エラー番号のリストか何かあるのでしょうか?

興味がありますので質問はしばらくあけておきます。
※今から帰宅しますので返答、確認はちょっと時間がかかります。

今回は本当にありがとうございます。

お礼日時:2016/12/11 17:36

お疲れさまです。


 全マクロがないのでうまい回答はできませんが、回答者#1さまのように同じシート名がないか確認するのが必要かと思います。
 ただ、同じ名前のシート名があった場合はエラー1004でこの名前は既に使用されています。別の名前を入力してくださいの様なメッセージの様な気もします。

 VBE上でCTRL+Fを押し、検索する文字列にsheet1を入力し、対象をカレントプロジェクトで検索をかけた場合、sheet1から値をとってくる記載がどこかにあるのではないでしょうか?

 それらをすべて修正すれば治ると思います。
    • good
    • 1
この回答へのお礼

ご解答ありがとうございます。

VBE上でもCtrl+Fはつかえるんですね。
こらから活用してみようと思います。

今回は先にテストしたのでその時に書き込まれたシートが残っていたことが原因です。
要するに、2回目の本番の時にあるはずのない同名のシートが
ワークブックにありエラーになったという状況です。

こういうことがあるので、エラー対策って必要なんですね。

今回はご解答頂きありがとうございます。機会がありましたら、またお願いします。

お礼日時:2016/12/11 21:00

「1004」の場合はいろいろな場合があるので、コード番号からは調べるのは難しいと思います。

それよりも後の文章の意味が理解できるか?ということだと思います。この辺は専門的な言い回しなので判りづらいですが、慣れでしょうか?
    • good
    • 1
この回答へのお礼

ご解答ありがとうございます。

「~参照されるオブジェクトライブラリまたは~」とあるので、
他のマクロが読み込みに行っているのでダメなのかと思いました。

「~参照されるオブジェクトライブラリまたは~」
ということは「書き込もうとする名前と同じ名前のワークシートが存在する」
ということなんですね。

このあたりは慣れと経験なんでしょうね。
エラーメッセージはよくわからない言葉が並ぶので、
読むには読むのですが「僕のレベルでは意味がわからないから」
と思って深読みしないことがほとんどです。
ですが今回のものはご指摘頂いて「そういう意味か」と思えます。

これからはアドバイス通り、エラーメッセージの意味をいくつか考えて、
エラーの原因を推測するようにします。

それと今回やってみたのですが別のワークシートで
単体のマクロとして動かしてみるというのも良い方法ですよね。
せっかくそこまでやってみたのに、自力で解決出来ずちょっと残念です。

いつもご解答頂きありがとうございます。
機会がありましたら、またお願いします。

お礼日時:2016/12/11 20:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!