Paste the following code into excel VBA module.
Next add a folder named ‘support’ and put the dwg file that has all your dynamic blocks. Keep the ‘support’ folder in the same folder as the excel workbook. See this post on creating dynamic blocks https://pearlsnake.com/2019/05/20/creating-dynamic-blocks-in-autocad/ . I have also uploaded a folder called ‘support’ on github with the block https://github.com/HMTEngineering/excel-vba that can be used in this example.
Option Explicit
Sub Insert_block()
Dim acadDoc As Object
Dim acadApp As Object
Dim objBlockRef As AcadBlockReference
Dim FilePath As String
Dim strName As String
Dim insertionPoint(0 To 2) As Double
Dim pntPanel(0 To 2) As Double
Dim BlkAtts As Variant
'Check if AutoCAD application is open. If it is not opened create a new instance and make it visible.
On Error Resume Next
Set acadApp = GetObject(, "AutoCAD.Application")
acadApp.Visible = True
If acadApp Is Nothing Then
Set acadApp = CreateObject("AutoCAD.Application")
acadApp.Visible = True
End If
'Check (again) if there is an AutoCAD object.
If acadApp Is Nothing Then
MsgBox "Sorry, it was impossible to start AutoCAD!", vbCritical, "AutoCAD Error"
Exit Sub
End If
On Error GoTo 0
acadApp.WindowState = acMax
'If there is no active drawing create a new one.
On Error Resume Next
Set acadDoc = acadApp.Documents.Add
If Err.Number <> 0 Then
MsgBox "Could not get the AutoCAD application. Restart Autocad and try again"
End
End If
On Error GoTo 0
acadDoc.ActiveSpace = acModelSpace
FilePath = ThisWorkbook.Path & "\Support\"
strName = FilePath & "blocks.dwg" 'all sorts of blocks that you want to use can be added in this file
Set objBlockRef = acadDoc.ModelSpace.InsertBlock(insertionPoint, strName, 1, 1, 1, 0)
objBlockRef.Delete
pntPanel(0) = 0
pntPanel(1) = 0
Set objBlockRef = acadDoc.ModelSpace.InsertBlock(pntPanel, "Dyn_Rec", 1, 1, 1, 0)
BlkAtts = objBlockRef.GetDynamicBlockProperties
' Dim i As Long
' On Error Resume Next
' For i = 0 To UBound(BlkAtts)
' Debug.Print BlkAtts(i).Value & " " & i 'use this to figure out the position of each attribute
' Next i
' On Error GoTo 0
BlkAtts(0).Value = 25# 'bottom length
BlkAtts(2).Value = 30# 'left length
BlkAtts(4).Value = 20# 'right length
BlkAtts(6).Value = 0# ' text x position
BlkAtts(7).Value = 13# 'text y position
BlkAtts(8).Value = 3.14 / 2 'text rotation
BlkAtts(10).Value = 2# 'text height
BlkAtts = objBlockRef.GetAttributes
BlkAtts(0).textString = "BB1"
acadDoc.Regen acAllViewports
acadApp.ZoomExtents
End Sub
It can be tricky to figure out the position of each attribute so use the code in yellow to figure out the position. Bring up the immediate window with ctrl+G to see what was printed. Note that Debug.Print BlkAtts(i).tagstring & ” ” & i can also be used.



Thank very much Jeremy, I was looking for this info for a few months. it worked perfectly.
LikeLike
I am very happy it worked for you, hope all is well!
LikeLike