2017-06-16 233 views
0

我有3個工作簿的Excel - 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

請編輯您的問題,並使用markdown代碼和引用文本塊。如果您無法學習如何使用該網站,那麼我們不會花費時間來解決您的問題。 – 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-30 MB,大約有兩百多萬行和160行。當這兩個文件打開系統進入睡眠和宏失敗。所以尋找其他選擇。 –

+0

@serafalkan如果你能幫到這個 –

+0

是的補充@serafalkan。 –

相關問題