Я испытываю некоторые разочарования при работе с книгой с именем переменной, прочитав множество предыдущих вопросов об использовании *, я все еще сталкиваюсь с ошибкой времени выполнения 9, что бы я ни пытался. Поэтому прошу помощи по этому поводу.
В книгу, содержащую код, необходимо скопировать данные из книги «Сегодняшние данные, 19 ноября 2018 г.», на которую имеется ссылка в ячейке B3 в приведенном ниже коде. Дата меняется каждый день, но и другие вещи тоже меняются, например, 19 ноября 18, 19 ноября 2018.
Для приведенного ниже кода, если я сопоставлю ячейку B3 с точным именем книги, код будет работать, поэтому не может быть, что лист1 не существует. Однако я пробовал все приведенные ниже варианты значения ячейки B3, чтобы учесть соглашение об именах переменных, и все они приводят к ошибке времени выполнения.
Сегодняшние данные *, сегодняшние данные *, сегодняшние данные * .xlsx
Dim WorkbookName As Variant
WorkbookName = Range("B3").Value
Workbooks(WorkbookName).Sheets(1).Range("A1").CurrentRegion.Copy
Workbooks("Stock Cash").Worksheets("STOCK Detail").Range("A1").PasteSpecial
xlPasteValues
* «Наличные деньги» - это текущая книга, содержащая этот код.
Да это уже открыто


Если это книга уже открыт, и у вас просто возникают проблемы с установкой ссылки на нее, то эту работу должен выполнить оператор For Each.
Просмотрите все открытые книги в коллекции Application.Workbooks и с помощью оператора Like можно найти частичные совпадения и установить для нужной книги новую переменную myWB.
Вероятно, неплохо использовать отдельные переменные wb (что уже было сделано с использованием wb и myWB в приведенном ниже примере) только потому, что вы не хотите использовать последний wb в цикле, если совпадение не было найдено (что означает, что вы получите ошибка RT # 91 - что лучше, чем случайное перемещение данных с неправильного wb).
Dim wb As Workbook, myWB As Workbook
For Each wb In Application.Workbooks
If wb.Name Like "*" & Range("B3").Value & "*" Then
Set myWB = wb
Exit For
End If
Next wb
myWB.Sheets(1).Range("A1").CurrentRegion.Copy
Я бы хотел настоятельно рекомендую, чтобы вы также квалифицировали Range("B3").Value как с вашей книгой (может быть ThisWorkbook, но нет, ActiveWorkbook), так и с рабочим листом - тем более, что вы имеете дело с несколькими открытыми книгами.
Итак, что-то вроде:
If wb.Name Like "*" & ThisWorkbook.Worksheets("..SheetName..").Range("B3").Value & "*" Then
...
Я попробовал, и должно быть что-то не так с тем, как я это делаю. Значение в диапазоне B3 - «Ежедневные данные за 19 ноября 2018 года», тогда как книга фактически называется «Ежедневные данные за 19 ноября 2018 года (4)». Почти то же самое. Но когда я перехожу, я вижу, что цикл не находит его, поскольку он устанавливает mywb = Nothing
@ A.J.A О, я так понимаю, вы использовали подстановочные знаки в B3, например Today Data *
Да, даже когда я изменяю значение в Range B3, чтобы оно было точно таким же, как в книге, оно все равно не принимает его.
Хорошо, я обновил код - больше не используйте подстановочные знаки в ячейке - теперь он жестко запрограммирован
Ха-ха, я вернул подстановочный знак, и он работает. Здорово. Спасибо за помощь
Рассматриваемая рабочая тетрадь уже открыта?