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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2010, 12:54   #1
Bogusgl
Пользователь
 
Регистрация: 03.08.2010
Сообщений: 22
По умолчанию Почему не работает код?

По нажатию кнопки, хочу собрать и обработать данные на каждом листе и вставить результат на активный Лист один под другим в конкретный столбец.
Это то чего я хочу, а он мне говорит:Type mismatch (Error 13)

Подскажите плиз что я не так делаю?
Если что, то я чайник, объясните на пальцах!
Пожаааалуйста! )))


PHP код:
Sub XXX()

Dim sh1 As Worksheetiiqqq As Integer
Dim xq
yqzq As Currency
Application
.ScreenUpdating False
xq 
0
yq 
0
zq 
0
iq 
16
For Each sh1 In ThisWorkbook.Worksheets
With sh1
    
If .Index <> ThisWorkbook.ActiveSheet.Index Then
        i 
= .Index 1
         
Do
           
xq = .Cells(iq4)
           
yq yq xq          
           iq 
iq 1
           
If xq 0 Then zq zq xq Else zq zq
           xq 
0
         Loop Until IsNumeric
(xq) = False
       Cells
(i9).Value yq
       Cells
(i10).Value zq
       yq 
0
       zq 
0
     End 
If
End With
Next sh1
Application
.ScreenUpdating True
End Sub 
Bogusgl вне форума Ответить с цитированием
Старый 09.08.2010, 12:59   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте так:
Код:
Sub XXX()
    Dim sh1 As Worksheet, i, iq, qq
    Dim xq, yq, zq
    Application.ScreenUpdating = False
    xq = 0
    yq = 0
    zq = 0
    iq = 16
    For Each sh1 In ThisWorkbook.Worksheets
        With sh1
            If .Index <> ThisWorkbook.ActiveSheet.Index Then
                i = .Index + 1
                Do
                    xq = Val(.Cells(iq, 4))
                    yq = yq + xq
                    iq = iq + 1
                    If xq > 0 Then zq = zq + xq Else zq = zq
                    xq = 0
                Loop Until IsNumeric(xq) = False
                Cells(i, 9).Value = yq
                Cells(i, 10).Value = zq
                yq = 0
                zq = 0
            End If
        End With
    Next sh1
    Application.ScreenUpdating = True
End Sub
PS: Долго думал, что может означать загадочня конструкция в конце этой строки кода:
If xq > 0 Then zq = zq + xq Else zq = zq
EducatedFool вне форума Ответить с цитированием
Старый 09.08.2010, 13:03   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

полагаю этот
Код:
         Do 
           xq = .Cells(iq, 4) 
           yq = yq + xq           
           iq = iq + 1 
           If xq > 0 Then zq = zq + xq Else zq = zq 
           xq = 0 
         Loop Until IsNumeric(xq) = False
следует заменить на такой
Код:
         Do while isnumeric(.cells(iq,4))
           xq = .Cells(iq, 4) 
           yq = yq + xq           
           iq = iq + 1 
           If xq > 0 Then zq = zq + xq Else zq = zq 
           xq = 0 
         Loop
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 09.08.2010 в 13:06.
IgorGO вне форума Ответить с цитированием
Старый 09.08.2010, 13:10   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

согласен, эту загадочную конструкцию
Код:
If xq > 0 Then zq = zq + xq Else zq = zq
можно смело заменить на
Код:
If xq > 0 Then zq = zq + xq
и еще, Type mismatch (Error 13) появляется в определенной строке, не затруднит Вас указать в какой именно?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.08.2010, 13:57   #5
Bogusgl
Пользователь
 
Регистрация: 03.08.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
и еще, Type mismatch (Error 13) появляется в определенной строке, не затруднит Вас указать в какой именно?
Вот тут:
PHP код:
yq yq xq 
Цитата:
Сообщение от IgorGO Посмотреть сообщение
можно смело заменить на
Код:

If xq > 0 Then zq = zq + xq
А точно хуже не будет??? ))))))
Bogusgl вне форума Ответить с цитированием
Старый 09.08.2010, 13:59   #6
Bogusgl
Пользователь
 
Регистрация: 03.08.2010
Сообщений: 22
По умолчанию

Спасибо за предложения, ща буду пробывать! )))

ЗЫ: А что это такое и как это работает?
Bogusgl вне форума Ответить с цитированием
Старый 09.08.2010, 14:34   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
и еще, Type mismatch (Error 13) появляется в определенной строке, не затруднит Вас указать в какой именно?
смею предположить что на эту строку

If xq > 0 Then zq = zq + xq Else zq = zq

Так как xq As Variant

и при не числовом значении в ячейке ошибка
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 09.08.2010, 14:48   #8
Bogusgl
Пользователь
 
Регистрация: 03.08.2010
Сообщений: 22
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
полагаю следует заменить на такой
Код:
         Do while isnumeric(.cells(iq,4))
           xq = .Cells(iq, 4) 
           yq = yq + xq           
           iq = iq + 1 
           If xq > 0 Then zq = zq + xq Else zq = zq 
           xq = 0 
         Loop
Не работает пишет Application-defined or object-defined error и ссылается на Do while isnumeric(.cells(iq,4))
Bogusgl вне форума Ответить с цитированием
Старый 09.08.2010, 15:17   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

скопировал это
Код:
Do while isnumeric(.cells(iq,4))
в редактор нажал Enter, он его тут же переделал в
Код:
Do While IsNumeric(.Cells(iq, 4))
(узнал While и IsNumeric понаписывал их с большими буквами где надо, после запятой поставил пробел в .Cells(iq, 4 - все должно работать.
Скопируйте строку из этого сообщения в редактор
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.08.2010, 15:31   #10
Bogusgl
Пользователь
 
Регистрация: 03.08.2010
Сообщений: 22
По умолчанию

Ну да, вот так вот все и сделал, а он ругается:
Код:
Sub ЧЧЧ()

Dim sh1 As Worksheet, i, iq, qq As Integer
Dim yq, xq, zq As Currency
Application.ScreenUpdating = False
xq = 0
yq = 0
zq = 0
iq = 16
For Each sh1 In ThisWorkbook.Worksheets
With sh1
    If .Index <> ThisWorkbook.ActiveSheet.Index Then
        i = .Index + 1
        Do While IsNumeric(.Cells(iq, 4))
           xq = .Cells(iq, 4)
           yq = yq + xq
           iq = iq + 1
           If xq > 0 Then zq = zq + xq Else zq = zq
           xq = 0
         Loop
       Cells(i, 9).Value = yq
       Cells(i, 10).Value = zq
       yq = 0
       zq = 0
     End If
End With
Next sh1
Application.ScreenUpdating = True
End Sub
Я наверное где-то нереально туплю... Да?

Последний раз редактировалось Bogusgl; 09.08.2010 в 15:36.
Bogusgl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть код но почему то не правильно работает -ushёl- Помощь студентам 1 10.05.2010 22:27
Почему не работает данный код? C# byte916 Помощь студентам 4 11.12.2009 21:19
Почему не работает код? Kashp Общие вопросы Delphi 3 09.08.2007 17:33