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

マクロを保存したブック(シート)にデータをコピーしたいブックのウインドウをActiveにしてセルのコピーをしたいのですが、うまくいきません。下記に例を記載しますのでご教示願います。

1 Dim WBK As Workbook
2 Dim stWBK As String
3 Range("A3").Select 'このシートのA3にブック名があります
4 Selection.Copy
5 stWBK = Clipboard
6 Windows(stWBK)Activate

別のやり方で
stWBK= Range("A3").Select
も試しましたがだめです。

A 回答 (4件)

複数のシートやブックを扱う時は、操作対象としているRangeがどのブックのどのシートであるかを明示しておいた方が、間違いが少なくなります。


ブック名、シート名で指定するなら、
 Workbooks("book1.xls").Worksheets("sheet1").Range("○○")
のようになります。(ブックやシート、Rangeなどは変数でも可)

作業中にかならず対象のブックが開いているという前提であれば、
 Windows("ブック名").Activate '/←「.」に注意
で対象のブックをアクティブにできます。
ご質問の例でいえば
 stWBK = ActiveSheet.Range("A3").Value (またはText)
 Windows(stWBK).Activate
で可能ですが、実は、手動での操作と違って、わざわざブックをアクティブにする必要はありません。

セルの値の単純コピーを例にすれば
 wb1.sh1.Range("A3") = wb2.sh2.Range("B5")
などとすることで、そのままコピーが可能です。
(Wb1,sh1などは、ブック、シートを示す変数です)

なお、対象とするブックが開いていない場合は、
 Workbooks.Open "○○~~~"
などで、ブックを開くところから記述する必要があります。

この回答への補足

ありがとうございます。こちらから質問させてください。 wb1.sh1.Range("A3") = wb2.sh2.Range("B5")
と変数を使った例を参考に下記作成しましたが
Dim Wb1 As Workbook
Dim Wb2 As Workbook
Dim SH1 As Worksheet
Dim SH2 As Worksheet
Set Wb1 = "bk1.xls"  ’ここでエラーになります
Set Wb2 = "bk2.xls"  ’以降は動作不明
Set SH1 = "sh1"
Set SH2 = "sh2"
Wb1.SH1.Cells(1, 1).Value = Wb2.SH2.Cells(1, 1).Value
のように変数のセットが分かりません。ご教示願います。

補足日時:2008/10/27 10:49
    • good
    • 0
この回答へのお礼

その後自分なりに試して、うまくいきました。
記述を単純化することで全体が見やすくなりました。
今回のご指摘に感謝しています。ありがとうございました。

お礼日時:2008/11/07 09:26

はじめましてぇ。



難しいことは言えませんが、開いているブックをアクティブにするには、以下の通りで出来るはずです。
コピペして試してみてください。

--------------------------------------------------
Sub Test()
 Workbooks(Range("A3").Value).Activate
End Sub
--------------------------------------------------

参考(Sub Test2)以下のコード:
 1.対象のブックをアクティブ
 2.決まったセルをコピー
 3.自ブックをアクティブに
 4.自ブックB3セルに値のみ貼付
--------------------------------------------------
Sub Test2()
 Workbooks(Range("A3").Value).Activate
 ActiveSheet.Range("A1").Copy
 With Me
  .Activate
  .Range("B3").PasteSpecial xlPasteValues
 End With
End Sub
--------------------------------------------------

ちなみにブックをアクティブにしなくてもコピーは出来ますよ。

どうでしょう?的を射た回答になっていますか?
    • good
    • 0
この回答へのお礼

ありがとうございます。Withプロパティの使用例も教えて頂いて助かります。さらに勉強していきます。

お礼日時:2008/10/27 10:37

>3 Range("A3").Select 'このシートのA3にブック名があります


4 Selection.Copy
ブック名として必要なのはセルA3に入っている、文字列(だけ)でしょう。だからコピーすることはしない。
そういう場合はRange(”A3").Valueを右辺に書くとか、このまま使絵ば良い。
ブックのコピーはどこでやってますか。Selection.Copy
はその役割は出来ません。
ーー
全体に、マクロの記録をとって、その場合は1個別ケースですから
、一般化するには、どこをどうするか考えましたか。
マクロの記録が取れない操作もありますが、それも含めて、マクロの記録ぐらいやってみて質問すべきです。
全体的に質問のコードは、主要なコード部分が無い。コピー貼り付け
とかの部分。
あと「エクセル ブック 複写」などでWEB照会も済まして勉強してから質問のこと。
    • good
    • 0
この回答へのお礼

ありがとうございます。
マクロの記録をとり、複数のブック名を作業ブックの特定セルに列記し
順にブック名(4月勤怠xls、5月勤怠.xls~12月勤怠.xls)を取り出しその中の残業時間を順次作業ブックに貼り付けたいと考えてました。
Range(”A3").Valueを使ってみます。

お礼日時:2008/10/23 10:53

データをコピーしたいブックのファイル名は、どのように受け渡したいとお考えでしょうか?

この回答への補足

今回は作業ブック(シート)に勤怠表のように月ごとに作成したブック名を特定のセルに記入しておき、順に文字列として取り出し、複数開いたWindowの所定のブックをactiveにし、残業時間等のデータをコピーして月別・人別の表を作成しようとしています。
このときデータコピーのモジュールを一般化し文字列の引数として渡したいと思います。次の段階では月毎のブック内の人別シート名も文字列の引数にしてデータコピーのモジュールをさらに一般化したいと思います。

補足日時:2008/10/23 10:53
    • good
    • 0
この回答へのお礼

お問い合わせありがとうございました。
また何かの機会にご指導ねがえればと思います。

お礼日時:2008/11/07 09:28

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

このQ&Aを見た人はこんなQ&Aも見ています