All Forums
 Категория Visio
 Форум Вопросы и ответы
 Глючит скрипт замены шейпа
Author Previous Topic Topic Next Topic  

bdfy

Belarus
267 Posts

Posted - 06/11/2010 :  23:00:56
выдает такую вот ошибку
"Microsoft Visual Basic
Run-time error '-2032464666 (86db0ce6)':
An exception occurred."

quote:
'этот скрипт заменяет простые линии на сматршейп нужный
Private Sub Document_ShapeAdded(ByVal vsoShape As Visio.IVShape)

geom_c = vsoShape.GeometryCount 'число секций
geom1_r = vsoShape.RowCount(visSectionFirstComponent) 'рядов в секции


If Not ActivePage.name = "исх. схема" Then Exit Sub

Dim vsoMaster As Visio.Master
Set vsoMaster = vsoShape.Master

Dim vsoPage As Visio.Page

Dim vsoBegX As Object
Dim vsoBegY As Object
Dim vsoEndX As Object
Dim vsoEndY As Object
Dim vsoWidth As Object

Dim strBowCell As String
Dim strBowFormula As String
Dim intIndex As Integer
Dim intCounter As Integer
Dim vsoLine As Object

'Set vsoCell to the Scratch.X1 cell and set its formula.
Set vsoBegX = vsoShape.Cells("BeginX")
Set vsoBegY = vsoShape.Cells("BeginY")
Set vsoEndX = vsoShape.Cells("EndX")
Set vsoEndY = vsoShape.Cells("EndY")
Set vsoWidth = vsoShape.Cells("Width")
Set vsoWidth = vsoShape.Cells("Width")

If geom_c = 1 And geom1_r = 3 Then 'линия
' vsoShape.CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginX).FormulaU = vsoBegX & " mm"
' Set vsoLine = Drop(ActiveDocument.Masters.ItemU("line"), 0, 0)
Set vsoLine = Application.ActiveWindow.Page.Drop(ActiveDocument.Masters.ItemU("lineP2"), 0, 0)
Debug.Print vsoLine
' expression.Drop(ObjectToDrop, xPos, yPos)
vsoLine.CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginX).FormulaU = vsoBegX
vsoLine.CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginY).FormulaU = vsoBegY
vsoLine.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX).FormulaU = vsoEndX
vsoLine.CellsSRC(visSectionObject, visRowXForm1D, vis1DEndY).FormulaU = vsoEndY

Set vsoConnects = vsoShape.Connects
For intCounter = 1 To vsoConnects.Count

Set vsoConnect = vsoConnects(intCounter)
Set vsoConnectTo = vsoConnect.ToSheet

' Set Gluecell = vsoLine.CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginX)

' Gluecell.GlueTo vsoConnectTo.CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX)
'Print the name of the shape the
'Connect object connects to.
' MsgBox vsoConnectTo

Next intCounter

' MsgBox vsoShape.Connects(0).ToSheet.NameID
'MsgBox "test " & Round(vsoWidth * 25.4, 1)
'Get the Master property of the shape.
vsoShape.Delete
ElseIf Left(vsoShape.name, 2) = "NY" Then
num = GetmaxNum("NY", "_VisDM_NY") + 1
If num <= 7 Then
vsoShape.Cells("Prop._VisDM_NY") = num
If num = 1 Or num = 7 Then vsoShape.Cells("Prop._VisDM_type") = 1
Debug.Print num
End If
End If


End Sub

" vsoLine.CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginX).FormulaU = vsoBegX" вот на этой строке падает. раньше (еще неделю назад) работал как часики... чего изменилось ума не приложу
перенес в отдельный файл - все равно глючит. может кто запустить/протестировать ?
рисуете линию - она должна на шейп заменятся
по ссылке vsd
http://rapidshare.com/files/397980648/Drawing2.vsd.html

Tumanov

Russia
1198 Posts

Posted - 06/12/2010 :  05:46:08
Я не понимаю, как это могло работать.
Ошибка в том, что Вы переменной типа Long пытаетесь присвоить значение типа Object.
Чтобы заработало, нужно сделать следующее:
1. Объявлено Dim vsoBegX As Object. Это надо убрать.
2. Вместо
Set vsoBegX = vsoShape.Cells("BeginX")
написать просто
vsoBegX = vsoShape.Cells("BeginX")
3. Не лезть в формулу, а присваивать так
vsoLine.CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginX) = vsoBegX
----------
P.S. Кажется понял... :)
У Вас раньше было неявное преобразование в строку
.FormulaU = vsoBegX & " mm"
В таком сочетании может и работало.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 06/12/2010 :  08:44:04
quote:
3. Не лезть в формулу, а присваивать так
+
так и переделал. заработало. но почему ж блин работало целый год...
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 06/12/2010 :  10:19:50
Где-нибудь была строчка с миллиметрами, которая заставляла VBA преобразовывать переменную в строку. Потом эту строчку стерли. У VBA пропал повод для преобразования и он стал подсовывать Visio другой тип данных.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)