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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2009, 13:10   #1
Belokuraya
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 41
По умолчанию Ошибка в цикле

Подскажите, пож-та, в чём ошибка:
в одной таблице необходимо просуммировать ячейки А2 и А3, А4 и А5, А6 и А7 и тд, в промежутке со 2 столбца по 62 и занести в другую таблицу. У меня получился следующий код (все переменные заданы как положено):

For pr = 2 To 62 Step 2
pro = ActiveWorkbook.Worksheets("PrdailyP lan").Cells(i, pr).Value
pro1 = ActiveWorkbook.Worksheets("PrdailyP lan").Cells(i, pr + 1).Value
ActiveWorkbook.Worksheets("DailyRep ort").Cells(x, v + 3).Value = pro + pro1
Next pr

Ошибка появляется в третьей строчке.
Belokuraya вне форума Ответить с цитированием
Старый 18.08.2009, 13:35   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Лучше, конечно, увидеть весь код, который имеет отношение к данной части. Проверьте значения pro и pro1. Возможно одна и них является не числом. Если я правильно понял какую строку Вы назвали третьей. Эту?
Код:
ActiveWorkbook.Worksheets("DailyRep ort").Cells(x, v + 3).Value = pro + pro1
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 18.08.2009, 13:40   #3
Belokuraya
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 41
По умолчанию

Код довольно большой и нерациональный, но в данной работе не это главное.

Sub reportday()
Dim i, j, x, y, z, w, m, n, v, u, s, t, p, o, q, pr As Integer
Dim a, b, c, cald As String
Dim pro, shi, sto, shi1, shi2, shi3, shi4, shi5, pro1 As Double

i = 4
j = 4
x = 4
y = 5
z = 6
w = 7
u = 801
s = 1601
p = 401
o = 1201
q = 2001
Do While ActiveWorkbook.Worksheets("SKU").Ce lls(i, 1).Value <> "" And _
ActiveWorkbook.Worksheets("SKU").Ce lls(i, 10).Value <> "" And _
ActiveWorkbook.Worksheets("SKU").Ce lls(i, 11).Value <> ""

a = ActiveWorkbook.Worksheets("SKU").Ce lls(i, 1).Value
b = ActiveWorkbook.Worksheets("SKU").Ce lls(i, 10).Value
c = ActiveWorkbook.Worksheets("SKU").Ce lls(i, 11).Value

ActiveWorkbook.Worksheets("DailyRep ort").Cells(j, 1).Value = a
ActiveWorkbook.Worksheets("DailyRep ort").Cells(j, 2).Value = b
ActiveWorkbook.Worksheets("DailyRep ort").Cells(j, 3).Value = c




Do While ActiveWorkbook.Worksheets("DailyRep ort").Cells(j, 3).Value <> ""
ActiveWorkbook.Worksheets("DailyRep ort").Cells(x, 4).Value = "prod"
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, 4).Value = "ship"
ActiveWorkbook.Worksheets("DailyRep ort").Cells(z, 4).Value = "stock"
ActiveWorkbook.Worksheets("DailyRep ort").Cells(w, 4).Value = "stock dur"



ActiveWorkbook.Worksheets("DailyRep ort").Cells(x, 4).Font.ColorIndex = 3
ActiveWorkbook.Worksheets("DailyRep ort").Cells(x, 4).Font.Bold = True


ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, 4).Font.ColorIndex = 10
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, 4).Font.Bold = True


ActiveWorkbook.Worksheets("DailyRep ort").Cells(z, 4).Font.ColorIndex = 5
ActiveWorkbook.Worksheets("DailyRep ort").Cells(z, 4).Font.Bold = True

ActiveWorkbook.Worksheets("DailyRep ort").Cells(w, 4).Font.ColorIndex = 13
ActiveWorkbook.Worksheets("DailyRep ort").Cells(w, 4).Font.Bold = True

For v = 2 To 32

shi = ActiveWorkbook.Worksheets("ShDailyP lan").Cells(i, v).Value
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, v + 3).Value = shi
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, v + 3).NumberFormat = "0.00"

shi1 = ActiveWorkbook.Worksheets("ShDailyP lan").Cells(u, v).Value
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, v + 66).Value = shi1
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, v + 66).NumberFormat = "0.00"

