Excel VBA質問箱 IV

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

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


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

【78974】別ウィンドウのワークシート間コピー エリエール 17/4/3(月) 3:16 質問[未読]
【78975】Re:別ウィンドウのワークシート間コピー γ 17/4/3(月) 7:13 回答[未読]
【78979】Re:別ウィンドウのワークシート間コピー エリエール 17/4/3(月) 15:02 発言[未読]
【78989】Re:別ウィンドウのワークシート間コピー γ 17/4/3(月) 21:22 発言[未読]
【78990】Re:別ウィンドウのワークシート間コピー エリエール 17/4/3(月) 22:33 発言[未読]
【78991】Re:別ウィンドウのワークシート間コピー β 17/4/4(火) 0:33 発言[未読]
【78992】Re:別ウィンドウのワークシート間コピー γ 17/4/4(火) 7:31 発言[未読]
【78996】Re:別ウィンドウのワークシート間コピー エリエール 17/4/4(火) 8:04 発言[未読]
【78994】Re:別ウィンドウのワークシート間コピー エリエール 17/4/4(火) 7:40 お礼[未読]

【78974】別ウィンドウのワークシート間コピー
質問  エリエール  - 17/4/3(月) 3:16 -

引用なし
パスワード
    別ウィンドウのワークシート間コピーをしようと下記のコードを
書きましたが、エラーと書き直しの繰り返しで分からなくなり質問させて
いただきました。どなたかご教授下さいませ。

 目的:シートAのデータ(1,007行×7列の数値)を別ウィンドウで既に開かれて
いるシートBにコピーすることです。
シートAとシートBを別ウィンドウにした理由は、シートAのデータはOntimeで1秒間隔でデータを記録していますが、そのデータを元に他の場所でデータ加工するときにセルが入力状態にあるとOntimeで行っている記録が止まってしまうからです。

 コード:実際のデータ数より少なくしています。

Sub WriteData() 'イベントはSheetAのボタンを押します

Dim OutData As Variant 'データ格納用の変数です

Dim App As Object
Dim SheetA As Worksheet
Dim SheetB As Worksheet

Set SheetA = ActiveSheet

OutData = SheetA.Range(Cells(1, 1), Cells(4, 4))

Set App = GetObject("C:\Users\SheetB.xlsm")
Set SheetB = App.Worksheets("Data")

SheetB.Activate

SheetB.Range(Cells(1, 1), Cells(4, 4)) = OutData

SheetA.Activate

End Sub

環境等:Excel2010を使用しています。
    VBA初級者です。

よろしくお願いします。

【78975】Re:別ウィンドウのワークシート間コピー
回答  γ  - 17/4/3(月) 7:13 -

引用なし
パスワード
   SheetB.Range(SheetB.Cells(1, 1), SheetB.Cells(4, 4)) = OutData
とするのではないでしょうか。

SheetB.Range(Cells(1, 1), Cells(4, 4)) = OutData
だと、中のCellsによるセル指定は、
コード実行中のExcelのアクティブワークブックの
アクティブワークシートが前提とされてしまうからです。

【78979】Re:別ウィンドウのワークシート間コピー
発言  エリエール  - 17/4/3(月) 15:02 -

引用なし
パスワード
   ご回答ありがとうございます。

該当箇所を変更しましたが、実行出来ませんでした。
考えてみます。

【78989】Re:別ウィンドウのワークシート間コピー
発言  γ  - 17/4/3(月) 21:22 -

引用なし
パスワード
   >該当箇所を変更しましたが、実行出来ませんでした。
実行できないというのは、どのような状態なんですか?
ステップ実行して見て下さい。

エラーになるなら、
・どの行でエラーになって、
・どのようなエラーメッセージが出るのか
書いてください。

エラーにはならないが、想定と異なるなら、
どのような結果になるのか示してください。

もちろん、こちらでは正常に動作することを確認してから
投稿しています。

【78990】Re:別ウィンドウのワークシート間コピー
発言  エリエール  - 17/4/3(月) 22:33 -

引用なし
パスワード
    お忙しいところお手数かけます。詳細を記載することを失念していました。
申し訳ありませんでした。

 下記◆◆◆がエラー表示されたところです。SheetBのパスは、プロパティの
