Здравствуйте. Подскажите с решением проблемы. Есть таблица C5:K10 В ней - в несколько слоев идут описания Векторов. Каждый вектор - представлен своим названием и действительным и мнимым числами.
Возникает вопрос - а где находятся координаты исходного положения вектора. Ответ таков - все векторы разбиты по уровням. Вектора из первого уровня - начинаются из нулевой координаты. Ее символизирует собой фигура "Нулевая координата". Вектора из второго уровня - начинаются там где закончились вектора из первого уровня. Вектора из третьего уровня - начинаются там где закончились вектора из второго уровня.
Насчет чисел (действительных и мнимых) приведенных в таблице - они условные. Число 1 из таблицы - равно 50 пойнтам на листе.
Подскажите - как макросом нарисовать эти вектора на листе - по таблице ?
Здравствуйте. Подскажите с решением проблемы. Есть таблица C5:K10 В ней - в несколько слоев идут описания Векторов. Каждый вектор - представлен своим названием и действительным и мнимым числами.
Возникает вопрос - а где находятся координаты исходного положения вектора. Ответ таков - все векторы разбиты по уровням. Вектора из первого уровня - начинаются из нулевой координаты. Ее символизирует собой фигура "Нулевая координата". Вектора из второго уровня - начинаются там где закончились вектора из первого уровня. Вектора из третьего уровня - начинаются там где закончились вектора из второго уровня.
Насчет чисел (действительных и мнимых) приведенных в таблице - они условные. Число 1 из таблицы - равно 50 пойнтам на листе.
Подскажите - как макросом нарисовать эти вектора на листе - по таблице ?Glass4217
Sub draw() For Each Mycell In Range("c5:c10,f5:f10,i5:i10") If Mycell <> "" Then Call DrawFromBase(Mycell.Value, Mycell.Offset(, 1), Mycell.Offset(, 2), Getline(Left(Mycell, Len(Mycell) - 2))) End If Next End Sub Sub DrawFromBase(Name As String, Re As Double, Im As Double, ParrentLine As Shape) Dim x0 As Double, y0 As Double If ParrentLine Is Nothing Then x0 = ShiftX: y0 = ShiftY Else With ParrentLine x0 = .Left + IIf(.HorizontalFlip, 0, .Width) y0 = .Top + IIf(.VerticalFlip, 0, .Height) End With End If Call DrawLine(Name, x0 - ShiftX, ShiftY - y0, Re, Im) End Sub
Function Getline(LineName As String) As Shape Dim MyShape As Shape For Each MyShape In ActiveSheet.Shapes If MyShape.Name = LineName Then Set Getline = MyShape Exit For End If Next End Function
Sub DrawLine(Name As String, x0 As Double, y0 As Double, x1 As Double, Y1 As Double) Dim DLine As Shape Set DLine = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _ ShiftX + x0, ShiftY - y0, _ ShiftX + x0 + x1 * Scal, ShiftY - y0 - Y1 * Scal) DLine.Name = Name With DLine.Line .Visible = msoTrue .Weight = 3 .EndArrowheadStyle = msoArrowheadTriangle .EndArrowheadLength = msoArrowheadLong .EndArrowheadWidth = msoArrowheadWide End With End Sub
Sub draw() For Each Mycell In Range("c5:c10,f5:f10,i5:i10") If Mycell <> "" Then Call DrawFromBase(Mycell.Value, Mycell.Offset(, 1), Mycell.Offset(, 2), Getline(Left(Mycell, Len(Mycell) - 2))) End If Next End Sub Sub DrawFromBase(Name As String, Re As Double, Im As Double, ParrentLine As Shape) Dim x0 As Double, y0 As Double If ParrentLine Is Nothing Then x0 = ShiftX: y0 = ShiftY Else With ParrentLine x0 = .Left + IIf(.HorizontalFlip, 0, .Width) y0 = .Top + IIf(.VerticalFlip, 0, .Height) End With End If Call DrawLine(Name, x0 - ShiftX, ShiftY - y0, Re, Im) End Sub
Function Getline(LineName As String) As Shape Dim MyShape As Shape For Each MyShape In ActiveSheet.Shapes If MyShape.Name = LineName Then Set Getline = MyShape Exit For End If Next End Function
Sub DrawLine(Name As String, x0 As Double, y0 As Double, x1 As Double, Y1 As Double) Dim DLine As Shape Set DLine = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _ ShiftX + x0, ShiftY - y0, _ ShiftX + x0 + x1 * Scal, ShiftY - y0 - Y1 * Scal) DLine.Name = Name With DLine.Line .Visible = msoTrue .Weight = 3 .EndArrowheadStyle = msoArrowheadTriangle .EndArrowheadLength = msoArrowheadLong .EndArrowheadWidth = msoArrowheadWide End With End Sub