Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


942 / 13645 ツリー ←次へ | 前へ→

【77381】別ブックへの指定範囲のコピーペーストについて MIT 15/8/14(金) 20:45 質問[未読]
【77382】Re:別ブックへの指定範囲のコピーペースト... マナ 15/8/14(金) 22:10 発言[未読]
【77383】Re:別ブックへの指定範囲のコピーペースト... MIT 15/8/14(金) 22:23 お礼[未読]
【77384】Re:別ブックへの指定範囲のコピーペースト... マナ 15/8/15(土) 9:04 発言[未読]
【77385】Re:別ブックへの指定範囲のコピーペースト... β 15/8/15(土) 9:59 発言[未読]
【77386】Re:別ブックへの指定範囲のコピーペースト... MIT 15/8/15(土) 11:27 お礼[未読]

【77381】別ブックへの指定範囲のコピーペーストに...
質問  MIT  - 15/8/14(金) 20:45 -

引用なし
パスワード
   お世話になります。
MITと申します。

【対象となる標準モジュール構文】
_______________________________________
Option Explicit
'オブジェクト変数
Dim Ba_Test As Workbook, Order As Worksheet, N_wb As Workbook, N_ws As Worksheet
________________________________________

Sub 実行マクロ()
'変数設定
Dim StrName As String, SheName As String, i As Long, temp As Variant
Dim Temp_row(2) As Long, para(3) As Long
'Temp_row(1):最低 temp_row(2):最高値 _
para(1):ミニマム (2):マックス (3):ステップ数

'オブジェクト変数の定義
Set Ba_Test = Workbooks("backテスタ.xlsm")
Set Order = Ba_Test.Worksheets("order")

Workbooks.Add '新しいワークブックの挿入

'新規シートのオブジェクト変数挿入
Set N_wb = ActiveWorkbook
Set N_ws = ActiveSheet

Ba_Test.Activate 'テストワークブックをアクティブ

'注文レートの上限セルの場所と下限セルの場所
Temp_row(1) = Order.Cells(1, 7).End(xlDown).Row
Temp_row(2) = Order.Cells(Rows.Count, 7).End(xlUp).Row

'注文レートを新規シートに転記
Order.Range(Cells(Temp_row(1), 7), Cells(Temp_row(2), 7)).Copy _
Destination:=N_wb.N_ws.Range("A2")

以下省略・・・

______________________________________________________

【疑問点】
・「Order.Range(Cells(Temp_row(1), 7), Cells(Temp_row(2), 7)).Copy _
Destination:=N_wb.N_ws.Range("A2")」の部分において、
「実行時エラー438:オブジェクトは、このプロパティまたはメソッドをサポートしていません。」のエラーが発生してしまう。
・Destination部分の構文をコメントアウトすると正常に動作するため、Destination部分の構文に問題がある可能性が高いが、どう間違っているのかがわからない。

【当該マクロの目的】
・検証用のブックで不定回数の検証を実施し、その結果を新しいブックに検証の都度、コピーペーストする。(省略部分は、検証用の別マクロを呼び出す未完成の構文が記録されています。今回の疑問点とは関係がなく、視認性を落とすので省略しています。)

もちろん一度保存しブック名を確定させた後に、ワークブック名、シート名をすべて手入力しコピーペーストする方法があるのはわかりますが、構文が横に長くなるのでできる限り避けたく、皆様のお知恵を拝借できればと考えております。

お忙しいところ恐縮ではありますが、ご教示頂けますと幸甚です。

【77382】Re:別ブックへの指定範囲のコピーペース...
発言  マナ  - 15/8/14(金) 22:10 -

引用なし
パスワード
   ▼MIT さん:

>Ba_Test.Activate 'テストワークブックをアクティブ

どうせなら、
Order.Activate
でしょうか

でも、アクティブであることに依存しないほうがよいです。

With Order
  .Range(.Cells(Temp_row(1), 7), .Cells(Temp_row(2), 7)).Copy _
    Destination:=N_ws.Range("A2")
End With

【77383】Re:別ブックへの指定範囲のコピーペース...
お礼  MIT  - 15/8/14(金) 22:23 -

引用なし
パスワード
   ▼マナ さん:
>▼MIT さん:
>
>>Ba_Test.Activate 'テストワークブックをアクティブ
>
>どうせなら、
>Order.Activate
>でしょうか
>
>でも、アクティブであることに依存しないほうがよいです。
>
>With Order
>  .Range(.Cells(Temp_row(1), 7), .Cells(Temp_row(2), 7)).Copy _
>    Destination:=N_ws.Range("A2")
>End With

迅速なご回答、有難うございます。
無事に意図する動作を実行できました。

もし、宜しければ今後の為にも元の構文の何が悪くてエラーになっていたのかを
ご教示頂けますと幸甚です。

先ほどとの違いというと、アクティブなブックが検証用のブックから新規ブックに移っていることだと思います。
ペースト系のメソッドは、非アクティブなオブジェクトに対しては使用できないのでしょうか。どうも検索してもその辺りがよくわかりませんでした。

どうぞよろしくお願いいたします。

【77384】Re:別ブックへの指定範囲のコピーペース...
発言  マナ  - 15/8/15(土) 9:04 -

引用なし
パスワード
   ▼MIT さん:

今回のエラーは、

> N_wb.N_ws.Range("A2")

こういうこと?

Sub test()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim rng As Range
  
  Set wb = ThisWorkbook
  Set ws = wb.Worksheets("Sheet1")
  Set rng = ws.Range("a2")
  
  MsgBox rng.Address(external:=True)
  MsgBox wb.ws.rng.Address(external:=True)
  
End Sub

>ペースト系のメソッドは、非アクティブなオブジェクトに対しては使用できないのでしょうか。

逆です。アクティブにしなくても良いと言いたかったつもりです。
今回はエラーにはなっていませんが、

シート.Range(セル, セル).Copy

という書き方だと、エラーになる場合がありますので
こうしました。

シート.Range(シート.セル, シート.セル).Copy

【77385】Re:別ブックへの指定範囲のコピーペース...
発言  β  - 15/8/15(土) 9:59 -

引用なし
パスワード
   ▼MIT さん:

>もし、宜しければ今後の為にも元の構文の何が悪くてエラーになっていたのかを
>ご教示頂けますと幸甚です。

横から失礼します。

もともとのコードは

Destination:=N_wb.N_ws.Range("A2")

でしたね。
マナさんのコードは

Destination:=N_ws.Range("A2")

で、N_ws は Set N_ws = ActiveSheet ですけど、シートオブジェクトには
ブック.シート という値が格納されます。
つまり、ActiveWorkBook.そのシート となります。

また、Set N_wb = ActiveWorkbook ですから

N_wb.N_ws と記述すると ActiveWorkbook.ActiveWorkbook.そのシート
こうなってしまいます。

ActiveWorkbook というオブジェクトの配下には ActiveWorkbook なんてものがないので
これは、おかしいよということになります。

【77386】Re:別ブックへの指定範囲のコピーペース...
お礼  MIT  - 15/8/15(土) 11:27 -

引用なし
パスワード
   ▼マナさん:
▼βさん:


お二方ともありがとうございます。
なるほど、ワークシートのオブジェクト関数には,
ブックの値も埋め込まれてしまうのですね。

イミディエイトで「.name」で調べていても意図したものが入っているように見えた
ので、そこに誤りがあることに気づきませんでした。

βさん、分かりやすい説明ありがとうございます。よく理解できました。
マナさん、テストマクロありがとうございます。視覚的にバグを見つけることができました。

お二方とも改めて感謝を申し上げます。

942 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free