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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 15:44   #1
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию Почему сумма выдает неверный результат?

Всем привет!
Подскажите, пожалуйста, в чем причина и как исправить?

Я анализирую данные и каждому параметру присваиваю определенную оценку. К примеру:

'Параметр1

If Len(vArr(j, 12) & "") = 0 Then
vArr(j, 13) = ""
Else

On Error Resume Next: w = Abs(CDbl(Replace(vArr(j, 12), ".", ","))): On Error GoTo 0


If w >= tt2(30) And w <= tt2(31) Then
vArr(j, 13) = "0": r = 0
ElseIf w >= tt2(34) And w <= tt2(35) Then
vArr(j, 13) = "2": r = 2
ElseIf w >= tt2(32) And w <= tt2(33) Then
vArr(j, 13) = "1": r = 1
End If

End If

'метка совсем плохо
If Len(vArr(j, 14)) > 0 Then
vArr(j, 15) = "совсем плохо"
Else
vArr(j, 14) = ""


If Application.Sum(M, n, P, r, d, v) >= 0 And Application.Sum(M, n, P, r, d, v) <= 2 Then
vArr(j, 15) = "Хорошо"
ElseIf Application.Sum(M, n, P, r, d, v) >= 3 And Application.Sum(M, n, P, r, d, v) <= 5 Then
vArr(j, 15) = "Удовлетворительно"
ElseIf Application.Sum(M, n, P, r, d, v) >= 6 Then
vArr(j, 15) = "Неудовлетворительно"
End If

If Len(vArr(j, 14)) > 0 Then
vArr(j, 16) = 6
Else
vArr(j, 16) = Application.Sum(M, n, P, r, d, v)
End If

End If

где M... v = 0..2 -это присваиваемый балл
Таких у меня шесть параметров. Дальше я в зависимости от общей суммы баллов вывожу в отдельную колонку общую оценку. Мне нужно просуммировать эти баллы Sum(M, n, P, r, d, v) и в эту последнюю колонку vArr(j, 16) записать эту общую сумму.

Причем, если 'метка совсем плохо встречается, то vArr(j, 16) = 6
If Len(vArr(j, 14)) > 0 Then
vArr(j, 15) = "совсем плохо"
Else
vArr(j, 14) = ""

Но в результате у меня просчитывается верно только сумма, где присутствуют все переменные M, n, P, r, d, v, там, где ячейка с параметром пустая, переменной напротив нее присваивается какое-то число и сумма возрастает, а там, где есть слова "совсем плохо", просто вместо суммы пустота.
Подскажите, что не так? Как сделать, чтобы он суммировал только присутствующие баллы и прописывал где метка цифру 6?
KNatalia вне форума Ответить с цитированием
Старый 25.05.2010, 18:41   #2
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Здравствуй, Николай! Может быть ты мне подскажешь? Пожалуйста!
KNatalia вне форума Ответить с цитированием
Старый 25.05.2010, 19:07   #3
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Здравствуй, Наталья! Смотрел твой вопрос, но - честно - непонятно откуда что берется (w, M и т.д.). Тем более у тебя там SQL, я его использовал только для баз данных на VB, а для Excel как использ-ть - не знаю. Сорри.
nilem вне форума Ответить с цитированием
Старый 26.05.2010, 14:43   #4
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Николай, здравствуй, подскажи, пожалуйста! Я знаю, что ты не разбираешься в SQL, но сейчас проблема не в нем.
По-поводу суммы я разобралась, там просто пустым ячейкам присваивались ненужные значения, которые и попадали в сумму. Поэтому присвоила пустой ячейке ноль vArr(j, 3) = "": M = 0 и все заработало!

Но теперь НЕ ПОЙМУ в чем причина:

Я переношу данные из одной книги в другую, но данные в таблицу переносятся только до столбца G:G, я же пытаюсь в столбец H:H записать сумму
vArr(j, 8) = Application.Sum(M, n, k)

Но он не выполняет это действие и просто не работает модуль

Хотя в начале все прописано, весь диапазон, но он ничего не дает записать после столбца G:G

Const s1 = "таблица.xls"
Const s2 = "данные.xls"
Dim oT As Object, oS As Object, vAr1(), vAr2(), vAr3(), b As Boolean
'переменная 'b' индикатор был открыт файл или нет
For Each oS In Workbooks 'ищем книгу среди открытых
If oS.Name = s1 Then 'если находим
Set oT = Workbooks(s1) 'присваиваем oT
b = True
GoTo Метка 'обходим открытие файла
End If
Next

Set oT = Workbooks.Open(Workbooks(s2).Path + "\" + s1) 'открываем файл
If Not Err.Number = 0 Then MsgBox "Внимание! Не открыт один из файлов:" & vbCrLf & _
"данные.xls или таблица.xls": Exit Sub 'выход если файл не открыт
'18
Метка:
Application.ScreenUpdating = False

МММ vAr1() 'передаем пустой массив в процедуру, она наполняет его данными
ССС vAr2() '
ААА vAr3()

Set oS = oT.Sheets(1)
oS.Range("a6:h65000").ClearContents
oS.Range(oS.Cells(6, 1), oS.Cells(UBound(vAr1) + 4, UBound(vAr1, 2))) = vAr1

Set oS = oT.Sheets(2)
oS.Range("a6:r65000").ClearContents
oS.Range(oS.Cells(6, 1), oS.Cells(UBound(vAr2) + 4, UBound(vAr2, 2))) = vAr2

Set oS = oT.Sheets(3)
oS.Range("a6:r65000").ClearContents
oS.Range(oS.Cells(6, 1), oS.Cells(UBound(vAr3) + 4, UBound(vAr3, 2))) = vAr3
If Not b Then
oT.Save ' сохраняем и закрываем если был закрыт файл отчета
oT.Close False
End If
Application.ScreenUpdating = True


Далее выполняется всё, кроме vArr(j, 8) = Application.Sum(M, n, k)

Почему? Почему он не дает записать в столбец 8 данные?


У тебя есть моя программа, можешь глянуть, почему он не дает в общую таблицу оценки записать данные?
Помоги, пожалуйста!
Вложения
Тип файла: rar Новая папка.rar (8.1 Кб, 11 просмотров)

Последний раз редактировалось KNatalia; 26.05.2010 в 14:45.
KNatalia вне форума Ответить с цитированием
Старый 26.05.2010, 14:50   #5
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Он на этой строчке vArr(j, 8) = Application.Sum(M, n, k) выдаёт ошибку, что элемент за пределами диапазона.
KNatalia вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выдает ошибку, обьясните почему... MuRDOC Общие вопросы C/C++ 8 05.05.2010 20:59
Код не всегда выдает правильный результат Maxx Microsoft Office Excel 2 18.02.2010 15:59
результат выдает -Nan- Тонущий коржик Помощь студентам 2 25.11.2009 23:28
Почему не выдает результат записи. Ну или бы хотя бы ошибку какую. Lorel PHP 2 01.12.2008 14:29
В чем ошибка в запросе?неверный результат =( Lunatikus SQL, базы данных 3 26.11.2007 09:50