shi2 = ActiveWorkbook.Worksheets("ShDailyP lan").Cells(s, v).Value
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, v + 129).Value = shi2
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, v + 129).NumberFormat = "0.00"

shi5 = ActiveWorkbook.Worksheets("ShDailyP lan").Cells(q, v).Value
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, v + 161).Value = shi5
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, v + 161).NumberFormat = "0.00"

Next v

For t = 2 To 31
shi3 = ActiveWorkbook.Worksheets("ShDailyP lan").Cells(p, t).Value
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, t + 35).Value = shi3
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, t + 35).NumberFormat = "0.00"

shi4 = ActiveWorkbook.Worksheets("ShDailyP lan").Cells(o, t).Value
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, t + 98).Value = shi4
ActiveWorkbook.Worksheets("DailyRep ort").Cells(y, t + 98).NumberFormat = "0.00"
Next t

For pr = 2 To 62 Step 2
pro = ActiveWorkbook.Worksheets("PrdailyP lan").Cells(i, pr).Value
pro1 = ActiveWorkbook.Worksheets("PrdailyP lan").Cells(i, pr + 1).Value
ActiveWorkbook.Worksheets("DailyRep ort").Cells(x, v + 3).Value = pro + pro1
Next pr




x = x + 4
y = y + 4
z = z + 4
w = w + 4
i = i + 1
j = j + 4
u = u + 1
s = s + 1
p = p + 1
o = o + 1


Loop
Loop


End Sub
Belokuraya вне форума Ответить с цитированием
Старый 18.08.2009, 13:48   #4
Belokuraya
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 41
По умолчанию

Третья сторока:

pro1 = ActiveWorkbook.Worksheets("PrdailyP lan").Cells(i, pr + 1).Value
Belokuraya вне форума Ответить с цитированием
Старый 18.08.2009, 13:57   #5
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Так объявлять переменные нельзя.
Код:
Dim pro, shi, sto, shi1, shi2, shi3, shi4, shi5, pro1 As Double
При таком объявлении тип данных Double будет присвоен только переменной pro1. Правильно так
Код:
Dim pro As Double, shi As Double, sto As Double, shi1 As Double, shi2 As Double, _
shi3 As Double, shi4 As Double, shi5 As Double, pro1 As Double
Все-таки проверьте значение в ячейке ActiveWorkbook.Worksheets("PrdailyP lan").Cells(i, pr + 1).Value
Да и в целом можно сократить многие моменты. Например это
Код:
pro = ActiveWorkbook.Worksheets("PrdailyP lan").Cells(i, pr).Value
pro1 = ActiveWorkbook.Worksheets("PrdailyP lan").Cells(i, pr + 1).Value
ActiveWorkbook.Worksheets("DailyRep ort").Cells(x, v + 3).Value = pro + pro1
можно записать как
Код:
sheets("DailyRep ort").Cells(x, v + 3).Value = sheets("PrdailyPlan").Cells(i, pr).Value + sheets("PrdailyP lan").Cells(i, pr + 1).Value
Можно еще проще, но не хочется Вас грузить.
Не удержался. используйте конструкцию With ... End With
Код:
With sheets("PrdailyPlan")
sheets("DailyRep ort").Cells(x, v + 3).Value = .Cells(i, pr).Value + .Cells(i, pr + 1).Value
End With
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru

Последний раз редактировалось The_Prist; 18.08.2009 в 14:00.
The_Prist вне форума Ответить с цитированием
Старый 18.08.2009, 14:16   #6
Belokuraya
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 41
По умолчанию

Cпасибо за советы!)

Конструкцией:

sheets("DailyRep ort").Cells(x, v + 3).Value = sheets("PrdailyPlan").Cells(i, pr).Value + sheets("PrdailyP lan").Cells(i, pr + 1).Value

я уже пользовалаь, но не работает, сейчас попробовала ещё

