2015-07-02 8 views
0

Я пытаюсь прочитать макрос, который суммирует соответствующие значения, связанные с рядом дат. IE-1 января будет иметь 20 строк с соответствующими записями 20, 50, 80 в соответствующих столбцах. Я хочу макрос, который будет суммировать все эти записи, и как только все записи 1 января будут суммированы, он перейдет к 2 января и суммирует все эти записи. Код, который я написал до сих пор, дает мне цикл без ошибок.Loop without do error, excel vba

Private Sub CommandButton1_Click() 

Dim dateCheck As String 
Dim shipDay As Date 
Dim L As Integer 
Dim i As Integer 
Dim S As Integer 
Dim search As String 
Dim usaTotal As Long 
Dim usaCredit As Long 
Dim usaDebit As Long 


L = 10 
i = 3 


dateCheck = InputBox("What Date is Ship Day 1?", "Ship Day Entry") 

If IsDate(dateCheck) Then shipDay = DateValue(dateCheck) _ 
Else: MsgBox ("Invalid Date") ' Prompts user for ship day 1, and checks if actual date 




While Not Worksheets("Sheet1").Cells(i, 8).Value = "" ' Runs until all cell rows are accounted for 

For S = 0 To 29 

shipDay = shipDay + S 

Do Until shipDay <> Worksheets("Sheet1").Cells(i, 8).Value ' Execute until new date 

search = Worksheets("sheet1").Cells(i, 12).Value ' Variable to use InStr to check for "CAN" 

If (((shipDay = Worksheets("Sheet1").Cells(i, 8).Value) And _ 
InStr(1, search, "CAN", vbBinaryCompare) = 0) _ 
And (Worksheets("Sheet1").Cells(i, 6).Text = "Invoice")) Then 

'Check that date matches, and that it isn't Canada, and that order is an invoice 

usaDebit = Worksheets("Sheet1").Cells(i, 22).Value ' Account for Debits 
usaCredit = Worksheets("Sheet1").Cells(i, 24).Value ' Account for Credits 

usaTotal = usaTotal + usaCredit - usaDebit ' Calculate contribution 

i = i + 1 

End If 

Loop 

MsgBox (usaTotal) 


Next S 

Worksheets("JUNE Canada").Cells(i, 22).Value = usaTotal 

MsgBox (usaTotal) 

' Need code here that will input final usaTotal into respective space 

MsgBox (usaTotal) 

Wend ' End of Initial "while not" 

End Sub 
+0

Ваш первый 'Если' утверждение не имеет никакого 'End If' – Sam

+0

[Отступы] (http://mrbool.com/importance-of-code-indentation/29079) является вашим другом. – vacip

ответ

2

Похоже, что вы не указали инструкцию "end if" в верхней части. Это, похоже, сработало для меня (я также добавил «Exit Sub», если они ввели недопустимую дату. Это, похоже, имеет смысл, но вы должны это вынести, если недействительная дата не влияет на остальную часть кода):

Private Sub CommandButton1_Click() 

    Dim dateCheck As String 
    Dim shipDay As Date 
    Dim L As Integer 
    Dim i As Integer 
    Dim S As Integer 
    Dim search As String 
    Dim usaTotal As Long 
    Dim usaCredit As Long 
    Dim usaDebit As Long 

    L = 10 
    i = 3 

    dateCheck = InputBox("What Date is Ship Day 1?", "Ship Day Entry") 

    If IsDate(dateCheck) Then 
     shipDay = DateValue(dateCheck) 
    Else: 
     MsgBox ("Invalid Date") 
     Exit Sub 
    End If ' Prompts user for ship day 1, and checks if actual date 

    While Not Worksheets("Sheet1").Cells(i, 8).Value = "" ' Runs until all cell rows are accounted for 

     For S = 0 To 29 
      shipDay = shipDay + S 
      Do Until shipDay <> Worksheets("Sheet1").Cells(i, 8).Value ' Execute until new date 

       search = Worksheets("sheet1").Cells(i, 12).Value ' Variable to use InStr to check for "CAN" 

       If (((shipDay = Worksheets("Sheet1").Cells(i, 8).Value) And _ 
       InStr(1, search, "CAN", vbBinaryCompare) = 0) _ 
       And (Worksheets("Sheet1").Cells(i, 6).Text = "Invoice")) Then 

       'Check that date matches, and that it isn't Canada, and that order is an invoice 

       usaDebit = Worksheets("Sheet1").Cells(i, 22).Value ' Account for Debits 
       usaCredit = Worksheets("Sheet1").Cells(i, 24).Value ' Account for Credits 

       usaTotal = usaTotal + usaCredit - usaDebit ' Calculate contribution 

       i = i + 1 

       End If 

      Loop 

      MsgBox (usaTotal) 
     Next S 

     Worksheets("JUNE Canada").Cells(i, 22).Value = usaTotal 
     MsgBox (usaTotal) 

     ' Need code here that will input final usaTotal into respective space 

     MsgBox (usaTotal) 

    Wend ' End of Initial "while not" 
End Sub 
+0

Спасибо, что решает эту проблему. Я дам вам галочку, когда это позволит мне. Однако, когда я запускаю этот код ... Мой excel перестает отвечать, и мне нужно заставить конечную задачу. Любая идея, почему это так? –

+0

Не видя вашей книги, я предполагаю, что либо ваши While, либо ваши Do Do not Loops не будут бить критерии завершения. Лучше всего установить точку разрыва в обоих условиях и выполнить код, оценивающий критерии, чтобы убедиться, что это то, что вы считаете. – sous2817

+0

Хорошо, спасибо. Я это сделаю. –