2015-01-20 1 views
2

Я пишу приложение в Excel, которое извлекает данные из нескольких баз данных и представляет эти данные в листах книги Excel 2010. Некоторые из данных, которые я вызываю из базы данных, представлены в форме формул Excel 2010 (например, «Budget Estimate»! E46).Определите, вернется ли формула #Ref! error

В процессе заполнения отдельных ячеек в листе из этого набора данных мне нужно иметь возможность оценить, будет ли формула, которую я загружаю, будет генерировать #Ref! ошибка перед размещением значения в ячейке. В приведенном выше примере размещение этого значения в ячейке через VBA отлично работает, если рабочий лист, на котором он ссылается, существует. Если это не так, у меня есть способ найти его, но сначала мне нужно определить, создаст ли он ошибку, поэтому конечный пользователь не должен иметь дело с диалоговыми окнами, которые появляются с запросом пути к этому осиротевшей Рабочий лист.

+1

http://stackoverflow.com/questions/16105884/how-to-capture-ref-in-excel, это questian есть ответ уже –

+0

'Я должен быть в состоянии чтобы оценить, будет ли формула, которую я загружаю, будет генерировать #Ref! ошибка перед размещением значения в ячейке', поэтому я думаю, что предоставленный ответ в ссылке не распространяется на то, что @TimWilliams – L42

+0

@ L42 Вы правы - убрали мой близкий голос –

ответ

2
Sub Tester() 

    Dim v 
    v = Application.Evaluate("=Sheet999!A1") 

    If IsError(v) Then 
     Select Case v 
      Case CVErr(xlErrRef): Debug.Print "#ref!" 
      Case CVErr(xlErrDiv0): Debug.Print "#div by zero!" 
      'etc 
     End Select 
    End If 

End Sub 

См: http://www.cpearson.com/excel/ReturningErrors.aspx

+0

Тим - спасибо. Это идеальный вариант и будет включать эту подпрограмму в случае необходимости проверки конкретных ошибок в будущем. Внимательно оцените свой ответ так быстро, и ваш опыт. Еще раз спасибо. – Y2kShea

0

Вы можете проверить свою формулу, используя Evaluate. Попытайтесь:

If IsError(Evaluate("='Budget Estimate'!E46")) Then 
    'other cool stuff here 
End If 

Это приведет к захвату Ошибок перед тем, как вы поместите его в ячейку, но не конкретную для ссылочной ошибки.
При этом будут зафиксированы все ошибки в формуле. Не совсем 100% ответ, который вы ищете, но HTH.

+0

TTH! (Это полностью помогает!) - Я знаю, что мой вопрос был специфическим для этой конкретной ошибки, но на самом деле я не забочусь о том, что ошибка до тех пор, пока я могу обнаружить, что она есть заранее, а функция, которую вы указали выше, это прекрасно. Спасибо! – Y2kShea

+0

@ Y2kShea Последующие действия разрешены до тех пор, пока они не отклоняются от вашего вопроса. Кажется, что 'Evaluate' не работает с закрытыми книгами. Я протестировал его и смог воспроизвести то, что вы описали. Если это так, вам придется использовать другой подход. Но то, что вы хотите, все еще возможно. :-) – L42

Смежные вопросы