Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7全般 : Excel 2010)
行のコピー貼り付け
投稿日時: 18/12/27 17:47:54
投稿者: taigernotora

行を変数に代入して、他のブックに貼り付けようと試みたのですが、
「実行時エラー’1004‘アプリケーション定義またはオブジェクト定義のエラーです。」
が出てしまいました。
 
現在作成しているマクロを下記に一部抜粋してあります。
初歩的な質問で申し訳ありませんがどうぞよろしくお願いします。
 
(一部抜粋)
Sub データまとめ()
 
Dim Row As Range
Dim S1 As Worksheet
Dim S2 As Worksheet
 
Set S1 = Workbooks(ConfigName$).Worksheets("S1")
Set S2 = Workbooks(ConfigName$).Worksheets("S2")
 
TargetPath$ = S1.Cells(1, 5).Value
Workbooks.Open Filename:=TargetPath$, ReadOnly:=True
OriginName$ = ActiveWorkbook.Name
Set Row = Workbooks(OriginName$).Worksheets(ActiveSheet.Name).Range(Cells(1, 1), Cells(1, 5))
Workbooks(OriginName$).Close
 
S2.Active
Range(Cells(1, 1), Cells(1, 5)).Select
⇒Range(Cells(1, 1), Cells(1, 5)) = Row
 
End Sub

回答
投稿日時: 18/12/27 18:12:11
投稿者: WinArrow
投稿者のウェブサイトに移動

次の3行のコードは、
当該ブックを開く前に実行するとエラーになりませんか?

引用:

Set S1 = Workbooks(ConfigName$).Worksheets("S1")
Set S2 = Workbooks(ConfigName$).Worksheets("S2")
TargetPath$ = S1.Cells(1, 5).Value

 
次のコードの中に「Activesheet」と「Worksheets("S1")」とは、どのような関係でしょうか?
 
引用:

Set Row = Workbooks(OriginName$).Worksheets(ActiveSheet.Name).Range(Cells(1, 1), Cells(1, 5))

 
次のコードは、当該ブックを閉じる前に実行する必要があります。
「⇒」は、エラーになった行という印?
引用:

S2.Active
 Range(Cells(1, 1), Cells(1, 5)).Select
 ⇒Range(Cells(1, 1), Cells(1, 5)) = Row

回答
投稿日時: 18/12/27 18:14:27
投稿者: WinArrow
投稿者のウェブサイトに移動

追加レス
 
質問の最初の行に
>他のブックに
と書かれているが、他ブックはどこにあるのですか?

投稿日時: 18/12/27 18:38:54
投稿者: taigernotora

【1】次の3行のコードは、 当該ブックを開く前に実行するとエラーになりませんか?
⇒ConfigName$ = ThisWorkbook.Name が抜けておりました。失礼しました。
 
【2】次のコードの中に「Activesheet」と「Worksheets("S1")」とは、どのような関係でしょうか?
⇒読み取り専用で開いたシートと、上記[1]のThisWorkbook中のシートS1を示しています。
 
【3】次のコードは、当該ブックを閉じる前に実行する必要があります。 「⇒」は、エラーになった行という印?
⇒その通りでございます。
 
【4】質問の最初の行に >他のブックに と書かれているが、他ブックはどこにあるのですか?
⇒上記[1]のThisWorkbook中のシートS2を示しています。
読み取り専用で開いたブック中のシートデータを、現在開いているシートに貼り付けたいということでございます。言葉足らずで申し訳ございません。
 
よろしくお願いします。

回答
投稿日時: 18/12/27 18:43:19
投稿者: WinArrow
投稿者のウェブサイトに移動

ごめんなさい
よく読んだら
 
ConfigName$ブックと
OriginName$ブックの
2つあるのですね・・・
 
似たような名前なので、勘違いしていました。
 
>OriginName$ = ActiveWorkbook.Name
>Set Row = Workbooks(OriginName$).Worksheets(ActiveSheet.Name).Range(Cells(1, 1), Cells(1, 5))
のコードを修正しましょう
まず 複写元ブックのオブジェクト変数を用意します。
変数:Rowは不要です。
Dim OriginBOOK As Workbook
Set OriginBOOk = ActiveWorkbook
With OriginBOOK.ActiveSheet
    .Range("A1:E1").Copy Desitination:=S2.Range("A1:E1")
End With
OriginBOOK.Close False
Set OriginBOOK = Nothing
'Range(Cells(1, 1), Cells(1, 5))と同じですが、ブック・シートで修飾する必要があり、コードが長くなるので、わかりやすく短くする
 
次のコードは不要です
>S2.Active
> Range(Cells(1, 1), Cells(1, 5)).Select
>(Cells(1, 1), Cells(1, 5)) = Row
 

回答
投稿日時: 18/12/27 18:46:48
投稿者: WinArrow
投稿者のウェブサイトに移動

一部のコード修正
> .Range("A1:E1").Copy Desitination:=S2.Range("A1:E1")

   .Range("A1:E1").Copy Destination:=S2.Range("A1:E1")

回答
投稿日時: 18/12/27 18:57:16
投稿者: WinArrow
投稿者のウェブサイトに移動

コードを清書しました。
 
Sub データまとめ()
   
 'Dim Row As Range
 Dim S1 As Worksheet
 Dim S2 As Worksheet
 Dim OriginBOOK As Workbook
  
 Set S1 = Workbooks(ConfigName$).Worksheets("S1")
 Set S2 = Workbooks(ConfigName$).Worksheets("S2")
   
 TargetPath$ = S1.Cells(1, 5).Value
  
 Set RriginBOOK = Workbooks.Open(Filename:=TargetPath$, ReadOnly:=True)
 With OriginBOOK
    With .ActiveSheet
         .Range("A1:E1").Copy Destination:=S2.Range("A1:E1")
    End With
    .Close False
 End With
 End Sub

回答
投稿日時: 18/12/30 16:47:30
投稿者: WinArrow
投稿者のウェブサイトに移動

コードに入力ミスがありました。訂正します。
 
>Set RriginBOOK = Workbooks.Open(Filename:=TargetPath$, ReadOnly:=True)

Set OriginBOOK = Workbooks.Open(Filename:=TargetPath$, ReadOnly:=True)

投稿日時: 19/01/07 09:28:30
投稿者: taigernotora

>WinArrow 様
 
返信・御礼が遅れまして申し訳ありません。
ご教授頂いたコードで対処できました。ありがとうございます。
 
応用にした場合の例として、他の質問に掲示させて頂いたので良ければそちらについてもご教授お願いします。
https://www.moug.net/faq/viewtopic.php?t=77816