I have an error in my button click, and I can’t figure out how to resolve it.
This is my code:
if (ovElements.item(i).name = 'add') and
(ovElements.item(i).type = 'button') and
(ovElements.item(i).Value = ' + ') then
ovElements.item(i).Click;
This is the markup:
<td width="20" align="left"><input class="button" style="width: 30px;"
name="add" value=" + " onclick="addLvl();" type="button"></td>
And it gives this error:
Invalid Variant Operation Error
What did I do wrong?
Brandon
68.4k30 gold badges194 silver badges223 bronze badges
asked Aug 14, 2009 at 19:42
2
Just a guess:
ovElements.item(i).Value is probably a Variant. If a variant contains a null value you will get that error when you compare it to a string.
Make sure ovElements.item(i) doesn’t contain a null value before comparing it.
answered Aug 14, 2009 at 20:05
KlugeKluge
3,5573 gold badges24 silver badges21 bronze badges
You can save «ovElements.item(i)» to a local variable and then split your code into multiple line.
obj = ovElements.item(i);
if obj <> nil then
try
if obj.name = 'add' then
if obj.type = 'button' then
if obj.value = ' + ' then
obj.click;
except
end;
In this way you can see which line causes this problem.
answered Aug 15, 2009 at 6:08
stanleyxu2005stanleyxu2005
8,05114 gold badges58 silver badges93 bronze badges
It means an operation on a variant which is executed is invalid. This happens, for example, when a variant containing some text is divided by an integer. Clearly this cannot work, but since the compiler can’t check this, it is a runtime error.
Use a temporary variable for the 3 parts in your if statement to see better on which line the error is raised. Then inspect what the values are and what the invalid operation is.
w5m
2,2863 gold badges34 silver badges46 bronze badges
answered Aug 14, 2009 at 20:03
Lars TruijensLars Truijens
42.7k6 gold badges124 silver badges141 bronze badges
Причина может быть, например, такого характера:
Delphi | ||
|
Forrest_1, нужно бОльший участок кода посмотреть. Где объявлена переменная Word? В каком месте выполняются строки, показанные в заглавном посте темы?
И плохо, что имя у переменной — Word. Потому, что этим словом в Delphi назван беззнаковый двухбайтный целочисленный тип. И эта переменная в своей области видимости этот тип перекрывает. Ошибка не по этой причине возникает, но код должен быть построен грамотно и не создавать дополнительных проблем.
Добавлено через 2 минуты
Имя переменной можно поменять, например, на wdApp (сокращение от Word Application).
Excel выдает ошибку «Invalid variant operation»
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Junior Рейтинг (т): нет |
Добрый день такая проблема при выполнении в Delphi следующего кода, происходит ошибка «Invalid variant operation»: var excel: variant; begin WBk:=Excel.WorkBooks.Open(FileExcel); sum:=0; if Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1, 4]=Excel.ActiveWorkBook.WorkSheets[2].Cells[2, 2] and Сообщение отредактировано: bas_sanya — 16.05.08, 07:03 |
Romkin |
|
Скорее всего в одной из ячеек у тебя не число |
Albinos_X |
|
Full Member Рейтинг (т): 16 |
да и смотри чтоб ячейка не была пустой… |
GeForce |
|
На сколько я могу судить по своему опыту ты сдорово портачишь. procedure TFunctionBase.SheetInvestorSave(Investor: TInvestorWorking); end; Investor. — это типизированная переменная. Все поля в основном string function TFunctionBase.GetSheet(i: Integer): Variant; //Получение нужного листа рабочей книги. Я работаю через сервера автоматизации. Там методы видны. Пишут, что более универсальный способ. Либо есть еще доступ к ячейкам через метод Item[row,Column] помоему свойство листа. |
bas_sanya |
|
Junior Рейтинг (т): нет |
Спасибо большое,за объяснения, теперь мне все понятно |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Система, Windows API
- Следующая тема
[ Script execution time: 0,0260 ] [ 16 queries used ] [ Generated: 4.06.23, 02:59 GMT ]
← →
lewka-serdceed
(2008-04-16 15:10)
[0]
Извините опять за беспокойство, я опять столкнулся с Ошибка «Invalid variant operation». Но все вроде как надо переменная определена и ей присвоена таблица. Я пытаюсь задать стиль линии, у меня появляется опять эта ошибка. Все данные у меня попадают в таблицу, а линии не могу задать.
часть кода:
w:variant;
w.ActiveDocument.Tables.item(1).Cell(StringGrid1.RowCount,1).Borders.item(-1).LineStyle.item(1);
← →
tesseract ©
(2008-04-16 15:14)
[1]
← →
lewka-serdceed
(2008-04-16 15:17)
[2]
нет. В коде w:variant прописано
← →
Сергей М. ©
(2008-04-16 15:43)
[3]
> lewka-serdceed (16.04.08 15:17) [2]
Вот же твоя ветка
http://delphimaster.net/view/2-1208282390/
← →
lewka-serdceed
(2008-04-16 15:49)
[4]
в ветке http://delphimaster.net/view/2-1208282390/
я разобрался. но здесь то все переменные определены.
← →
Dennis I. Komarov ©
(2008-04-16 15:51)
[5]
> [4] lewka-serdceed (16.04.08 15:49)
см [1]
← →
Сергей М. ©
(2008-04-16 15:52)
[6]
> здесь то все переменные определены.
>
И там тоже определены.
Не были бы определены — код не мог бы быть скомпилирован.
А ошибка Invalid variant operation — это ошибка времени выполнения, а не времени компиляции.
Ну раз разобрался, то показывай как ты разобрался ..
← →
lewka-serdceed
(2008-04-16 15:55)
[7]
вот полный код. подскажите что не так пожалуйста.
var stroka:integer;
begin
if CheckBox4.Checked=true then begin summa:=0;
w:=CreateOleObject(«word.application»);
w.visible:=true;
w.Documents.add(«C:Вторая сторона приложения к диплому.doc»);
w.ActiveDocument.Tables.item(1).Cell(StringGrid1.RowCount,1).Borders.item(-1).LineStyle.item(1);
end;end;
← →
Сергей М. ©
(2008-04-16 15:59)
[8]
> lewka-serdceed (16.04.08 15:55) [7]
Ну и какой результат ты ожидал от выполнения строки
> w.ActiveDocument.Tables.item(1).Cell(StringGrid1.RowCount,
> 1).Borders.item(-1).LineStyle.item(1);
?
← →
lewka-serdceed
(2008-04-16 16:04)
[9]
w.ActiveDocument.Tables.item(1).Cell(StringGrid1.RowCount,1).Borders.item(-1).LineStyle.item(1);
А что в этой строке не так?
← →
Сергей М. ©
(2008-04-16 16:10)
[10]
> lewka-serdceed (16.04.08 16:04) [9]
Ты не ответил на вопрос ..
← →
lewka-serdceed
(2008-04-16 16:14)
[11]
В строке w.ActiveDocument.Tables.item(1).Cell(StringGrid1.RowCount,1).Borders.item(-1).LineStyle.item(1);
я пытаюсь задать линию верхней грани ячейки таблицы.
← →
Сергей М. ©
(2008-04-16 16:15)
[12]
> пытаюсь задать линию верхней грани ячейки таблицы
Где
конкретно ?
← →
tesseract ©
(2008-04-16 16:17)
[13]
> нет. В коде w:variant прописано
А ты правильно пропиши. Variant у Delphi и в Com это две разницы.
← →
lewka-serdceed
(2008-04-16 16:22)
[14]
w.ActiveDocument.Tables.item(1).Cell(StringGrid1.RowCount,1).Borders.item(-1).LineStyle.item(1);
в документе, который открылся, я нахожу таблицу Tables.item(1) затем ячейку Cell(StringGrid1.RowCount,1), потом определяю какую линию я буду менять (верхнюю) Borders.item(-1), и тип линии LineStyle.item(1).
или я не правильно тип линии прописываю? подскажите если это так.
← →
Сергей М. ©
(2008-04-16 16:27)
[15]
> или я не правильно тип линии прописываю?
А как тоже самое выглядит в записанном макросе ?
← →
lewka-serdceed
(2008-04-16 16:45)
[16]
у меня нет макросов. я просто вставляю из StrinпGrid в готовую таблицу в шаблоне.
← →
lewka-serdceed
(2008-04-16 16:55)
[17]
Подскажите мне пожалуйста как мне изменить тип линии в ячейке.
← →
Johnmen ©
(2008-04-16 17:23)
[18]
> в документе, который открылся, я нахожу таблицу
1. Ты уверен, что желаемый документ «открылся»?
2. Ты уверен, что в документе есть таблица с указанным индексом?
Я это к тому, что за прошедшее с первого поста на эту тему время можно уже было изучить основные принципы и приемы работы с Вордом. В инете примеров, как грязи…
← →
umbra ©
(2008-04-16 18:13)
[19]
> w.ActiveDocument.Tables.item(1).Cell(StringGrid1.RowCount,
> 1).Borders.item(-1).LineStyle.item(1);uses Word97
w.ActiveDocument.Tables[1].Cell(1,1).Borders[wdBorderTop].LineStyle := wdLineStyleDouble
← →
Сергей М,
(2008-04-16 18:17)
[20]
> ewka-serdceed (16.04.08 16:45) [16]
>
> у меня нет макросов
У тебя нет , а Ворда есть.
ты разве не из Ворда этот код содрал бездумно ?)
← →
lewka-serdceed
(2008-04-16 21:02)
[21]
uses Word97
w.ActiveDocument.Tables[1].Cell(1,1).Borders[wdBorderTop].LineStyle := wdLineStyleDouble
пишет Item не является свойством.
Подскажите как мне установить тип линии.
Опытный
Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005
Репутация: нет
Всего: 7
Добрый день! Перешел с Delphi 7 на Delphi XE4-
Открыл свой старый проект по работе с Excel файлом.
В Delphi 7 все работало, а вот в Delphi XE4 при работе с файлом выдает ошибку — invalid variant operation
Уже битый час сижу извращаюсь над котом, а все в пустую. подскажите, как быть.
Нужно подключит файл Экселя, прочитать значение из ячейки В2 если оно не занято, то вставить туда текст, если оно занято, то проверить В3 и т.д.
Код нажимаешь на кнопку 1 раз, программа находит пустую ячейку и вставляет туда текст, а вот когда нажимаешь на кнопку второй раз выдает ошибку.
подскажите, что не так или в Delphi XE4 нужно по другому работать?
Код |
|
ВСЕМ СПАСИБО!!! ВОПРОС СНЯТ, ПОТЕРЯЛ ГЛОБАЛЬНУЮ ПЕРЕМЕННУЮ
Это сообщение отредактировал(а) offline — 21.2.2017, 14:59