Excel VBA - выберите Ok всплывающее окно / диалоговое окно - PullRequest
0 голосов
/ 03 марта 2011

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

Макрос предоставляетнесколько основных деталей и гиперссылки на файлы (включая xls, doc, pdf и т. д.).Затем код vba вставляет формулу ячейки, чтобы извлечь значение отдельной ячейки из определенного местоположения рабочих книг (без их открытия), где есть файл Excel, и создает #Ref!ошибка в противном случае.Так как формула ячейки создается с помощью FileItem.Path и манипулирования текстом, формула всегда ссылается на лист «Сводка», который подходит для значимых файлов.

Проблема заключается в том, что в остальных файлах Excel отсутствует рабочий лист с таким именем, который заставляет Excel выдать всплывающее диалоговое окно «Выбор листа», чтобы пользователь мог вручную выбрать один из параметров.Мне нужен способ управлять этим в коде VBA.Я могу управлять рядом возможных результатов, включая выбор OK, чтобы каждый раз выбирать 1-й вариант, отмену и игнорирование запроса, пропуск этих экземпляров и т. Д., Но я не могу неоднократно прерывать макрос для ввода пользователя.

Я пыталсявставка Application.DisplayAlerts = False в различных точках кода, но это не мешает этому диалогу.

Любая помощь / предложение приветствуются.

Спасибо

Edit

Первоначально у меня было:

Cells(r, 5).Formula = "='" & Left(File.Path, InStr(File.Path, File.Name) - 1) & "[" & File.Name & "]Summary'!$D$3"

... с получением следующей формулы ячейки:

='C:\Documents and Settings\[TEST]Summary'!$D$3

1 Ответ

1 голос
/ 03 марта 2011

Действительно, кажется, что вы не можете отключить это всплывающее окно «Неверная ссылка» (пожалуйста, исправьте меня, если я ошибаюсь!), Однако, вы могли бы сгенерировать формулу для ссылки на вашу "Сводка »в VBA (как вы уже делаете), но оцените его в VBA перед вставкой фактической формулы, чтобы, если формула вернулась без ошибок, вставьте ее, в противном случае вы можете выполнить какое-то другое действие вместо этого.

Например, у вас есть на данный момент:

if FileType <> "XLS" then
    myCellFormula = "#Ref!"
else
    myCellFormula = "[<Target File Name>]Summary!A1"
endif

Однако, как вы знаете, попытка вставить ссылку на несуществующий лист приведет к кашлю Excel.Что вы можете сделать, это проверить эту ошибку в VBA, например:

On Error Resume Next

dim dummy as variant

if FileType <> "XLS" then
    myCellFormula = "#Ref!"
else
    dummy = Application.Range("[<Target File Name>]Summary!A1").Value

    if not isempty(dummy) then
        myCellFormula = "[<Target File Name>]Summary!A1"
    else
        <alternative action>
    endif
endif

Вы также можете сделать это с помощью обработчика ошибок, это зависит от того, хотите ли вы пропустить эти несуществующие ссылки (так<alternative action> было бы ничем).

Редактировать , основываясь на вашем последнем ответе, вы можете изменить код на что-то вроде этого:

On Error Resume Next

dim dummy as variant
dim targetFileFormula as string
dim lastSlashPos as long

lastSlashPos = InStrRev(fileitem.Path, "\", , vbBinaryCompare)
targetFileFormula = "'" & Left(fileitem.Path, lastSlashPos) & "[" & Right(fileitem.Path, Len(fileitem.Path) - lastSlashPos) & "]Summary'!$D$3"

if FileType <> "XLS" then
    myCellFormula = "#Ref!"
else
    dummy = Application.Range(targetFileFormula).Value

    if not isempty(dummy) then
        myCellFormula = targetFileFormula
    else
        <alternative action>
    endif
endif

Затем вы можете настроитьэто для ваших нужд.

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