Формула имеет имя листа, но пытается найти книгу с таким названием - PullRequest
0 голосов
/ 09 мая 2019

У меня есть основной файл, в котором есть только некоторые определения и все макросы (назовем его main.xlsm).Один из макросов обновляет и вносит множество изменений в рабочую книгу (назовем его book_dest.xlsx).

Книга назначения (book_dest.xlsx) имеет 2 листа: Downloads и Dictionary.Я должен написать формулу в определенной ячейке (назовем это S5) листа Downloads, который ищет определенное значение ячейки в листе Dictionary.Итак, если я напишу формулу вручную, это будет примерно так:

=VLOOKUP(G5,Dictionary!$A:$D,4,0)

в ячейке S5.Лист Dictionary существует, и имя верное.Когда я пишу это вручную, все работает отлично, но когда я пишу это с использованием макроса, то есть

sht_downloads.Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)"

(где sht_downloads это лист с именем Downloads (он был определен ранее))

появляется всплывающее окно с сообщением, что Dictionary не существует, и заставляет меня искать файл.Но Dictionary это не файл, это имя листа!Я также пытался использовать .FormulaR1C1, но это не работает.Я также пытался записать макрос, но он говорит, что я использую ту же формулу.

Что я могу сделать?

Редактировать:

У меня есть один файл (main.xlsm), где находится макрос.Используя этот макрос, мне нужно вставить 1 формулу в ячейку другой книги (destination.xlsx) на конкретном листе («Загрузки»).Формула - это просто VLOOKUP на листе «Загрузки», который выполняет поиск на листе под названием «Словарь».Я имею в виду, мне нужно сделать что-то вроде this .

Код выглядит примерно так:

Sub main_dest()
    Dim book_dest as Workbook, book_main as Workbook
    Dim sht_downloads as Worksheet, sht_main as Worksheet, sht_dictionary as Worksheet

    Set book_main = ThisWorkbook
    Set book_dest = 'I call a function that opens the file if it's not already open and, if it's open, it just sets it. The function returns a Workbook

    Set sht_main = ThisWorkbook.Sheets("main")
    Set sht_downloads = book_dest.Sheets("Downloads")
    Set sht_dictionary = book_dest.Sheets("Dictionary")

    sht_downloads.Activate

    With sht_downloads
        .Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)"
    End With

End Sub

Когда программа переходит на строку sht_downloads.Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)",он открывает всплывающее окно «Значения обновления», например этот

Я также пытался

With book_dest
    sht_downloads.Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)"
End With

, но не работал.

1 Ответ

0 голосов
/ 09 мая 2019

Я считаю, что это должно быть результатом неправильного определения книги и листа.

Вы говорите:

".. sht_downloads - это лист загрузок .."

Это ссылка на рабочий лист в рабочей книге book_dest.xlsx. Однако ваш макрос запускается из другой книги под названием main.xlsm. Поскольку вы запускаете макрос из main.xlsm, он будет пытаться найти ссылочный лист в этой конкретной книге, что приведет к описанному вами поведению (запрос файла во всплывающем окне).

Вы должны правильно указать свою рабочую книгу, например ::11014

Sub Test()

Dim wkb As Excel.Workbook
Dim wks1 As Excel.Worksheet
Dim wks2 As Excel.Worksheet

Set wkb = Excel.Workbooks("book_dest.xlsx")
Set wks1 = wkb.Worksheets("Downloads")
Set wks2 = wkb.Worksheets("Dictionary")

With wks1
    .Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)"
End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...