Я должен сказать, что это один из самых разных запросов, которые я видел для функциональности Excel.
Я думаю, у меня есть кое-что для вас.
Во-первых, если вы 'Если вы не знакомы с редактором VBA, вы можете получить к нему доступ, нажав Alt + F11 .Другой способ получить к нему доступ - это вкладка Developer на ленте, которая по умолчанию скрыта.Чтобы показать его, измените ленту, чтобы включить его.

Оттуда вы можете получить доступ к редактору VBA, а также запускать макросы.

Изнутри добавьте следующий код ...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lngRow As Long, lngCol As Long, strDate As String, strCode As String, strCorrl As String
Dim strKey As String, strSlaveKey As String, i As Long
If objSlaveSheet Is Nothing Then Exit Sub
objSlaveSheet.Rows.EntireRow.Hidden = True
objSlaveSheet.Rows(1).Hidden = False
If Target.Cells(1, 1).Row > 1 Then
With Target.Worksheet
strDate = .Cells(Target.Row, 1)
strCode = .Cells(Target.Row, 2)
strCorrl = .Cells(Target.Row, 3)
strKey = strDate & "_" & strCode & "_" & strCorrl
End With
' Now loop through all of the cells in the slave workbook.
' Start at the second row because the first has a header.
With objSlaveSheet
For lngRow = 2 To .Rows.Count
strSlaveKey = ""
For i = 1 To 3
strSlaveKey = strSlaveKey & "_" & .Cells(lngRow, i)
Next
strSlaveKey = Mid(strSlaveKey, 2)
If strSlaveKey = "__" Then Exit For
If strSlaveKey = strKey Then
.Rows(lngRow).Hidden = False
End If
Next
.Activate
.Cells(1, 1).Select
End With
End If
End Sub
... в рабочую таблицу, где вы хотите вызватьна ваш рабочий лист A .
Также в рабочей книге A создайте новый Модуль в редакторе VBA и вставьте следующеекод ...
Public objSlave As Workbook
Public objSlaveSheet As Worksheet
Public Sub SelectSlaveBook()
Dim objDlg As FileDialog, strFile As String, strSlaveSheetName As String
strSlaveSheetName = "Sheet1"
Set objDlg = Application.FileDialog(msoFileDialogOpen)
objDlg.Show
If objDlg.SelectedItems.Count > 0 Then
strFile = objDlg.SelectedItems(1)
Set objSlave = Application.Workbooks.Open(strFile, False, True)
Set objSlaveSheet = objSlave.Worksheets(strSlaveSheetName)
ThisWorkbook.Activate
End If
End Sub
... прежде чем двигаться дальше, убедитесь, что вы изменили значение strSlaveSheetName на имя листа, на котором ваши данные находятся в вашем "подчиненном"Рабочая тетрадь ( B ).
Наконец, на листе A добавьте следующий код в объект ThisWorkbook ...
Private Sub Workbook_Open()
SelectSlaveBook
End Sub
... теперь закройте основную рабочую книгу (в вашем случае рабочую книгу A ) и откройте ее снова.
Вам будет предложено указать местонахождение рабочей книги "Slave".(учебное пособие B ).
После того, как вы определили это местоположение, выберите то, что хотите выбрать, и все вещи останутся неизменными, оно должно работать для вас.
Конечно,если вам нужны настройки для точного соответствия вашим требованиям, это всегда возможно.
Надеюсь, это сработает для вас.