сумма двух значений>значения

  • Автор темы segail
  • Дата начала
S

segail

Здравствуйте
Подскажите как написать условие если сумма двух значений CDbl(TextBox1.Text) и ячейка Cells(i + 35, 21) больше ячейки Round((Cells(i + 34, 21) * -1), 0)
 
H

hosm

А Cells откуда берется?
Round((Cells(i + 34, 21) * (-1)), 0) - так, наверно.
А в остальном, что сложно?
 
S

segail

Код:
	Dim i As Integer

For i = 1 To 1000
If Cells(i, 27).Text = ComboBox1.Text Then



Добавлено: Я так написал, что то не то…

If CDbl(TextBox1.Text)+ Round(Cells(i + 35, 21)> Round((Cells(i + 34, 21) * -1), 0) Then
 
H

hosm

(CDbl(TextBox1.Text) + CDbl(Cells(i + 35, 21).Text) ) > Round(CDbl(Cells(i + 34, 21).Text) * (-1), 0)

Добавлено: или просто так, сразу брать значение ячеек...
(CDbl(TextBox1.Text) + Cells(i + 35, 21).Value ) > Round(Cells(i + 34, 21).Value * (-1), 0)
 
S

segail

Я умножить на минус 1 не закрываю скобкой ”*-1)” считает нормально, или необходимо все таки закрыть?
 
H

hosm

Я так написал, что то не то…

If CDbl(TextBox1.Text)+ Round(Cells(i + 35, 21)> Round((Cells(i + 34, 21) * -1), 0) Then
Я умножить на минус 1 не закрываю скобкой ”*-1)” считает нормально, или необходимо все таки закрыть?
Хм... А Cells(i + 35, 21) - что, число у Вас возвращает? после того, как в соседней теме в одном контексте кода у Вас проверка TextBox1 = 0 и считывание TextBox1.Text рядом были, я уже не удивлюсь ничему...
Value/Text не надо?
Если работает так, то пусть. Золотые слова: "работает - не трожь" :what?:
 
S

segail

Посмотрите соседнею тему последнее сообщение…
 
H

hosm

а Вы там свое первое! зачем там это? :
Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
А если я бы в мессаджбоксе Yes нажала, что бы в контексте задачи попало в Cells(i + 35, 21).Value:
CDbl(0.Text)?


Добавлено: в общем, если в текущей теме всё получилось, тему закрываю?

Добавлено: кстати, и сами свою тему закрыть можете, через меню Опции.
 
S

segail

Чес-то я Вас не пойму. Если Вы нажмете Yes то числовое значение TextBox1 вносится в ячейку Cells(i + 35, 21).
В TextBox1 вносятся только числовые значения в том числе и 0
Код выглядит так Cells(i + 35, 21).Value = CDbl(TextBox1.Text) или сделать так Cells(i + 35, 21).Value = TextBox1. Value
CDbl это же преобразование выражения в double, в том числе и текстового. Что у меня не так?
 
H

hosm

не, Cells(i + 35, 21).Value = CDbl(TextBox1.Text) как раз правильно.
:what?: Не так Val(TextBox1) <> 0
[post="155348"]см. 1-й абзац.[/post]


Добавлено: и изначальный вариант Textbox1 = 0
 
S

segail

Ну ладно спасибо. Хотя Val не дает мне покоя. Преобразование строки в число, что тут опасного?
Или это предполагаемое преобразование строки в число, а предполагаемое значит не очень надежное?
 
H

hosm

:O_0: TextBox1.Text не обязательно, а вот с Val таки затык может быть, Вы правы :)

Tanya сказал(а):
Неважно как написано TextBox1.Text или TextBox1. Для текстбокса свойством по умолчанию является Text. Для label - caption и т.д. Для Cells() - Value по умолчанию. То есть, указывать такое свойство после точки не обязательно. Хотя, где-то я читала, что указывать свойство хорошо для читабельности и вроде как влияет на скорость, т.к. VB сначала должен найти, что за свойство по умолчанию, проверить корректность присваиваемых значений и т.п.
Val(TextBox) преобразует значение в число. так например значение "256 326значение" будет преобразовано в число 256326.
Val() всегда! преобразует строку в число. Если в строке не число, то получим 0.
Но есть некоторые особенности преобразования строки к числам с десятичным разделителем. Например,

I) системный разделить - запятая
системный разделитель в строке:
val("0,4") = 0
CDbl("0,4") =0,4
несистемный разделитель в строке:
val("0.4") = 0,4
CDbl("0.4") => Type mismatch

II) системный разделить - точка
системный разделитель в строке:
val("0.4") = 0.4
CDbl("0.4") = 0.4
несистемный разделитель в строке:
val("0,4") = 0
CDbl("0,4") =0.4

Удивительные результаты ))) т.е. по-любому нужно извращаться. Определить разделитель, и в зависимости от этого действовать!

Т.о. в конкретно приведенном вами примере нужно знать, что там вводится и как вводится.
Так например, если при системном разделителе 'запятая' ввести 0.4 и использовать CDbl(), то возникнет ошибка.
А если при любом сист. разделителе ввести 0,4 и использовать Val(), то получим некорректный результат.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!