|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.05.2010, 15:44 | #1 |
Пользователь
Регистрация: 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? |
25.05.2010, 18:41 | #2 |
Пользователь
Регистрация: 14.08.2009
Сообщений: 66
|
Здравствуй, Николай! Может быть ты мне подскажешь? Пожалуйста!
|
25.05.2010, 19:07 | #3 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 616
|
Здравствуй, Наталья! Смотрел твой вопрос, но - честно - непонятно откуда что берется (w, M и т.д.). Тем более у тебя там SQL, я его использовал только для баз данных на VB, а для Excel как использ-ть - не знаю. Сорри.
|
26.05.2010, 14:43 | #4 |
Пользователь
Регистрация: 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 данные? У тебя есть моя программа, можешь глянуть, почему он не дает в общую таблицу оценки записать данные? Помоги, пожалуйста! Последний раз редактировалось KNatalia; 26.05.2010 в 14:45. |
26.05.2010, 14:50 | #5 |
Пользователь
Регистрация: 14.08.2009
Сообщений: 66
|
Он на этой строчке vArr(j, 8) = Application.Sum(M, n, k) выдаёт ошибку, что элемент за пределами диапазона.
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выдает ошибку, обьясните почему... | 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 |