Страница 1 из 1

Добавлено: 17 мар 2004, 13:48
Absurd
Бред какой-то... У меня метод EOF возвращает Variant/Bool, который возвращает Variant/True если конец достигнут и Variant/False если таки не достигнут...
Проблема в том, что это цикл почему-то выполняется бесконечно, поскольку Not (ls.EOF) возвращает True даже если ls.EOF равен False =(...

Код: Выделить всё

Sub test()
Dim ls
Set ls = CreateObject("LogScanner.Object.1")
ls.First
While Not (ls.EOF)
     Range(ls.Range).Value = ls.Text
     ls.Next
Wend
End Sub

Добавлено: 17 мар 2004, 14:02
AiK
Absurd, если в ls нет элементов, то цикл твой будет вечен. Если я конечно правильно логику EOF, BOF понимаю.

Добавлено: 17 мар 2004, 14:06
chur
поскольку Not (ls.EOF) возвращает True даже если ls.EOF равен False =(...
Not(False)=True

Добавлено: 17 мар 2004, 18:08
Absurd
Проблема решена выражением
while ls.EOF = False
но почему Not (ls.EOF) возвращает True даже если ls.EOF равен True я так и не понял

Добавлено: 17 мар 2004, 18:12
Absurd
chur писал(а): Not(False)=True
Я ошибся в постинге ... У меня получалось, что Not(True)=True, причем достоверно - В дебагере смотрел

Добавлено: 18 мар 2004, 03:11
Naeel Maqsudov
Absurd, это абсурд. ;)
Неверю.
А кто такой logscaner.object?

Добавлено: 18 мар 2004, 10:31
Absurd
Absurd, это абсурд.
Неверю.
Тем не менее факт.
while Not (ls.EOF) - не работает
while ls.EOF = False - работает как надо
А кто такой logscaner.object?
Мой ActiveX объект с дуальным интерфейсом для скриптинга.
Возвращает только OLE Automation - совместимые занчения.
Свойство EOF имеет тип VARIANT. Таг типа равен VT_BOOL.

Добавлено: 18 мар 2004, 16:29
chur

Код: Выделить всё

Dim b As Variant
b = 1 
If Not (b) Then
  MsgBox "NOT(" & b & ") IS TRUE"
Else
  MsgBox "NOT(" & b & ") IS FALSE"
End If
If b = False Then
  MsgBox "(" & b & "=False) IS TRUE"
Else
  MsgBox "(" & b & "=False) IS FALSE"
End If
В VB значение True = -1(минус 1). При использовании значения 1 (плюс 1) в качестве True могут появлятся подобные непонятки. Посмотри как работает код с разными значениями b: (-1, 0, 1).

Добавлено: 19 мар 2004, 18:18
Absurd
BTW а что такое OATRUE/OAFALSE? Используются ли они именно для OLE Automation и Visual Basic'а ?