2017-06-16 23 views
0

私は3つのブックエクセル - VBAスイッチングワークブック

ソースブック

ターゲットブック

参照ワークブック - (マクロを含むすべてのワークブックを横切る可視いる)

アクティブワークブック(ターゲットワークブック)および(ソースアクティブブックだったワークブック)。

  • Activateは私には役に立たないと思われますが、これはバグやそれが何であるかわかりません。私はこの段階でかなりの時に停止しました。

  • このワークブック機能は、参照ワークブックに戻って私を取ります。

私の質問は明らかです。あなたの助けに感謝。私は、行を変更した場合

' My code is in a test macroworkbook 
' I am having a workbook opened 1.xlsx 
' Opening a workbook countrypricelist.xls 
'running the code from 

Dim sourcewb As Workbook 
Dim targetWorkbook As Workbook 
Dim filter As String 
Dim filter2 As String 
Dim rw As Long 
Dim x As Range 
Dim y As Range 


Set sourcewb = ActiveWorkbook 
Set x = sourcewb.Worksheets(1).Range("A:F") 
Dim sourceSheet As Worksheet 
Set sourceSheet = sourcewb.Worksheets(1) 
MsgBox sourceSheet.Name 
x.Select 

MsgBox sourceSheet.Name 

x.Select 


MsgBox sourcewb.Name ' This gives me sourceworkbook name. 


filter = "(*.xls),*.xls" 


Caption = "Please Select an input file " 


Application.ScreenUpdating = False 


Filename = Application.GetOpenFilename(filter, , Caption) 

Set targetWorkbook = Application.Workbooks.Open(Filename) 

Set y = targetWorkbook.Worksheets(1).Range("A:F") 

y.Select 

Dim targetSheet As Worksheet 

Set targetSheet = targetWorkbook.Worksheets(1) 

MsgBox targetSheet.Name 


Set targetWorkbook = ActiveWorkbook 


MsgBox targetWorkbook.Name 'This gives me target workbook name 


y.Select 
sourcewb.Activate 

MsgBox sourcewb.Name ' Source workbook becomes same as targeworkbook. 
x.Select 

MsgBox sourcewb.Name & " This is the source workbook " 
MsgBox targetWorkbook.Name & " This is the target workbook " 


With sourcewb.Worksheets(1) 
For rw = 2 To Cells(Rows.Count, 1).End(xlUp).Row 
    Cells(rw, 3) = Application.VLookup(Cells(rw, 2).Value2, x, 3, False) 
    Cells(rw, 4) = Application.VLookup(Cells(rw, 2).Value2, x, 4, False) 
    Cells(rw, 5) = Application.VLookup(Cells(rw, 2).Value2, x, 5, False) 
Next rw 
End With 


MsgBox "All required columns from source mapped to target file " 

MsgBox "Trying to map from target to source " 

Set sourcewb = ActiveWorkbook 
MsgBox ActiveWorkbook.Name 

Application.ScreenUpdating = False 

だからsourcewb =はThisWorkbook私の参照は、それが他の活動のために、他の多くのマクロが含まれていて、私の希望ワークブックされていないブックへのソースコードに変更されます。コードがうまくいけばいいですね。

+1

いけないかもしれないので、知っています ""細胞が失われる前にあなたの質問を書いてください。私はこれを今見ている方法で読んでほしくない。あなたの質問を見つけることさえ困難でした... – Max

+0

あなたの質問を編集し、コードやテキストブロックを引用するためのマークダウンを使用してください。あなたがサイトの使い方を学ぶのに迷惑をかけることができなければ、あなたの問題解決に時間を費やすことはできません。 – teylyn

+0

質問を編集しました。それが理解できることを願っています。私の悪い関節機能を教えてください。 @Max –

答えて

1

The Excel Workbook Objectは、現在アクティブ化されているブックだけでなく、すべてのブックをプログラムで開いて編集して閉じることができます。

例:

Dim wb as Excel.Workbook, otherwb as Excel.Workbook 
Dim ws as Excel.Worksheet, otherws as Excel.Worksheet 
Set wb = Workbooks.Open "somefile.xlsx" 
Set otherwb = Workbooks.Open "otherfile.xlsx" 
Set ws = wb.Sheets(1) 
Set otherws = otherwb.Sheets(1) 

' do stuff 
ws.Cells(1,1) = otherws.Cells(1,1) 

'save changes 
wb.Save 
+0

はいそれはアクティブなブックとして開いているブックを作るように "開く"コマンドで動作します。 「Workbook.Open」は、ファイルが20〜30MBに非常に近いため、2百万行以上160行以上で大丈夫です。時間が経過すると、ファイルを開くシステムとスリープするシステムの両方に障害が発生します。だから他のオプションを探しています。 –

+0

@serafalkanあなたが助けてくれるならば –

+0

はい@serafalkanを追加しました。 –