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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2009, 23:10   #1
Жентос
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 15
По умолчанию проблемка с MSFlexGrid

Здравствуйте, подскажите, пожалуйста, как в MSFlexGrid просуммировать элементы(числа) одного столбца..они должны быть double..
Жентос вне форума Ответить с цитированием
Старый 14.11.2009, 00:26   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Жентос.
сумму колонки или строки можно получить циклом
Код:
For iRow = 0 To MSFlexGrid1.Rows.Count - 1
    i = i + MSFlexGrid1.TextMatrix(iRow, iCol) 
Next
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 14.11.2009, 01:01   #3
Жентос
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 15
По умолчанию

внес поправку в код... теперь при запуске программы, он выдает ошибку : "Invalid qualifier"
подскажите, пожалуйста, как избежать этого?
Жентос вне форума Ответить с цитированием
Старый 14.11.2009, 21:11   #4
Жентос
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте Жентос.
сумму колонки или строки можно получить циклом
Код:
For iRow = 0 To MSFlexGrid1.Rows.Count - 1
    i = i + MSFlexGrid1.TextMatrix(iRow, iCol) 
Next
Евгений.
Спасибо за помощь, Евгений
у меня возникает ошибка(вышеуказанная).. можешь, пожалуйста, подсказать как этого можно избежать?
у меня программа-база данных студентов с общим показателем по группе.. я использую Data и Textbox'ы для внесения данных, а MSFlexGrid у меня для показа данных в виде таблицы.. я прописал код для суммирования оценок(оценка каждого студента хранится в Label5) через Data при нажатии кнопки:

For i = 2 To Data1.Recordset.RecordCount
s = s + Label5.Caption
Next i
Label12.Caption = Round(s / Data1.Recordset.RecordCount, 2)

но он у меня выводит число, не равное сумме этих значений.. потому я и подумал про суммацию столбца оценок во MSFlexGrid.. но он выдает ошибку..... подскажи как сделать правильно, пожалуйста.. порекомендуй чем можно посчитать эти значения..
Жентос вне форума Ответить с цитированием
Старый 14.11.2009, 21:25   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Жентос.
Выкладывайте архив с заранее подготовленным файлом БД (подготовка подразумевает - избавление от переизбыточных данных, избавление от OLE объектов и сжатие средствами MS Access) на этой странице, и у Вас появится возможность получить реальную помощь, без объяснения "на пальцах".
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 14.11.2009, 21:39   #6
Жентос
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 15
По умолчанию

Спасибо..
Подскажите, пожалуйста..
Вложения
Тип файла: rar Архив WinRAR.rar (10.7 Кб, 12 просмотров)
Жентос вне форума Ответить с цитированием
Старый 14.11.2009, 21:54   #7
Жентос
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 15
По умолчанию

та же программа с ошибкой во FlexGrid'e
Вложения
Тип файла: rar Архив WinRAR (2).rar (11.0 Кб, 9 просмотров)
Жентос вне форума Ответить с цитированием
Старый 15.11.2009, 00:29   #8
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Внесите в Ваш код подобные корректировки:
Код:
Private Sub Command1_Click()
Const s0 = "Количество записей : ", s1 = "Средний балл : "
Dim s$: s = Data1.Recordset.RecordCount
Label1.Caption = s0 + s
Label2.Caption = s1 + sumCol
End Sub
Function sumCol() As String
Dim s$, iVal#, i%
For i = 1 To MSFlexGrid1.Rows
    s = MSFlexGrid1.TextMatrix(i - 1, 4)
    If IsNumeric(s) Then iVal = iVal + CDbl(s)
Next
sumCol = Format(iVal / (i - 1), "#,##0.00")
End Function
и на данном этапе - будет Вам счастье.
Ответ на ожидаемый вопрос "почему на данном этапе ?", в Вашей конструкции применяются о-о-очень "взрослые" контролы, с технологией которую возможно ещё преподают в учебных заведениях, но давно уже не применяют.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 16.11.2009, 18:00   #9
Жентос
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 15
По умолчанию

Здравствуйте, Евгений. Спасибо вам, что уделяете время начинающим пользователям среды VB.
Я изменил код, прописав также как вы посоветовали. Но у меня возникла проблемка... код выдает значение, которое не соответствует реальному.. к примеру: у меня 4 записи, средняя оценка каждого из студентов >3 , а средний балл выдает численно равным 2,93 ... еще не понимаю, почему в коде:

s = MSFlexGrid1.TextMatrix(i - 1, 4)
и
sumCol = Format(iVal / (i - 1), "#,##0.00")

ставится i-1 и в MSFlexGrid1.TextMatrix(i - 1, 4) стоит 4 ?
просто вроде считает по пятому столбцу в MSFlexGrid'е, а меняя эту 4-ку на 5-ку, при клике на кнопку программа выдает ошибку: "Subscript out of range"
Подскажите, пожалуйста..
Жентос вне форума Ответить с цитированием
Старый 16.11.2009, 20:35   #10
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Жентос.
Начало нумерации массивов с единицы (как в Excel), это скорее исключение, в большинстве случаев нумерация начинается с нуля (если не задано иное значение).
Это утверждение касается и TextMatrix - т.е. у пятой колонки матрицы индекс - 4, в то же время у колонки Grid`а индекс = 5, т.к. существует (неотображаемая) нулевая колона аналогично ярлыкам строк Excel установив свойсво GridFixedCols в 1 в этом можно убедиться. Такая же ситуация со сстроками - первой строке Grid`а соответствует нулевая строка матрицы, и потому:
Код:
...
For i = 1 To MSFlexGrid1.Rows
    s = MSFlexGrid1.TextMatrix(i - 1, 4)
поставив точку прерывания в коде (F9 на текущей строке) с помощью пошагового выполнения (F8) можно проверить корректность выполнения процедуры, контролируя значения переменных.
Удачи Вам, пробуйте.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемка Lacrimoso Общие вопросы C/C++ 11 24.09.2009 23:14
проблемка lucky Паскаль, Turbo Pascal, PascalABC.NET 1 12.05.2009 22:32
проблемка( Alexcomeback Общие вопросы C/C++ 4 16.04.2009 18:38