スミマセン,なんだかあちこち書き間違えてました。
private sub CommandButton1_Click()
dim Target as range
application.screenupdating = false
workbooks.open filename:="c:\test\データファイル.xls"
set target = workbooks("データファイル.xls").worksheets(1).range("A:A").find(what:=me.textbox1, lookin:=xlvalues, lookat:=xlwhole)
if target is nothing then
workbooks("データファイル.xls").close false
application.screenupdating = true
msgbox "not found"
exit sub
end if
target.entirerow.copy destination:=thisworkbook.worksheets("Sheet2").range("A1")
workbooks("データファイル.xls").close false
application.screenupdating = true
end sub
大変失礼しました。
マクロの基本的な理解として,「ブックを開かずにコピーしてくる」方法はありません。
ブックを開かず処理するためは,ワークシート上で数式を使用して該当ブックの値を検索や参照します。
繰り返すと,できることは次のどちらかです。
1.諦めてブックを開いてコピーしてくる
2.ブックを開きたくないので,数式を工夫して少しでも高速化する
ケース1)
「開かずに」開いてコピーして閉じる。
private sub CommandButton1_Click()
dim Target as long
application.screenupdating = false
workbooks.open filename:="c:\test\データファイル.xls"
set target = workbooks("データファイル.xls").workseets(1).range("A:A").find(what:=me.textbox1, lookin:=xlvalues, lookat:=xlwhole)
if target is nothing then
workbooks("データファイル.xls").close false
application.screenupdating = true
msgbox "not found"
exit sub
end if
target.entirerow.copy destinaton:=thisworkbook.worksheets("Sheet2").range("A1")
workbooks("データファイル.xls").close false
application.screenupdating = true
end sub
ケース2)
事前にシート2のB1セルに
=MATCH(A1,'c:\test\[データファイル.xls]Sheet1'!A:A,0)
と数式を準備しておく
A2セルに
=INDEX('c:\test\[データファイル.xls]Sheet1'!A:A,$B$1)
と数式を準備して右に必要な列範囲までコピーしておく
private sub commandbutton1_Click()
worksheets("Sheet2").range("A1") = me.textbox1
end sub
シート2は,たとえばシート自体を非表示にしておく。
お礼
できました!!! 速度も速いです! 丸々書いて頂いた上に、最後までご確認頂いて、本当に本当にありがとうございました!