Я использую VBA w/Excel 2010 и пытаюсь создать (как бы то ни было) простую функцию. Я хочу, чтобы функция получала строковый аргумент, и если строка соответствует имени открытой книги, верните ссылку на этот объект книги; если совпадение не найдено, оно должно возвращать «#NAME?». (Функция также пытается конкатенация общих файловых расширений, чтобы получить матч, для удобства пользования.)Возвращаемый объект рабочей книги из функции
Вот как это выглядит:
Function BookFromName(bookName As String) As Workbook
Dim wb As Workbook
For Each wb In Workbooks
Select Case (wb.Name)
Case bookName, _
bookName & ".xls", _
bookName & ".xlsx", _
bookName & ".xlsm":
Set BookFromName = wb
Exit Function
End Select
Next
MsgBox ("Workbook '" & bookName & "' is not open.")
BookFromName = CVErr(xlErrName)
End Function
Сейчас я получаю сообщение об ошибке: «Подвижной ошибка времени 438: объект не поддерживает это свойство или метод ». От этой линии:
Set BookFromName = wb
Я пытался переключать тип возвращаемого значения Variant или объекта, но это ничего не меняет.
Я также попытался удалить SET из строки (хотя это и не похоже на меня), что изменяет ошибку на «Ошибка времени выполнения 91: переменная объекта или с переменной блока не установлена».
Я некоторое время проверял Google и StackExchange, но я не могу найти примеры функции, возвращающей объект рабочей книги, а не только имя книги.
Вот предложение Veve, которая работает хорошо, но я бы предпочел, чтобы передавать ссылки:
Function BookFromName(bookName As String) As Variant
Dim wb As Workbook
For Each wb In Workbooks
Select Case (wb.Name)
Case bookName, _
bookName & ".xls", _
bookName & ".xlsx", _
bookName & ".xlsm":
BookFromName = wb.Name
Exit Function
End Select
Next
MsgBox ("Workbook '" & bookName & "' is not open.")
BookFromName = CVErr(xlErrName)
End Function
Разве вы не можете просто вернуть имя рабочей книги и использовать его после вызова вашей функции, чтобы сделать все, что вы хотите с ним? – Veve
Это сделало бы работу, но я беспокоюсь, что мне не хватает нюанса синтаксиса VBA для передачи ссылок. Является ли моя проблема, что я пытаюсь рассматривать VBA, например .NET? – JamesFaix
Работает ли функция, если поиск рабочей книги открыт? – Gareth