[討論]請問有沒有人知道, 圖塊裡如果有1個MTEXT, VBA 可以修改其值嗎?
3 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[討論]請問有沒有人知道, 圖塊裡如果有1個MTEXT, VBA 可以修改其值嗎?
請問有沒有人知道, "圖塊"裡如果有1個MTEXT, VBA 可以修改其值嗎?
我現在卡在跟本就不知道要怎麼抓出字串, 更別說修改字串了。
還是說圖塊裡的MTEXT 本來就不能改的呢?
如果有人知道, 煩請指點一下, 感謝~~
以下是可以抓出圖塊的定義屬性, 那如果是MTEXT 文字呢?
If objBlockReference.HasAttributes Then
'取得屬性的陣列
avarAttributes = objBlockReference.GetAttributes
'從陣列中依序取出屬性物件
For intIndex = LBound(avarAttributes) To UBound(avarAttributes)
'取得屬性物件
Set objAcadAttributeReference = avarAttributes(intIndex)
'判斷是否為屬性
If objAcadAttributeReference.ObjectName = "AcDbAttribute" Then
If objAcadAttributeReference.TagString = Field Then
objAcadAttributeReference.TextString = value
Exit Sub
End If
End If
Next intIndex
End If
我現在卡在跟本就不知道要怎麼抓出字串, 更別說修改字串了。
還是說圖塊裡的MTEXT 本來就不能改的呢?
如果有人知道, 煩請指點一下, 感謝~~
以下是可以抓出圖塊的定義屬性, 那如果是MTEXT 文字呢?
If objBlockReference.HasAttributes Then
'取得屬性的陣列
avarAttributes = objBlockReference.GetAttributes
'從陣列中依序取出屬性物件
For intIndex = LBound(avarAttributes) To UBound(avarAttributes)
'取得屬性物件
Set objAcadAttributeReference = avarAttributes(intIndex)
'判斷是否為屬性
If objAcadAttributeReference.ObjectName = "AcDbAttribute" Then
If objAcadAttributeReference.TagString = Field Then
objAcadAttributeReference.TextString = value
Exit Sub
End If
End If
Next intIndex
End If
蜻蜓草- 一般會員
- 文章總數 : 77
年齡 : 47
來自 : 南投
職業 : 工
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4894
威望值 : 0
注冊日期 : 2012-08-16
回復: [討論]請問有沒有人知道, 圖塊裡如果有1個MTEXT, VBA 可以修改其值嗎?
嘿!又是我來回答了!
哈哈!看來這陣子我比較閒!
'從陣列中依序取出屬性物件
For intIndex = LBound(avarAttributes) To UBound(avarAttributes)
'取得屬性物件
Set objAcadAttributeReference = avarAttributes(intIndex)
'取得屬性物件的Tag屬性及值
If objAcadAttributeReference.ObjectName = "AcDbAttribute" Then
strShowMessage = objAcadAttributeReference.TagString + " " + objAcadAttributeReference.TextString
End If
Next intIndex
試看看吧!
哈哈!看來這陣子我比較閒!
'從陣列中依序取出屬性物件
For intIndex = LBound(avarAttributes) To UBound(avarAttributes)
'取得屬性物件
Set objAcadAttributeReference = avarAttributes(intIndex)
'取得屬性物件的Tag屬性及值
If objAcadAttributeReference.ObjectName = "AcDbAttribute" Then
strShowMessage = objAcadAttributeReference.TagString + " " + objAcadAttributeReference.TextString
End If
Next intIndex
試看看吧!
ginse0727- 高級會員
- 文章總數 : 256
年齡 : 50
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 6785
威望值 : 500
發帖精華 : 1
注冊日期 : 2010-07-13
回復: [討論]請問有沒有人知道, 圖塊裡如果有1個MTEXT, VBA 可以修改其值嗎?
真的是辛苦你啦~ginse0727 寫到:嘿!又是我來回答了!
哈哈!看來這陣子我比較閒!
感恩熱心幫助提攜後輩!
____________________________________________________________________________________
👉[訂購]AutoCAD圖塊大師課程(點我)👈
回復: [討論]請問有沒有人知道, 圖塊裡如果有1個MTEXT, VBA 可以修改其值嗎?
蘋果爸,其實也沒什麼啦!教學相長是真的,我在研究別人問題的同時,碰巧也會學到自己不知道的事,而且也是兼練功!甘之如飴啊!
反到是你們團隊要維持這個論壇的運作才是真的辛苦哩!
反到是你們團隊要維持這個論壇的運作才是真的辛苦哩!
ginse0727- 高級會員
- 文章總數 : 256
年齡 : 50
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 6785
威望值 : 500
發帖精華 : 1
注冊日期 : 2010-07-13
回復: [討論]請問有沒有人知道, 圖塊裡如果有1個MTEXT, VBA 可以修改其值嗎?
報告....小弟功力不夠還是沒能弄出來...汗..感覺上抓到的還是圖塊的定義屬性, 不是Mtext 的文字
提供下測試圖檔好了...
測試檔
能抓到裡頭的123字串改成456嗎?
avarAttributes = objBlockReference.GetAttributes 感覺上好像只會抓定 自定義的屬性..
程式碼
Function ReadBlockMTEXT(str As String, obj As AcadObject) As Variant
Dim avarAttributes As Variant
Dim intIndex As Integer
Dim objBlockReference As AcadBlockReference
Dim objAcadAttributeReference As AcadAttributeReference
'判斷是否為 Block 物件
If obj.ObjectName = "AcDbBlockReference" Then
'取得所選定的Block物件
Set objBlockReference = obj
'判斷是否有包含屬性
' If objBlockReference.HasAttributes Then
'取得屬性的陣列
avarAttributes = objBlockReference.GetAttributes
'從陣列中依序取出屬性物件
For intIndex = LBound(avarAttributes) To UBound(avarAttributes)
'取得屬性物件
Set objAcadAttributeReference = avarAttributes(intIndex)
'取得屬性物件的Tag屬性及值
If objAcadAttributeReference.ObjectName = "AcDbAttribute" Then
strShowMessage = objAcadAttributeReference.TagString + " " + objAcadAttributeReference.TextString
End If
Next intIndex
End If
End Function
提供下測試圖檔好了...
測試檔
能抓到裡頭的123字串改成456嗎?
avarAttributes = objBlockReference.GetAttributes 感覺上好像只會抓定 自定義的屬性..
程式碼
Function ReadBlockMTEXT(str As String, obj As AcadObject) As Variant
Dim avarAttributes As Variant
Dim intIndex As Integer
Dim objBlockReference As AcadBlockReference
Dim objAcadAttributeReference As AcadAttributeReference
'判斷是否為 Block 物件
If obj.ObjectName = "AcDbBlockReference" Then
'取得所選定的Block物件
Set objBlockReference = obj
'判斷是否有包含屬性
' If objBlockReference.HasAttributes Then
'取得屬性的陣列
avarAttributes = objBlockReference.GetAttributes
'從陣列中依序取出屬性物件
For intIndex = LBound(avarAttributes) To UBound(avarAttributes)
'取得屬性物件
Set objAcadAttributeReference = avarAttributes(intIndex)
'取得屬性物件的Tag屬性及值
If objAcadAttributeReference.ObjectName = "AcDbAttribute" Then
strShowMessage = objAcadAttributeReference.TagString + " " + objAcadAttributeReference.TextString
End If
Next intIndex
End If
End Function
蜻蜓草- 一般會員
- 文章總數 : 77
年齡 : 47
來自 : 南投
職業 : 工
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4894
威望值 : 0
注冊日期 : 2012-08-16
回復: [討論]請問有沒有人知道, 圖塊裡如果有1個MTEXT, VBA 可以修改其值嗎?
我看過你的圖塊了,因為圖塊中的123沒有建立任何屬性關聯,程式中抓不到這個值,像"NOT THIS"這個值,有標籤有值,就可以抓出來做修改,
當然要改也不是做不到,我的想法是把圖塊截到,然後炸開後找到群組裡的123這個值,做完修改後再還重建圖塊,但是光聽描述的過程,
就知道程式就沒那麼簡單了,而且圖檔中要是不只這一個圖塊,還得要改圖塊名稱,才不會影響到其他的圖塊.
建議最簡單的做法是,重新製作這個圖塊,把"123"也做成有標籤的屬性.這樣同一張圖裡才能存在擁有多個不同值的圖塊.
當然要改也不是做不到,我的想法是把圖塊截到,然後炸開後找到群組裡的123這個值,做完修改後再還重建圖塊,但是光聽描述的過程,
就知道程式就沒那麼簡單了,而且圖檔中要是不只這一個圖塊,還得要改圖塊名稱,才不會影響到其他的圖塊.
建議最簡單的做法是,重新製作這個圖塊,把"123"也做成有標籤的屬性.這樣同一張圖裡才能存在擁有多個不同值的圖塊.
ginse0727- 高級會員
- 文章總數 : 256
年齡 : 50
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 6785
威望值 : 500
發帖精華 : 1
注冊日期 : 2010-07-13
回復: [討論]請問有沒有人知道, 圖塊裡如果有1個MTEXT, VBA 可以修改其值嗎?
原本只是想如果可以直接取用到的話, 程式會比較簡單, 如果不能直接取用的話, 反而變更復雜...這部份暫時先不處理好了...哈~~, 少走了很多冤枉路。
感謝 ginse0727 兄~~
不過 使用過濾器 acSelectionSetAll 的問題還是試不出來..有空的話再幫忙解說下囉~
感謝 ginse0727 兄~~
不過 使用過濾器 acSelectionSetAll 的問題還是試不出來..有空的話再幫忙解說下囉~
蜻蜓草- 一般會員
- 文章總數 : 77
年齡 : 47
來自 : 南投
職業 : 工
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4894
威望值 : 0
注冊日期 : 2012-08-16
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章