Тема: Проставка блоков по координатам из Excel+значения ячеек в атрибуты
Люди добрые, помогите пожалуйсто решить проблемку.
Сразу предупрежу что я начинающий в макросах.
Появилась потребность в макросе для Автокада под Excel-ем, который создаёт определённый блок с четырьмя атрибутами в Акаде и потом проставляет его по координатам из excela которые находятся в столбцах D;E;F присваивая значения из столбцов B;C;H;J соответственно 1;2;3;4 атрибутам. Вот вроде что то удалось смастерить до момента проставки блока по координатам включительно. только не могу заставить значения из столбцов B;C;H;J вписывать в значения атрибутов.Можете подсказать как это сделать?
И вот ещё две мелочи на которых я “застрял”: При создании блока идёт запрос о масштабе блока и если несколько раз запустим макрос с разными значениями масштаба, то макрос будет вставлять актуальный блок+все предыдущие блоки(с предыдущими масштабами) как сделать чтобы роставлял блоки только с актуальным масштабом?
При создании блока был создан и использован стиль текста “OKU” с высотой текста 2 и коэф.ширины 0.7 только почемуто в блоке всавляет мне текс с коэф.шир. 1...Если после проставки блока, вручную изменить стиль атрибута на “standart” и обратно на “OKU” то текст появляется с правильным коэф.ширины 0.7...
Буду очень благодарен если кто нибудь поможет решить ети вопросы.
Option Explicit
Public Sub ExportBlocks()
Dim vertlist() As Double
Dim vertlist1() As Double
Dim vertlist3(0 To 2) As Double
Dim objApp As AcadApplication
Dim objDoc As AcadDocument
Dim RowCount As Integer
Dim RowCount1 As Integer
Dim strPrmpt As String
Dim intCnt As Integer
Dim intcnt1 As Integer
Dim objCell As Object
Dim objSheet As Worksheet
Dim wykres_1 As AcadLayer
Dim i As Integer
Dim blok1 As AcadBlock
Dim pktwst(0 To 2) As Double
Dim poli As AcadPolyline
Dim pkt(0 To 29) As Double
Dim nowalin As AcadLine
Dim blokref As AcadBlockReference
Dim blokref1 As AcadBlockReference
Dim zazn As AcadSelectionSet
Dim alayer As String
Dim textst As AcadTextStyle
Dim textObj As AcadText
Dim text1 As String
Dim text2 As String
Dim text3 As String
Dim insPoint1(0 To 2) As Double
Dim insPoint2(0 To 2) As Double
Dim insPoint3(0 To 2) As Double
Dim atr As AcadAttribute
Dim atr1 As AcadAttribute
Dim atr2 As AcadAttribute
Dim atr3 As AcadAttribute
Dim mode As Long
Dim prompt As String
Dim tag As String
Dim prompt1 As String
Dim tag1 As String
Dim prompt2 As String
Dim tag2 As String
Dim prompt3 As String
Dim tag3 As String
Dim height As Double
Dim ap(0 To 2) As Double
Dim ap1(0 To 2) As Double
Dim ap2(0 To 2) As Double
Dim ap3(0 To 2) As Double
Dim sk As Integer
On Error GoTo Err_Control
On Error GoTo Koniec
Set objSheet = ThisWorkbook.Sheets(1)
Set objApp = GetObject(, "AutoCAD.Application")
Set objDoc = objApp.ActiveDocument
sk = objDoc.Utility.GetInteger("Input scale for block")
pktwst(0) = 10 * sk * 0.001
pktwst(1) = 3 * sk * 0.001
pktwst(2) = 0
Set textst = objDoc.TextStyles.Add("OKU")
textst.height = 2 * sk * 0.001
textst.Width = 0.7
textst.fontFile = "simplex.shx"
objDoc.ActiveTextStyle = textst
text1 = "Nr="
text2 = "RG"
text3 = "L="
insPoint1(0) = 0.25 * sk * 0.001
insPoint1(1) = 3.55 * sk * 0.001
insPoint1(2) = 0
insPoint2(0) = 0.25 * sk * 0.001
insPoint2(1) = 0.45 * sk * 0.001
insPoint2(2) = 0
insPoint3(0) = 10.3 * sk * 0.001
insPoint3(1) = 0.45 * sk * 0.001
insPoint3(2) = 0
pkt(0) = 0
pkt(1) = 0
pkt(2) = 0
pkt(3) = 20 * sk * 0.001
pkt(4) = 0
pkt(5) = 0
pkt(6) = 20 * sk * 0.001
pkt(7) = 6 * sk * 0.001
pkt(8) = 0
pkt(9) = 0
pkt(10) = 6 * sk * 0.001
pkt(11) = 0
pkt(12) = 0
pkt(13) = 0
pkt(14) = 0
pkt(15) = 0
pkt(16) = 3 * sk * 0.001
pkt(17) = 0
pkt(18) = 20 * sk * 0.001
pkt(19) = 3 * sk * 0.001
pkt(20) = 0
pkt(21) = 20 * sk * 0.001
pkt(22) = 6 * sk * 0.001
pkt(23) = 0
pkt(24) = 10 * sk * 0.001
pkt(25) = 6 * sk * 0.001
pkt(26) = 0
pkt(27) = 10 * sk * 0.001
pkt(28) = 0
pkt(29) = 0
height = 2 * sk * 0.001
mode = acAttributeModeNormal
ap(0) = -5.65 * sk * 0.001
ap(1) = 0.55 * sk * 0.001
ap(2) = 0
ap1(0) = 0.3 * sk * 0.001
ap1(1) = 0.55 * sk * 0.001
ap1(2) = 0 * 0.001
ap2(0) = -7.05 * sk * 0.001
ap2(1) = -2.55 * sk * 0.001
ap2(2) = 0
ap3(0) = 2.73 * sk * 0.001
ap3(1) = -2.55 * sk * 0.001
ap3(2) = 0
tag = "Nr pala": prompt = "Nr pala"
tag1 = "Przekr. pala": prompt1 = " "
tag2 = "Rzędna gł.": prompt2 = " "
tag3 = "Dł.pala": prompt3 = " "
Set blok1 = objDoc.Blocks.Add(pktwst, "tabelka1")
Set poli = blok1.AddPolyline(pkt)
Set textObj = blok1.AddText(text1, insPoint1, 2 * sk * 0.001)
Set textObj = blok1.AddText(text2, insPoint2, 2 * sk * 0.001)
Set textObj = blok1.AddText(text3, insPoint3, 2 * sk * 0.001)
Set atr = blok1.AddAttribute(height, mode, prompt, ap, tag, "123")
Set atr1 = blok1.AddAttribute(height, mode, prompt1, ap1, tag1, "pal30x30")
Set atr2 = blok1.AddAttribute(height, mode, prompt2, ap2, tag2, "999,99")
Set atr3 = blok1.AddAttribute(height, mode, prompt3, ap3, tag3, "99,9")
Set blokref = objDoc.ModelSpace.InsertBlock(pktwst, "tabelka1", 1#, 1#, 1#, 0)
blokref.Update
RowCount = objSheet.UsedRange.Rows.Count
ReDim vertlist((RowCount * 2) - 1)
RowCount = 1
alayer = ("0")
objDoc.ActiveLayer = objDoc.Layers.Item(alayer)
For intCnt = LBound(vertlist) To UBound(vertlist) Step 2
vertlist(intCnt) = objSheet.Cells(RowCount, 2).Value
vertlist(intCnt + 1) = objSheet.Cells(RowCount, 3).Value
RowCount = RowCount + 1
Next
RowCount1 = objSheet.UsedRange.Rows.Count
ReDim vertlist1((RowCount1 * 2) - 1)
RowCount1 = 1
For intcnt1 = LBound(vertlist1) To UBound(vertlist1) Step 2
vertlist1(intcnt1) = objSheet.Cells(RowCount1, 8).Value
vertlist1(intcnt1 + 1) = objSheet.Cells(RowCount1, 10).Value
RowCount1 = RowCount1 + 1
Next
For i = 1 To RowCount - 1
vertlist3(0) = objSheet.Cells(i, 4).Value
vertlist3(1) = objSheet.Cells(i, 5).Value
vertlist3(2) = 0
Set wykres_1 = objDoc.Layers.Add("OKU-tabelka-pale")
wykres_1.Color = acYellow
objDoc.ActiveLayer = wykres_1
Set blokref1 = objDoc.ModelSpace.InsertBlock(vertlist3, "tabelka1", 1#, 1#, 1#, 0)
blokref1.Update
Next
objDoc.Regen acActiveViewport
Koniec:
Set blokref = Nothing
Exit_Here:
If Not objApp Is Nothing Then
Set objApp = Nothing
Set objDoc = Nothing
End If
Exit Sub
Err_Control:
MsgBox Err.Description
Resume Exit_Here
End Sub