Объяснение исходного кода
В комментариях, которые я добавил к приведенному ниже коду, вы можете увидеть повторяющийся шаблон получения пути к файлу от пользователя (через filePicker), открывая егофайл, затем открыть файл для установки переменной.
Public Function ShipmentHistPt2()
Dim path1 As String
path1 = OpenFile1() 'calls function for filePicker
If path1 <> vbNullString Then Workbooks.Open (path1) 'If file selected, opens file
Dim mvmtln As Workbook
Set mvmtln = Workbooks.Open(path1) 'Opens file and sets to workbook variable
Dim path2 As String
path2 = OpenFile2() 'calls function for filePicker
If path2 <> vbNullString Then Workbooks.Open (path2) 'If file selected, opens file
Dim mvmtqt As Workbook
Set mvmtqt = Workbooks.Open(path2) 'Opens file and sets to workbook
mvmtqt.Activate
Sheets("Sheet1").Select
Так как я не уверен, хотите ли вы иметь два файла (запрашиваемые и выбранные пользователем) или один, я изменю коддля одного запроса и откройте.
Кроме того, использование .Activate
и .Select
может замедлить ваш код.Вы можете проверить дополнительную информацию здесь об альтернативах использованию .Select
, если хотите.Если вы должны активировать рабочую книгу, вы сможете сделать это с помощью следующей строки: Workbooks(mvmtln.Name).Activate
Обратите внимание, что код немного легче читать, если все операторы Dim
находятся в начале.
Public Function ShipmentHistPt2()
Dim path1 As String
Dim mvmtln As Workbook
path1 = OpenFile1()
If path1 <> vbNullString Then Set mvmtln = Workbooks.Open(path1)
If Not mvmtln Is Nothing Then 'verifies that mvmtln has been assigned to a workbook
Workbooks(mvmtln.Name).Activate 'Can un-comment if needed
Workbooks(mvmtln.Name).Sheets("Sheet1").Select 'Should select the desired sheet
End If
Edit (Global Vars) :
Для глобальных переменных вам нужен модуль общего кода(не один из листов или рабочей книги) и создайте там некоторые глобальные переменные (не объявляйте их в подпрограмме или функции, иначе они будут иметь только область действия в этих местах):
Dim globalVar_1 as String 'change as needed
Dim globalVar_2 as Long
Dim globalVar_3 as Workbook
'etc......
Затем, послеоткрыв нужную книгу, установите для глобальных переменных необходимые значения:
Public Function ShipmentHistPt2()
Dim path1 As String
Dim mvmtln As Workbook
path1 = OpenFile1()
If path1 <> vbNullString Then Set mvmtln = Workbooks.Open(path1)
If Not mvmtln Is Nothing Then 'verifies that mvmtln has been assigned to a workbook
Workbooks(mvmtln.Name).Activate 'Can un-comment if needed
Workbooks(mvmtln.Name).Sheets("Sheet1").Select 'Should select the desired sheet
'Added code
globalVar_1 = Workbooks(mvmtln.Name).Sheets("Sheet1").Range("A1")
globalVar_2 = Workbooks(mvmtln.Name).Sheets("Sheet1").Range("A2")
Set globalVar_3 = mvmtln
End If