|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
25.10.2008, 19:51 | #1 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
Указать на ошибку
Не могу найти ошибку[Type mismatch (Error 13)], прикрепить файл с "км." кодом, нет смысла, а мона вписать в код что то, что бы указал и курсор поставил на ошибку?
|
25.10.2008, 20:01 | #2 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
В некоторых случаях после нажатия кнопки Debug в сообщении об ошибке надо ещё несколько раз нажать F8, чтобы VBE указал точное местонахождение ошибки (например, при ошибках в модулях класса) А что вообще происходит при нажатии на кнопку Debug? Можно просто отключить все обработчики ошибок в коде... Цитата:
|
||
25.10.2008, 21:29 | #3 | |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
Цитата:
iSS = iSS + Cells(i + 13, 5) * Cells(i + 13, 4) что ни о чем не говорит, эта строка используется для всех листов и везде работает, попробую скомпоновать Книгу, что бы выложить, есть копия этой же книги, там все ОК! Последний раз редактировалось valerij; 25.10.2008 в 21:31. |
|
25.10.2008, 21:51 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
В одной из ячеек (Cells(i + 13, 5) или Cells(i + 13, 4))
у Вас находится значение, не являющееся числом (например, текст) Ошибка возникает при попытке умножить текстовое значение. Попробуйте такой код: iSS = iSS + val(Cells(i + 13, 5).Value) * val(Cells(i + 13, 4).Value) |
25.10.2008, 22:06 | #5 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
|
25.10.2008, 22:15 | #6 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Cells(i + 13, 5) - ссылка на ячейку
Cells(i + 13, 5) и Cells(i + 13, 5).Value в данном случае - одно и то же - значение ячейки ( .Value - свойство по умолчанию для ячейки) функция Val преобразует текстовую строку к числовому значению. например, msgbox "123a"*2 вызовет ошибку [Type mismatch (Error 13)] msgbox val("123a")*2 выдаст результат 246 т.к. функция val строку "123a" преобразует в число 123 Цитата:
PS: если в ячейке только текст (например, "фываыфв"), функция val("фываыфв") возвратит ноль
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 25.10.2008 в 22:18. |
|
25.10.2008, 22:20 | #7 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
|
26.10.2008, 01:38 | #8 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
EducatedFool
Не совсем корректно считает, т. е. так, обрезает десятичные значение в 5 колонке: iSS = iSS + val(Cells(i + 13, 5).Value) * val(Cells(i + 13, 4).Value) а вот так, все ОК: iSS = iSS + Cells(i + 13, 5) * val(Cells(i + 13, 4).Value) Но все же удивляет ошибка у меня, вот прикрепил, урезал. Вводим любые числа в колонку D, а вот на листе УТ-1, если ввести данные в 23.10.08, скажем в яч. D1156 или в любую другую в диапазоне D1125:D1162 выскочит ошибка, во всех других диапазонах в этом листе, ошибки нет, на др. листе, ЛЕН, вообще ошибки, НЕТ! |
26.10.2008, 02:05 | #9 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
В момент, когда вылетает ошибка, подведите указатель мыши к переменным в коде, и увидите всплывающую подсказку типа
Cells(i + 13, 4)=" " (15 пробелов) при этом в момент появления ошибки i=1155 Следовательно, в ячейке d1168 у Вас находятся несколько пробелов (непонятно только, зачем), из-за этого и вылетает ошибка... Ну не умеет VBA умножать числа на пробелы... Если убрать из ячейки пробелы, ошибка появляться не будет. Но, по идее, код надо изначально писать так, что б никакие пробелы помешать не смогли... Возможно, у Вас ошибка в определении диапазона ячеек для суммирования: либо в строке For i = dat * 51 + 3 To dat * 51 + 40 либо в Cells(i + 13, 5) надо заменить +13 на что-то поменьше Судя по коду, у Вас в сумму попадают значения ячеек d1163-d1168, чего вроде бы происходить не должно Кстати, в Вашем случае большую часть вычислений было бы удобнее и проще сделать при помощи формул (не нужно отлавливать события изменения отдельных ячеек и т.д.), да и работать, пожалуй, будет немного быстрее.
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 26.10.2008 в 02:27. |
26.10.2008, 10:16 | #10 | ||
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
Цитата:
Цитата:
EducatedFool А по поводу iSS = iSS + Cells(i + 13, 5) * val(Cells(i + 13, 4).Value) я правильно сделал? EducatedFool С П А С И Б О |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Указать нужный тип переменной | KiDoki | Общие вопросы Delphi | 3 | 06.10.2008 17:11 |
Как указать в регулярке............ | Adamant | PHP | 12 | 25.03.2008 10:11 |
Указать критерии поиска? | фЁдОр | БД в Delphi | 28 | 18.02.2008 17:17 |
Как указать путь компилируемуму exe файлу | shurik_7866 | Общие вопросы Delphi | 2 | 18.07.2007 23:24 |
Как указать диапазон чисел? | Inbox | Общие вопросы Delphi | 2 | 29.06.2007 01:21 |