こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBA 他のブックへ値を返す

Excelで「備品」というブックと「不用品報告」というブックを作り、「備品」の方でボタンをクリックすると「不用品報告」の"一覧"というシートに順々に入力されるように組んでみました。

※「備品」「不用品報告」は同じフォルダに入っています。

Application.ScreenUpdating = False

Dim thisBook As Workbook
Dim workBook1 As Workbook
Dim lastrow2 As Long

Set thisBook = ThisWorkbook
Set workBook1 = Workbooks.Open(thisBook.Path & "\不用品報告.xlsx")

lastrow2 = workBook1.Worksheets("廃棄一覧").Range("C" & Rows.Count).End(xlUp).Row + 1

workBook1.Worksheets("廃棄一覧").Range("G" & lastrow2).Value = thisBook.Worksheets("一覧").Cells(ActiveCell.Row, 15).Value
workBook1.Worksheets("廃棄一覧").Range("H" & lastrow2).Value = "報告する"

workBook1.Close SaveChanges:=True

Application.ScreenUpdating = True

MsgBox "廃棄処理が完了しました。不用品報告ファイルの一覧にデータが追加されています。", vbInformation, "廃棄処理"

End If

という形です。

「不用品報告」ブックにデータが飛ぶのですが、ActiveCell.Rowと設定しているにも関わらず一定の行のデータしか飛んでくれません。

※例
5行目のデータを飛ばしたいのに(アクティブなセルは5行目のセルになっている状態)7行目のデータが入る
という感じです。

違うブックにデータを飛ばすときには「ActiveCell~」は使えないのでしょうか。もしくはどこか不具合があるのでしょうか。

お詳しい方がいらっしゃいましたら、ご教授願います。

投稿日時 - 2012-07-20 17:26:36

QNo.7601073

すぐに回答ほしいです

質問者が選んだベストアンサー

不用品報告をマクロの中で開いた時点で、アクティブセルはそっちのブック(の開いているシートの)になります。
それまで開いていたthisworkbookの(=マクロを起動した時点の)、アクティブセルではありません。


簡易な直し方:
set workbook1=workbook.open(…不用品報告
thisworkbook.activate

などのようにして、アクティブを引き戻してください。


別の対処法:
sub macro1()
 dim w as workbook
 dim targetrow as long
 dim rx as long

 rx = activecell.row
 set w = workbooks.open(thisworkbook.path & ""\不用品報告.xlsx")
 activeworkbook.worksheets("廃棄一覧").select
 targetrow = range("C65536").end(xlup).row + 1

 cells(targetrow, "G").value = thisworkbook.worksheets("一覧").cells(rx, 15).value
 cells(targetrow, "H").value = "報告する"

 w.close savechanges:=true
 msgbox "DONE"
end sub

投稿日時 - 2012-07-20 20:51:35

お礼

とてもスッキリする回答ありがとうございます。
無事望み通りのことができました。
しかも、自分のものよりシンプルなやり方まで教えていただき、とても参考になりました。
本当にありがとうございました。

投稿日時 - 2012-07-20 22:32:27

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問