【问题标题】:VBA to open two workbooks from first workbook and select specific sheet in second workbookVBA从第一个工作簿打开两个工作簿并在第二个工作簿中选择特定工作表
【发布时间】:2020-07-17 17:48:21
【问题描述】:

我正在尝试从包含 VBA 的第一个工作簿中打开两个工作簿,然后激活第二个工作簿中的特定工作表。代码如下,但由于某种原因,第二个工作簿中的工作表没有被激活。由于文件的名称和位置会有所不同,因此我在 VBA 文件中将它们作为参考,以便可以在前端而不是在代码中更改它们。

代码如下:

Sub OpenWorkbooks()

Application.ScreenUpdating = False

Dim srcFle, dataFle As String
Dim wb, wb1, wb2 As Workbook

srcFle = ActiveSheet.Range("C7").Value
dataFle = ActiveSheet.Range("C10").Value

Set wb = ThisWorkbook
Set wb1 = Workbooks.Open(srcFle)
Set wb2 = Workbooks.Open(dataFle)

wb1.Sheets("Sheet1").Activate

Application.ScreenUpdating = True

End Sub

提前致谢。

【问题讨论】:

  • 试试wb1.Sheets("Sheet1").Select?
  • 感谢 Dean,我尝试了您的建议,但它会生成运行时错误 1004 消息,提示工作表类的选择方法失败。
  • 你确定wb1中存在工作表吗?
  • 对,认为你需要先激活wb1,激活/选择工作表。所以wb1.Activate 那么我上面的那行应该可以了。

标签: excel vba


【解决方案1】:

我想你忘了添加第二个工作簿的激活

Sub OpenWorkbooks()

On Error goto CleanUp  '<--- This will restore your screen update in case of error
Application.ScreenUpdating = False

Dim srcFle, dataFle As String
Dim wb, wb1, wb2 As Workbook

srcFle = ActiveSheet.Range("C7").Value
dataFle = ActiveSheet.Range("C10").Value

Set wb = ThisWorkbook
Set wb1 = Workbooks.Open(srcFle)
Set wb2 = Workbooks.Open(dataFle)

wb1.Sheets("Sheet1").Activate
wb2.Sheets("Sheet1").Activate   '<--- You need this line to activate the 2nd workbook

CleanUp:
Application.ScreenUpdating = True
End Sub

希望这是您所需要的。如果您需要进一步的帮助,请告诉我!

【讨论】:

  • 您好 Tsiriniaina,很抱歉这也没有用。
  • 不用担心,这是第一步。现在你想用 Activate 做什么,因为不建议在你的代码中使用 Activated?
  • 基本上我想做的就是从原始 VBA 文件中打开两个工作簿 - 一个工作簿是数据需要结束的源文件,另一个是包含需要的数据的文件从中复制。希望有帮助。谢谢。
  • 能否更新您的问题,包括源列和目标列的屏幕截图,以便我更新代码以满足您的需要?
【解决方案2】:
Option Explicit

Sub OpenWorkbooks()

'    ' You have declared srcFle as Variant
'    Dim srcFle, dataFle As String
'    ' You have declared wb and wb1 as Variant
'    Dim wb, wb1, wb2 As Workbook

'    ' This is how it's done:
'    Dim srcFle As String, dataFle As String
'    Dim wb As Workbook, wb1 As Workbook, wb2 As Workbook

    ' But best is briefly describing or naming the variables:
    Dim srcFle As String    ' Source Workbook Name
    Dim dataFle As String   ' Data Workbook Name
    Dim wb As Workbook      ' This Workbook
    Dim wb1 As Workbook     ' Source Workbook
    Dim wb2 As Workbook     ' Data Workbook

    ' Retrieve Target Workbook Names from This Workbook.
    Set wb = ThisWorkbook
    srcFle = wb.ActiveSheet.Range("C7").Value
    dataFle = wb.ActiveSheet.Range("C10").Value
'    ' better is e.g.:
'    srcFle = wb.Sheets("Sheet1").Range("C7").Value
'    dataFle = wb.Sheets("Sheet1").Range("C10").Value

    ' Open Target Workbooks (wb1, wb2)
    Set wb1 = Workbooks.Open(srcFle)
    Set wb2 = Workbooks.Open(dataFle)

    ' Prepare to work in Source Workbook (wb1).
    wb1.Sheets("Sheet1").Activate

End Sub

【讨论】:

  • 我会试一试,让你知道我的进展如何。非常感谢您的建议。
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多