Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2013, 21:24   #1
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
Злость Не работает if/else в vba

Здравствуйте. Есть такая вот часть кода:
Код:
For i = 1 To 4
If (q1(i) < krz1) Then
x1(i) = noz1 - q1(i)
Else
x1(i) = 0
End If
Так вот. Вывел данные q1(i) и x1(i) оказывается что q1(i)>krz1, а x1(i) все равно пересчитывается по формуле Не могу ничего понять =(
SL1M_DOGG вне форума Ответить с цитированием
Старый 04.01.2013, 21:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Отладчик это подтверждает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.01.2013, 22:00   #3
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию

Нет. Ничего не выводит =( Прога запускается и считает, но неправильно. Причем такую же структуру if else использую дальше в программе для подсчета других данных и все ок

Последний раз редактировалось SL1M_DOGG; 04.01.2013 в 22:39.
SL1M_DOGG вне форума Ответить с цитированием
Старый 04.01.2013, 23:13   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Типы переменных объявлены?
Код:
Dim a As String, b As String, d As Boolean
a = 11
b = 7
d = a > b
ответ будет d=false
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 04.01.2013, 23:35   #5
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию

все переменные объявил как integer. все тоже. может быть проблема в том что при расчете q1(i) используется значение x1(i-1)???
Код:
For i = 2 To 4
q1(i) = q1(i - 1) - D1(i - 1) + x1(i - 1)
и переменные не воспринимает как integer

Последний раз редактировалось SL1M_DOGG; 05.01.2013 в 00:04.
SL1M_DOGG вне форума Ответить с цитированием
Старый 05.01.2013, 00:05   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нет. Ничего не выводит
Я имел ввиду не список ошибок. Я предлагал пройтись пошагово по операторам и посмотреть чему равны элементы массива на очередной итерации
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.01.2013, 00:09   #7
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию

так и сделал. все считает правильно, кроме x(i)
скину весь листинг, вдруг чего:
Код:
Private Sub CommandButton1_Click()
Dim zkm, kzm, vp, asp, noz1, krz1, noz2, krz2, noz3, krz3, D1(1 To 100), D2(1 To 100), D3(1 To 100), i, oz1, oz2, oz3, q1(1 To 100), x1(1 To 100), q2(1 To 100), x2(1 To 100), q3(1 To 100), x3(1 To 100) As Integer
Dim vz1, cr1, vd1, vz2, cr2, vd2, vz3, cr3, vd3 As Single
Dim zs1(1 To 100), zs2(1 To 100), zs3(1 To 100), zp1(1 To 100), zp2(1 To 100), zp3(1 To 100), zw1(1 To 100), zw2(1 To 100), zw3(1 To 100), zm1(1 To 100), zm2(1 To 100), zm3(1 To 100) As Single
Dim zwi, zsi, zmi, zpi, zk1, zk2, zk3, kz1, kz2, kz3, z1(1 To 100), z2(1 To 100), z3(1 To 100), k1(1 To 100), k2(1 To 100), k3(1 To 100), ztot, ozn1, ozn2, ozn3, ktot As Single
vp = TextBox1.Text
asp = TextBox2.Text
cz1 = TextBox4.Text
cr1 = TextBox5.Text
vd1 = TextBox6.Text
noz1 = TextBox7.Text
krz1 = TextBox8.Text
cz2 = TextBox9.Text
cr2 = TextBox10.Text
vd2 = TextBox11.Text
noz2 = TextBox12.Text
krz2 = TextBox13.Text
cz3 = TextBox14.Text
cr3 = TextBox15.Text
vd3 = TextBox16.Text
noz3 = TextBox17.Text
krz3 = TextBox18.Text
oz1 = TextBox19.Text
oz2 = TextBox20.Text
oz3 = TextBox21.Text
ozn1 = TextBox22.Text
ozn2 = TextBox23.Text
ozn3 = TextBox24.Text
q1(1) = noz1
q2(1) = noz2
q3(1) = noz3
For i = 1 To 4
Randomize
D1(i) = ((50 * Rnd) + 150) 'kirpich
D2(i) = ((45 * Rnd) + 130) 'reyka
D3(i) = ((38 * Rnd) + 80) 'cement
Worksheets("Ëèñò3").Cells(i + 6, 1) = D1(i)
Worksheets("Ëèñò3").Cells(i + 6, 2) = D2(i)
Worksheets("Ëèñò3").Cells(i + 6, 3) = D3(i)
Next i
For i = 2 To 4
q1(i) = q1(i - 1) - D1(i - 1) + x1(i - 1)
q2(i) = q2(i - 1) - D2(i - 1) + x2(i - 1)
q3(i) = q3(i - 1) - D3(i - 1) + x3(i - 1)
Worksheets("Ëèñò3").Cells(i, 1) = q1(i)
Worksheets("Ëèñò3").Cells(i, 2) = q2(i)
Worksheets("Ëèñò3").Cells(i, 3) = q3(i)
Next i
For i = 1 To 4
If q1(i) < krz1 Then
x1(i) = noz1 - q1(i)
Else
x1(i) = 0
End If
If q2(i) < krz2 Then
x2(i) = noz2 - q2(i)
Else
x2(i) = 0
End If
If q3(i) < krz3 Then
x3(i) = noz3 - q3(i)
Else
x3(i) = 0
End If
Worksheets("Ëèñò3").Cells(i, 4) = x1(i)
Worksheets("Ëèñò3").Cells(i, 5) = x2(i)
Worksheets("Ëèñò3").Cells(i, 6) = x3(i)
Next i
For i = 1 To 4
zs1(i) = x1(i) * cz1
zs2(i) = x2(i) * cz2
zs3(i) = x3(i) * cz3
zp1(i) = vp * x1(i)
zp2(i) = vp * x2(i)
zp3(i) = vp * x3(i)
If q1(i) > 0 Then
zw1(i) = (asp / (30 * 3))
Else
zw1(i) = (asp / (30 * 3)) - vd1 * q1(i) * cr1
End If
If q2(i) > 0 Then
zw2(i) = (asp / (30 * 3))
Else
zw2(i) = (asp / (30 * 3)) - vd2 * q2(i) * cr2
End If
If q3(i) > 0 Then
zw3(i) = (asp / (30 * 3))
Else
zw3(i) = (asp / (30 * 3)) - vd3 * q3(i) * cr3
End If
If x1(i) < oz1 Then
zm1(i) = x1(i) * (ozn1 / 100) * cz1
Else
zm1(i) = 0
End If
If x2(i) < oz2 Then
zm2(i) = x2(i) * (ozn2 / 100) * cz2
Else
zm2(i) = 0
End If
If x3(i) < oz3 Then
zm3(i) = x3(i) * (ozn3 / 100) * cz3
Else
zm3(i) = 0
End If
z1(i) = zw1(i) + zs1(i) + zp1(i) + zm1(i)
z2(i) = zw2(i) + zs2(i) + zp2(i) + zm2(i)
z3(i) = zw3(i) + zs3(i) + zp3(i) + zm3(i)
k1(i) = cr1 * D1(i) - z1(i)
k2(i) = cr2 * D2(i) - z2(i)
k3(i) = cr3 * D3(i) - z3(i)
Worksheets("Ëèñò3").Cells(i, 8) = zw1(i)
Worksheets("Ëèñò3").Cells(i, 9) = zw2(i)
Worksheets("Ëèñò3").Cells(i, 10) = zw3(i)
Worksheets("Ëèñò3").Cells(i, 11) = zs1(i)
Worksheets("Ëèñò3").Cells(i, 12) = zs2(i)
Worksheets("Ëèñò3").Cells(i, 13) = zs3(i)
Worksheets("Ëèñò3").Cells(i, 14) = zp1(i)
Worksheets("Ëèñò3").Cells(i, 15) = zp2(i)
Worksheets("Ëèñò3").Cells(i, 16) = zp3(i)
Worksheets("Ëèñò3").Cells(i, 17) = zm1(i)
Worksheets("Ëèñò3").Cells(i, 18) = zm2(i)
Worksheets("Ëèñò3").Cells(i, 19) = zm3(i)
Next i
''''''''''''''''''''''''''''''''
zk1 = 0
zk2 = 0
zk3 = 0
kz1 = 0
kz2 = 0
kz3 = 0
For i = 1 To 4
zmi = zmi + zm1(i)
zwi = zwi + zw1(i)
zsi = zsi + zs1(i)
zpi = zpi + zp1(i)
zk1 = zk1 + z1(i)
zk2 = zk2 + z2(i)
zk3 = zk3 + z3(i)
kz1 = kz1 + k1(i)
kz2 = kz2 + k2(i)
kz3 = kz3 + k3(i)
Next i
zkm = zk1 + zk2 + zk3
kzm = kz1 + kz2 + kz4
Worksheets("Ëèñò1").Range("B2") = zwi
Worksheets("Ëèñò1").Range("C2") = zsi
Worksheets("Ëèñò1").Range("D2") = zpi
Worksheets("Ëèñò1").Range("E2") = zmi
Worksheets("Ëèñò1").Range("A4") = zkm
Worksheets("Ëèñò1").Range("B4") = kzm
Worksheets("Ëèñò1").Range("A5") = D1(1)
End Sub

Последний раз редактировалось SL1M_DOGG; 05.01.2013 в 00:18.
SL1M_DOGG вне форума Ответить с цитированием
Старый 05.01.2013, 01:41   #8
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
все переменные объявил как integer
Нет. Все имеют тип variant кроме последнего.
Цитата:
Dim zkm, kzm, vp,..........., x3(1 To 100) As Integer
И видимо поэтому идет сравнение строковых значений, а не числовых.
EUGY вне форума Ответить с цитированием
Старый 05.01.2013, 01:44   #9
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию

Цитата:
Нет. Все имеют тип variant кроме последнего.
Все переменные объявлены как Single || Integer. И нечего язвить. Лучше помог бы советом.
SL1M_DOGG вне форума Ответить с цитированием
Старый 05.01.2013, 01:48   #10
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
И нечего язвить.
Легче на поворотах, студент.
Цитата:
Все переменные объявлены как Single || Integer.
Нет. У тебя они - вариант, кроме последнего.
Надо так:
Цитата:
Dim zkm As Integer, kzm As Integer, vp As Integer,..........., x3(1 To 100) As Integer
Уловил разницу?
EUGY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает пример из Хелпа по VBA CaptainNemo Microsoft Office Excel 2 08.02.2013 20:49
Не работает Evaluate в VBA for MSWord aNJay Microsoft Office Word 7 24.12.2012 22:35
Не работает связка access + ADO + VBA kksav Microsoft Office Access 3 19.05.2011 09:23
Долго работает код VBA Nasten'ka7 Microsoft Office Excel 5 05.05.2011 10:18
VBA, не работает скрипт Domain Microsoft Office Excel 2 04.10.2010 11:07