セキュリティに記載されているものをコピーしています。


Sub WriteData() 'イベントはSheetAのボタンを押します

◆◆◆ ⇒Sub WriteData()'イベントはSheetAのボタンを押します 
と左に矢印が付いた状態で行全体が黄色帯で選択されています。

Dim OutData As Variant 'データ格納用の変数です

Dim App As Object
Dim SheetA As Worksheet
Dim SheetB As Worksheet
Set SheetA = ActiveSheet

OutData = SheetA.Range(Cells(1, 1), Cells(4, 4))

Set App = GetObject("C:\Users\SheetB.xlsm")
Set SheetB = App.Worksheets("Data")

SheetB.Activate

SheetB.Range(.Cells(1, 1), .Cells(4, 4)) = OutData
◆◆◆    ↑の最初の.Cellsの箇所が青帯で選択されて
  「コンパイルエラー 参照が不正または不完全です。」とのメッセージが
   表示されます。

SheetA.Activate

End Sub


以上、よろしくお願いします。

【78991】Re:別ウィンドウのワークシート間コピー
発言  β  - 17/4/4(火) 0:33 -

引用なし
パスワード
   ▼エリエール さん:

横から失礼します。
γさんのしてきは SheetB.Range(セル1,セル2) の かっこの中のセルが SheetBのセルだと認識されないということでしたね。

それを SheetB.Range(.セル1,.セル2) とピリオドをつけられたわけですが
この ピリオドは、このコードに先行して With なんたら というものがあって初めて

『その セル1』といった意味になります。つまり ピリオドは 『その』という意味です。

さて、この場合、『その』は、何なのか、どこかに宣言がありますか?

記述するなら

With SheetB
 .Range(.セル1,.セル2)
End With

といった記述になるでしょうね。

あるいは

SheetB.Range(SheetB.Cells(1, 1), SheetB.Cells(4, 4))

でもいいですし、

Range(SheetB.Cells(1, 1), SheetB.Cells(4, 4))

でもいいです。

【78992】Re:別ウィンドウのワークシート間コピー
発言  γ  - 17/4/4(火) 7:31 -

引用なし
パスワード
   βさん いつもながら適切な解説ありがとうございました。

質問者さんへ
私が提示したコードをそのまま使わなかった理由は?
(理解せずに Withステートメントとその対である .ドットを
 使うよりも、間違い無いだろうと思ったのですが。)

GetObjectを使う理由がいまいち理解できておらず、
当初の動作不良となる原因が別にあるのかもしれないなあと
思ってもいます。

【78994】Re:別ウィンドウのワークシート間コピー
お礼  エリエール  - 17/4/4(火) 7:40 -

引用なし
パスワード
    γさん、βさんありがとうございます。

 コードをγさんの当初ご指摘とおり訂正したらうまくいきました。
βさん、見るに見かねての助け舟ありがとうございます。

 本当にありがとうございました。

 
■該当箇所の訂正後

 With SheetB

.Activate

.Range(.Cells(1, 1), .Cells(4, 4)) = OutData

End With

以上です。

【78996】Re:別ウィンドウのワークシート間コピー
発言  エリエール  - 17/4/4(火) 8:04 -

引用なし
パスワード
   γさんへ

■私が提示したコードをそのまま使わなかった理由は?

 正直申しますと疲れによる私の完全なミスです。
申し訳なかったです。おっしゃっていたご指摘は理解して
訂正したつもりでしたが、間違っていました。

■GetObjectを使う理由がいまいち理解できておらず、

 別ウィンドウのワークシート間コピーの方法を探していたら
GetObjectが良いと考えたからです。他に最適な方法が有るとしても
現在の私の力量では思いつくことは無理です。


以上です。


>βさん いつもながら適切な解説ありがとうございました。
>
>質問者さんへ
>私が提示したコードをそのまま使わなかった理由は?
>(理解せずに Withステートメントとその対である .ドットを
> 使うよりも、間違い無いだろうと思ったのですが。)
>
>GetObjectを使う理由がいまいち理解できておらず、
>当初の動作不良となる原因が別にあるのかもしれないなあと
>思ってもいます。

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