Тема: про функцию eval

слушайте.
например у меня есть
Dim objLine as AcDbLine
Dim num as Integer
.....
s="If (objLine.Length <= 5) then " & vbCr & _
"num=num+1" & vbCr & _
"End If"
eval(s)
' выдает ошибку  VBA expression evaluation failed
почему?
что здесь неправильно?
If (objLine.Length <= 5) then
num=num+1
End If

Re: про функцию eval

s="If (objLine.Length <= 5) then " & vbCr & _
"num=num+1" & vbCrLf & _
"End If"
or
s="If (objLine.Length <= 5) then " & vbCr & _
"num=num+1"

Re: про функцию eval

Можно попробовать переменные объявить Public за пределами модуля. Мне это помогало.

Re: про функцию eval

С моей точки зрения, ф-ия EVAL на VBA - кривая. Не раз сталкивался с подобной проблемой ... Объявление переменных как Public действительно иногда помогает, но у меня все равно устойчивой работы не получилось. В конце концов мне все это надоело - и я написал свой EVAL (правда, с ограниченнмы количеством ф-ий)

Re: про функцию eval

ни VbCrLf, ни Public мне не помогли :)
я вот что хочу сделать
может знаете
есть строка, содержащая переменную типа  объекта
и сторока, содержащая имя свойства
например . в моем случае "objLine" и "Length"
как мне можно обратиться к свойству объекта таким образом?

Re: про функцию eval

или только имя свойства в виде строки

Re: про функцию eval

> kb-nn
В Вашем примере только определен тип переменной objLine. Функция Eval должна сработать, если под objLine будет пониматься реальный объект присвоенный при помощи Set.

Re: про функцию eval

такой объект разумеется есть.
но вот не работает.

Re: про функцию eval

Этот код только что работал:

Public objLine As AcadLine
'Dim objLine As AcDbLine
Public num As Integer
Sub test()
Dim moSpace As AcadModelSpace
Dim StartPoint(0 To 2) As Double
Dim EndPoint(0 To 2) As Double
Dim s As String
Set moSpace = ThisDrawing.ModelSpace
StartPoint(0) = 0
StartPoint(1) = 0
StartPoint(2) = 0
EndPoint(0) = 4
EndPoint(1) = 0
EndPoint(2) = 0
Set objLine = moSpace.AddLine(StartPoint, EndPoint)
s = vbNullString
num = 6
MsgBox num 'Показывает 6
s = "If objLine.Length <= 5 then num = num + 1"
Eval (s)
MsgBox num 'Показывает 7
End Sub

Что за объект AcDbLine? У меня такого в библиотеке нету.

Re: про функцию eval

Кажется, AcDbLine - это имя примитива. objLine.ObjectName="AcDbLine"

Re: про функцию eval

у меня тоже работает!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ура!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
но у меня два вопроса:
1) почему для If нет End If ????
2) почему после Then нет перехода на новую строку??????
а насчёт AcDbLine  это опечатка.
конечно же AcadLine.

Re: про функцию eval

если добавить  End If, и vbCrLf- работать перестает.

Re: про функцию eval

kb-nn пишет:

1) почему для If нет End If ????
2) почему после Then нет перехода на новую строку??????

Такой вариант допускается синтаксисом VB. Очень странно, что вы до сих пор об этом не знаете.

если добавить End If, и vbCrLf- работать перестает

Если нет ветки "Else", то такое добавление - синтаксически неправильно.

Re: про функцию eval

AcDbLine - это имя класса в базе данных чертежа.
Посмотрите, если у вас есть, Database Viewer

Re: про функцию eval

а насчёт AcDbLine это опечатка

Может быть опечатка - фрейдистская? И kb-nn перебежчик из ObjectARX?

Re: про функцию eval

в таком случае я бы не задавал таких глупых вопросов :)
и всё- таки я не понял.
а если у меня несколько операторов в If ?
нужны ли там vbCrLf  и End If ?
(Else  у меня нету)
все варианты перебрал- не получается......

Re: про функцию eval

> Leonid
При записи в одну строку End If можно не указывать.
При многострочной записи (в данном случае с vbCrLf) или вложенных операторах End If обязательно.

в таком случае я бы не задавал таких глупых вопросов :)

А вообще, Maxim T, конечно, прав: пересказывать на форуме азы о которых писано-переписано в ЛЮБОЙ книжке по VBA/VB иногда просто напрягает и вопросы о них выглядят странными.
Да и гораздо интереснее искать ответы на нестандартные вопросы, например, о Eval в VBA for AutoCAD...

Re: про функцию eval

В предыдущем моем сообщении следует читать > kb-nn (2005-01-14 16:19:29)

Re: про функцию eval

> brigval
Спасибо!

Re: про функцию eval

> kb-nn
Да, вот ещё, может, надо юзать VbCr вместо VbCrLf ? Попробуй !

Re: про функцию eval

Сейчас почитал начало ветки, ты с этого VbCr и начинал :))), так что может, сейчас вернуться ?

Re: про функцию eval

всё равно не работает....
в двух строчках заблудился.....
нет, там наверное дело в чем- то другом....

Re: про функцию eval

вы представляете, у меня в If два оператора.
если я пишу (через Eval) их оба в одном If. то не работает.
если же я сначала в If пишу первый оператор,
а в следующий If - второй, то все работает.
очень странно.
а такое может быть, чтоб eval не воспринимает первод строки, например?
а если честно, если без Eval, для после Then всегда следующий оператор пишу на новой строке, всегда пишу End If
(независимо от кол-ва операторов и наличия Else)
и никогда не получал сообщение об ошибке.
всегда все работло.

Re: про функцию eval

> kb-nn
Через двоеточие вообще все можно писать в одну строку. Правда, кажется, длина ее может быть не бесконечной. :)

Re: про функцию eval

это было моей первой мыслью