【问题标题】:Excel - VBA switching workbooksExcel - VBA 切换工作簿
【发布时间】:2017-06-16 08:25:24
【问题描述】:

我有 3 个工作簿

来源工作簿

目标工作簿

reference 工作簿 -(包含在所有工作簿中可见的宏)

是否可以在活动工作簿(target 工作簿)和(source 工作簿是活动工作簿)之间更改切换。

  • 激活似乎对我没有帮助,如果这是一个错误或它是什么,我不会。这一步我已经停了很久了。

  • 此工作簿 功能将我带回到reference 工作簿。

希望我的问题很清楚。感谢您的帮助。

' 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 行,我的参考将更改为工作簿的源代码,这不是我想要的工作簿,因为它包含许多其他活动的宏。希望这是代码没问题。

【问题讨论】:

  • 不知道可能是因为“。”在细胞丢失之前。请格式化您的问题,我不想以现在的方式阅读。即使找到你的问题也很困难......
  • 请编辑您的问题并使用降价代码和引用文本块。如果您懒得学习如何使用该网站,那么我们也不会费心花时间解决您的问题。
  • 我已经编辑了这个问题。希望可以理解。为我糟糕的表达能力道歉。 @Max
  • 我认为您会因为担心哪个是 Activeworkbook 而感到困惑 - 在几乎所有情况下,都无需选择您希望代码运行的工作簿。 Microsoft 表示 Activeworkbook 返回一个 Workbook 对象,该对象表示活动窗口(顶部窗口)中的工作簿。 ThisWorkbook 始终是包含代码的工作簿。查看此链接以解释不选择的引用:stackoverflow.com/questions/10714251/…
  • 谢谢,这很有帮助。我处理了这个:)

标签: excel vba


【解决方案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

【讨论】:

  • 是的,它与“打开”命令一起使用,因为它将打开的工作簿作为活动工作簿。我不想要“Workbook.Open”,因为我的文件非常大,接近 20-30 MB,大约有超过 200 万行和 160 行。当两个文件打开系统进入睡眠和宏失败时。所以寻找其他选择。
  • @serafalkan 如果你能提供帮助
  • 是的,添加了@serafalkan。
  • 我不认为你可以在 Excel 中解决这个问题; Excel 中的唯一选择是在后台打开一个新的 Excel 实例,但这并不能解决您的问题,因为规模问题仍然存在。使用您的规模,我会将数据导入 Access 并在那里执行操作,并在完成后导出回 Excel。注意导入 200 万行会很慢。在这种规模下,您应该问自己是否应该迁移到另一个平台,例如MySQL、SASS 或至少 Access...
  • 感谢您的想法,我的系统中不能安装其他工具,因为这不是个人系统,我也不是技术人员。我正在尝试减少团队在 excel 中所做的手工工作。将尝试用多个宏来说服。好的最后一个查询我在很多博客中读到 *.xlsx .activate 在最新的 excel 版本中不起作用。是真的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 2015-08-06
相关资源
最近更新 更多