-1

Visio VBA (または COM API) の場合

形状名が見つからない場合に例外を期待せずに形状を取得するにはどうすればよいですか?

... 私の visio ページには、"DraftText" という名前の Rectangle Shape がある場合とない場合があります。

私はそれがそこにあることを確認したいと思います。

私のコードは次のようです:

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 例外が発生することです。

私はtry catchブロックをコーディングユーティリティとして使用することに反対しているので、

IDictionary.TryGetValue(, out); など、取得する前に形状の存在を確認する方法を探しています。

または if(page.Shapes.Contain("DraftText"))...

何か案は?

4

2 に答える 2

1

VBAを使用して、名前で形状を取得しようとする前に「エラー時に次を再開」し、エラー時にPROC_ERRに移動して後でエラー処理を再開します。

例外を無効にできない場合は、すべての図形をループして、探している図形とその名前を照合することができます。ただし、組み込みの名前によるルックアップと比較すると、実行に時間がかかります。

于 2012-04-03T21:48:38.263 に答える
0

try catch ブロックの使用

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);
}
于 2012-07-30T21:00:26.593 に答える