2014-09-12 35 views
0

如何在Visio 2013中通過宏或C#插件以編程方式替換某些文本? 我嘗試這樣做:替換Visio中的文本,但保持格式

Sub Replace_text() 
For Each o In Application.ActiveWindow.Selection 
o.Text = Replace(o.Text, "123", "234") 
Next 
End Sub 

但格式會丟失,即前更換我有這個

AAABBB

但經過:

aaa 234 bbb

我理解文本不是正確的屬性 我需要像「GetFormattedText」或「GetTextAsHtml」或「GetRichText」。

有什麼建議嗎?

(按Ctrl + H做非程序設計不是一個選項... 我有很多文檔,我需要一次替換許多不同的字符串,這不是一次性任務)

回答

1

您可能無需做任何太瘋狂的事情就可以避免這種情況,因爲當一個形狀的文本被部分格式化時,Visio將使用字符運行存儲該格式。

從我學到的東西中發現,Visio似乎將文本存儲爲稱爲Run的類似格式的塊,因此每個Run都有一個Text值和一組字符屬性。

因此,在您的情況下,如果您可以假設您發現的文本(即「123」)始終具有相同的格式,那麼您應該能夠找到要替換的字符串的索引(使用InStr函數),然後做這樣的事情:

Dim Chars as Visio.Characters 
Set Chars = o.Characters 
Chars.Begin = instr(1 , o.Text , "123") 
Chars.End = Chars.Begin + Len("123") 
Chars.Text = "234" 

如果你不能假設你要替換的文字有文字的那個小塊相同的格式,那麼你就必須先看看是否形狀文本包含你的字符串,如果有,你必須找到封裝文本的運行,然後替換那些運行中的文本。

+0

非常感謝!這實際上完全解決了我的問題! – 2014-09-14 15:30:03

相關問題