2013-11-16 2 views
1

Я пытаюсь написать макрос для модели гидро-логики, достойной достойного% моего класса, и я продолжаю получать ошибку 1004. Он сосредоточен на первой строке первого оператора If.Ошибка 1004

Это код, который я использую:

Sub pheonix() 
' 
' pheonix Macro 
' 
' Keyboard Shortcut: Ctrl+u 
' 
    Dim WS As Worksheet 
    Set WS = Sheets.Add 
    Sheets.Add.Name = "RESULTS" 
    Sheets("Case 2").Select 

    Range("C1:R1").Select 
    Selection.Copy 
    Sheets("RESULTS").Select 

    ActiveSheet.Paste 


    Dim Row As Integer 
    Dim Day As Integer 
    Dim SurfaceInflow As Integer 
    Dim GroundwaterOutflow As Integer 
    Dim SurfaceOutflow As Integer 
    Dim Stage As Integer 
    Dim Evap As Integer 
    Dim Precip As Integer 
    Dim AreaL As Integer 
    Dim ChangeStorage As Integer 
    Dim Storage As Integer 

    Dim InitialStorage As Integer 
    Dim InitialStage As Integer 
    Dim InitialArea As Integer 



    Row = 2 

    'calulation for initial day 
    'InitialStage = "4" 
    'InitialArea = 11 * InitialStage^0.5 
    'InitialStorage = (22/3) * (InitialStage^(3/2)) 

    Set wksSource = ActiveWorkbook.Sheets("Case 2") 
    Set wksDest = ActiveWorkbook.Sheets("RESULTS") 

    For Day = 5 To 734 
     Sheets("RESULTS").Cells(Row, "A") = Sheets("Case 2").Cells(Row, "C") 


     For i = 0 To 288 
      Sheets("Case 2").Select 

       SurfaceInflow = ((0.2 * Cells(Day, "G")) * ((1 - 0.4) * (557 - Cells(Day, "J")))) + ((0.95 * Cells(Day, "G")) * (0.4 * (557 - Cells(Day, "J")))) 

       If Cells(Stage, "H") >= 1.348 Then 
        GroundwaterOutflow = (0.379 * Cells(Stage, "H") - 0.511) 
        Else: GroundwaterOutflow = 0 
       End If 

       If Cells(Stage, "H") > 2.9 Then 
        SurfaceInflow = (33 * (Cells(Stage, "H") - 2.9)^(3/2)) 
        Else: SurfaceInflow = 0 
       End If 

       Precip = Cells(Precip, "S") 

       Evap = Cells(Evap, "T") 

       Area = (11 * Cells(Stage, "H")^0.5) 

       ChangeStorage = (Area * (Precip - Evap)) - GroundwaterOutflow + SurfaceInflow - SurfaceOutflow 

       Storage = Storage + ChangeStorage 


     Next i 
      Sheets("RESULTS").Cells(Row, "B") = "X" 
      Row = Row + 1 

    Next Day 

End Sub 

Помощь? Я не очень хорошо разбираюсь в программировании, это был довольно неудачный проект, возникший у нас профессором.

ответ

2

Это происходит потому, что значение Stage является 0 в

ряды
If Cells(Stage, "H") >= 1.348 Then 

Excel начинаются с 1 и может доходить до макс 65536 в xl2003 и предыдущий или 1048576 в xl2007 +

Также это целесообразно объявить переменную (строки) строки как Long вместо Integer

Возможно, вы также захотите увидеть THIS, чтобы сделать ваш код более надежным.

+0

Но почему это должно быть 0? Я не выбираю столбцы для работы? – user3000426

+0

Вы должны установить значение 'stage', поскольку оно является переменной. Если вы пройдете через код с помощью F8, вы заметите, что значение 'stage' равно' 0'. Или вы можете просто ввести это перед этой линией 'IF'. 'MSGBOX Stage' –

+0

ahhhh, теперь я вижу. Я как-то пропустил там уравнение. Благодаря!! – user3000426

Смежные вопросы