Действительно, кажется, что вы не можете отключить это всплывающее окно «Неверная ссылка» (пожалуйста, исправьте меня, если я ошибаюсь!), Однако, вы могли бы сгенерировать формулу для ссылки на вашу "Сводка »в 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
Затем вы можете настроитьэто для ваших нужд.