VBA, чтобы открыть две рабочие книги из первой рабочей книги и выбрать лист спецификаций c во второй рабочей книге - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь открыть две книги из моей первой книги, которая содержит VBA, а затем активировать лист спецификации c во второй книге. Код приведен ниже, но по какой-то причине лист во второй книге не активируется. Поскольку файлы будут различаться по названию и расположению, я сделал их ссылкой в ​​файле 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

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020
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
0 голосов
/ 05 апреля 2020

Я думаю, вы забыли добавить активацию 2-й рабочей книги

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

Надеюсь, это то, что вам нужно. Просто дайте мне знать, если вам нужна дополнительная помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...