Author |
Topic |
|
WaW
10 Posts |
Posted - 06/26/2008 : 12:43:43
|
Почему то в функциях VBA нет IsNothing... Или определение несуществования шейпа производитcя с помощью другой функции? |
|
zhuravsky
Russia
115 Posts |
Posted - 06/26/2008 : 13:45:04
|
Ну, почему же нету:
if Shape is Nothing then <...> else <...> end if
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 06/26/2008 : 13:55:17
|
А это не функция :) Это оператор. |
|
|
WaW
10 Posts |
Posted - 06/27/2008 : 12:39:29
|
Тогда что неправильно
For i = 1 To ActiveDocument.Pages.Count
If ActiveDocument.Pages(i).Shapes("Conductor.64") Is Nothing Then
Else
If ActiveDocument.Pages(i).Shapes("Conductor.64").Shapes("Cond_main").Text = "" Then
connect_flag(2) = True
Exit For
End If
End If
Next
возникает ошибка на строчке
If ActiveDocument.Pages(i).Shapes("Conductor.64") Is Nothing Then
шейп "Conductor.64" находится на второй странице, ошибка возникает прии обработке первой страницы |
|
|
ukreni
Ukraine
35 Posts |
Posted - 06/27/2008 : 12:51:37
|
А так не подойдет?
Sub q() Dim p As Page Dim sh As Shape
Set p = ActiveDocument.Pages(2) For Each sh In p.Shapes If sh.Name = "Conductor.64" Then MsgBox "OK" Next End Sub |
Edited by - ukreni on 06/27/2008 12:53:47 |
|
|
WaW
10 Posts |
Posted - 06/27/2008 : 13:03:07
|
quote: Originally posted by ukreni
А так не подойдет?
Sub q() Dim p As Page Dim sh As Shape
Set p = ActiveDocument.Pages(2) For Each sh In p.Shapes If sh.Name = "Conductor.64" Then MsgBox "OK" Next End Sub
так это конечно пройдет, но представь, что шейпов СОТНИ на странице, а страниц ДЕСЯТКИ... |
|
|
ukreni
Ukraine
35 Posts |
Posted - 06/27/2008 : 13:20:51
|
Тогда, надеюсь, что так подойдет ...
Sub w() Dim p As Page Dim sh As Shape
For i = 1 To ActiveDocument.Pages.Count Set p = ActiveDocument.Pages(i) Set sh = p.Shapes("sheet.1") If sh Is Nothing Then Else MsgBox "" End If Next End Sub |
|
|
ukreni
Ukraine
35 Posts |
Posted - 06/27/2008 : 13:23:35
|
А лучше так
Sub w() Dim p As Page Dim sh As Shape
For i = 1 To ActiveDocument.Pages.Count Set p = ActiveDocument.Pages(i) Set sh = p.Shapes("sheet.1") If Not sh Is Nothing Then MsgBox "" Next End Sub |
|
|
Tumanov
Russia
1198 Posts |
Posted - 06/27/2008 : 15:09:37
|
quote: возникает ошибка на строчке If ActiveDocument.Pages(i).Shapes("Conductor.64") Is Nothing Then
1. Shapes("Conductor.64") должен вернуть шейп. Но если такого шейпа нет, то возникнет ошибка. От нее нужно защищаться - расставить On Error Resume Next и On Error GoTo 0. 2. Если произойдет ошибка в случае Set sh =..., то sh не будет указывать на Nothing. Он просто останется в прежнем состоянии. Значит если на первой странице шейп был найден, то при проверке на второй странице (в случае ошибки) sh будет указывать на тот же шейп! Поэтому перед проверкой следует выполнить Set sh = Nothing. В целом конструкция должна быть примерно такой: Dim sh As Shape 'Set sh = ActivePage.Shapes(1) 'это для иллюстрации возможной ошибки For i = 1 To ActiveDocument.Pages.Count On Error Resume Next Set sh = Nothing Set sh = ActiveDocument.Pages(i).Shapes("Conductor.64") If sh Is Nothing Then Else MsgBox "Нашелся" End If On Error GoTo 0 Next
|
|
|
WaW
10 Posts |
Posted - 06/27/2008 : 15:17:04
|
quote: Originally posted by Tumanov 1. Shapes("Conductor.64") должен вернуть шейп. Но если такого шейпа нет, то возникнет ошибка. От нее нужно защищаться - расставить On Error Resume Next и On Error GoTo 0.
Жаль что только так... Ну я это и сам прокумекал... Думал, что есть не такой радикальный способ.
Спасибо всем за помощь. |
|
|
ESV
Ukraine
21 Posts |
Posted - 08/18/2008 : 17:45:18
|
Для проверки существования шейпа использую следующую процедуру:
Public Function ShapeExist(visParent As Variant, shapeName As String) As Boolean
Dim tempShape As Visio.Shape
On Error GoTo ERROR
Set tempShape = visParent.Shapes(shapeName)
ShapeExist = True
Set tempShape = Nothing
Exit Function
ERROR:
ShapeExist = False
End Function
Тогда в текстк основной программы, проверка делается проще простого, например:
Sub Main()
If ShapeExist(ActivePage, "LINE1") Then
MsgBox "EXIST"
Else
MsgBox "NOTHING"
End If
End Sub |
Edited by - ESV on 08/18/2008 17:46:55 |
|
|
|
Topic |
|