2012-04-03 2 views
-1

В Visio VBA (или COM API)Visio Page Найти Форму по имени без исключения

Как я могу получить форму не ожидая исключения, когда имя формы не найдено?

... на моей странице visio может быть или не быть прямоугольник с названием «DraftText».

Я хочу проверить, что он есть, и если да, сделайте что-л.

мой код, кажется, как:

Shape waterMarkRect = page.Shapes["DraftText"]; 
if (waterMarkRect == null) 
{ 
    waterMarkRect = page.DrawRectangle(0, 0, 50, 15); 
    waterMarkRect.Name = "DraftText"; 
    waterMarkRect.NameU = waterMarkRect.Name; 
    waterMarkRect.Text = "INCONSISTANT"; 

    Layer wMarkLayer = page.Layers["WMark"] ?? page.Layers.Add("WMark"); 
    wMarkLayer.Add(waterMarkRect, 0); 
} 
... 
... 

Проблема заключается в том, что, если форма "DraftText" нет, я получаю COM Exception.

, как я против использования попытаться поймать блок как утилита кодирования,

я ищу способ, чтобы проверить для существования формы до принятия его таким, как IDictionary.TryGetValue (, выход);

или если (page.Shapes.Contain ("DraftText")) ...

Любые идеи?

ответ

0

Использование блока

Shape waterMarkRect = null; 
try { 
    waterMarkRect = page.Shapes["DraftText"]; 
} 
catch (Exception){ 
} 

if (waterMarkRect == null) 
{ 
    waterMarkRect = page.DrawRectangle(0, 0, 50, 15); 
    waterMarkRect.Name = "DraftText"; 
    waterMarkRect.NameU = waterMarkRect.Name; 
    waterMarkRect.Text = "INCONSISTANT"; 

    Layer wMarkLayer = page.Layers["WMark"] ?? page.Layers.Add("WMark"); 
    wMarkLayer.Add(waterMarkRect, 0); 
} 
+1

Я предполагаю, что это скорее всего возможно, возможно, вы захотите добавить чек для того, что было захвачено Исключение: catch (COMException ex) {if (ex.ErrorCode! = 0x00000) throw;} 'поэтому вы не пропустите истинный исключение –

1

Выполнение этой задачи через VBA, я просто делаю «при ошибке после следующего», прежде чем пытаться получить форму по имени, а при ошибке goto PROC_ERR возобновит обработку ошибок после этого.

Если вы не можете отключить исключение, вы можете перебрать любую фигуру и проверить ее имя по отношению к тому, которое вы ищете. Тем не менее, это займет намного больше времени, чем при использовании встроенного поиска по имени.

+0

попытка поймать на ошибке такой же, как Ьгу {} уловом() {} Это плохая практика, я стараюсь избегать каких-либо средств necessery. повторение вариант, мне не нравится, но может быть, если ничего не возможно. Я сейчас +1, если ответ не будет применен, я буду V его :) Спасибо за ваш повтор. –