Я сталкиваюсь со странной проблемой, когда использую имена переменных для определения и установки переменных для рабочих книг. Пользователь открывает три рабочие книги (панель инструментов, источник и цель). Затем в рабочую книгу пользователя вводятся имена исходных и целевых рабочих книг - например, «source.xls» и «target.xlsm». Эти входные данные определяются как имена в диапазоне, называемые «FILE_SOURCE» и «FILE_TARGET».
Поэтому я использую имена диапазонов для определения переменных моей книги, как показано ниже:
Dim sourceModel, targetModel As String
sourceModel = wbMainDashboard.Range("FILE_SOURCE") 'Pull from dashboard input (works)
targetModel = wbMainDashboard.Range("FILE_TARGET") 'Pull from dashboard input (works)
'Source and target workbooks
Dim wbSource As Workbook: Set wbSource = Workbooks(sourceModel) 'Workbook already open (doesn't work)
Dim wbTarget As Workbook: Set wbTarget = Workbooks(targetModel) 'Workbook already open (doesn't work)
Thisотлично работает, когда исходная и целевая книги сохраняются на рабочем столе, но по какой-то причине не работает, когда они сохраняются на дисках моего компьютера. Таким образом, я подумал, что мне, возможно, придется указать полный путь к исходной и целевой книгам для определения переменных wbSource и wbTarget?
Чтобы сделать это, я попытался реализовать следующую функциюкоторый должен возвращать пути к файлам:
Public Function GetWorkbookReference(ByVal sFullName As String) As Workbook
Dim wbReturn As Workbook
Set wbReturn = Workbooks(Dir$(sFullName))
Set GetWorkbookReference = wbReturn
End Function
После чего я хотел вызвать эту функцию при определении переменных wbSource и wbTarget:
Dim wbSource As Workbook: Set wbSource = GetWorkbookReference(sourceModel) 'Workbook already open (doesn't work)
Dim wbTarget As Workbook: Set wbTarget = GetWorkbookReference(targetModel) 'Workbook already open (doesn't work)
К сожалению, это тоже не работает. Если кто-то может помочь выяснить, почему ни одна из этих альтернатив не работает, это было бы очень полезно. Если вы знаете о третьей альтернативе, это также будет высоко оценено.