With sheets("PrdailyPlan")
sheets("DailyRep ort").Cells(x, v + 3).Value = .Cells(i, pr).Value + .Cells(i, pr + 1).Value
End With
но тоже не работает(((
Belokuraya вне форума Ответить с цитированием
Старый 18.08.2009, 14:17   #7
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Что именно не работает? Тоже ошибка появляется или данные не заносятся? Если копировали код в редактор VBA прямо отсюда, то обратите внимание - имя листа записано с пробелом
sheets("DailyRep ort")
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 18.08.2009, 14:54   #8
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Немного переделал Ваш код. Попробуйте так
Код:
Option Explicit

Sub reportday()
    Dim i As Long, j As Long, x As Long, y As Long, z As Long, w As Long, m As Long, n As Long, _
      v As Long, u As Long, s As Long, t As Long, p As Long, o As Long, q As Long, pr As Long
    i = 4: j = 4: x = 4
    y = 5: z = 6: w = 7
    u = 801
    s = 1601
    p = 401
    o = 1201
    q = 2001
    Application.ScreenUpdating = False
    With Sheets("DailyRep ort")
        Do While Sheets("SKU").Cells(i, 1).Value <> "" And Sheets("SKU").Cells(i, 10).Value <> "" And _
           Sheets("SKU").Cells(i, 11).Value <> ""
           
            .Cells(j, 1).Value = Sheets("SKU").Cells(i, 1).Value
            .Cells(j, 2).Value = Sheets("SKU").Cells(i, 10).Value
            .Cells(j, 3).Value = Sheets("SKU").Cells(i, 11).Value
            Do While Sheets("DailyRep ort").Cells(j, 3).Value <> ""
                Range(.Cells(x, 4), .Cells(w, 4)) = Array("prod", "ship", "stock", "stock dur")
                Range(.Cells(x, 4), .Cells(w, 4)).Font.Bold = True
                .Cells(x, 4).Font.ColorIndex = 3
                .Cells(y, 4).Font.ColorIndex = 10
                .Cells(z, 4).Font.ColorIndex = 5
                .Cells(w, 4).Font.ColorIndex = 13
                For v = 2 To 32
                    Union(.Cells(y, v + 3), .Cells(y, v + 66), .Cells(y, v + 129), .Cells(y, v + 161)).NumberFormat = "0.00"
                    .Cells(y, v + 3).Value = Sheets("ShDailyP lan").Cells(i, v).Value
                    .Cells(y, v + 66).Value = Sheets("ShDailyP lan").Cells(u, v).Value
                    .Cells(y, v + 129).Value = Sheets("ShDailyP lan").Cells(s, v).Value
                    .Cells(y, v + 161).Value = Sheets("ShDailyP lan").Cells(q, v).Value
                Next v
                For t = 2 To 31
                    Union(.Cells(y, t + 35), .Cells(y, t + 98)).NumberFormat = "0.00"
                    .Cells(y, t + 35).Value = Sheets("ShDailyP lan").Cells(p, t).Value
                    .Cells(y, t + 98).Value = Sheets("ShDailyP lan").Cells(o, t).Value
                Next t
                For pr = 2 To 62 Step 2
                    .Cells(x, v + 3).Value = Sheets("PrdailyP lan").Cells(i, pr).Value + Sheets("PrdailyP lan").Cells(i, pr + 1).Value
                Next pr
                x = x + 4: y = y + 4: z = z + 4: w = w + 4: j = j + 4
                i = i + 1: u = u + 1: s = s + 1: p = p + 1: o = o + 1
            Loop
        Loop
    End With
Application.ScreenUpdating = True
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 18.08.2009, 14:54   #9
Belokuraya
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 41
По умолчанию

Сейчас попробую
Belokuraya вне форума Ответить с цитированием
Старый 18.08.2009, 15:11   #10
Belokuraya
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 41
По умолчанию

хм, нет, получается не то, что нужно...(

теперь данные вообще не заносятся:

With Sheets("PrdailyPlan")
For pr = 2 To 62 Step 2
Sheets("DailyReport").Cells(x, v + 3).Value = .Cells(i, pr).Value + .Cells(i, pr + 1).Value
Next pr
End With
Belokuraya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема в цикле Fekla Общие вопросы C/C++ 4 28.06.2009 12:50
Ошибка в цикле , не могу понять в чем! Помогите пожалуйста. Алексей_xXx Помощь студентам 1 29.05.2009 00:37
Ошибка в цикле Alamez Общие вопросы Delphi 2 05.04.2009 15:12