2016-08-25 7 views
0

Ich habe 2 Tabelle "PurposefulSample" und "skaliert". Dieses Makro wird für skaliert geschrieben.Visual Basic Max Funktion 1004 Fehler werfen

Nun, wenn ich diese ausführen, wirft es eine 1004 bei rowMax = Application.WorksheetFunction.Max (Range (src.Cells (Currow, 11), src.Cells (Currow, 37))).
Einige Zellen im angegebenen Bereich sind ebenfalls Zeichenfolgen. Wenige andere sind auch # N/A.

Noob in VB. Ich schätze jede Hilfe.

Sub stdInScaled() 

Dim curCol, curRow 
curRow = 2 

Dim src As Worksheet 
Set src = Worksheets("PurposefulSample") 

Do While (src.Cells(curRow, 1).Value <> "") 
curCol = 11 

    Do While (CStr(src.Cells(curRow, curCol).Value) <> "") 
     If (IsNumeric(src.Cells(curRow, curCol).Value)) Then 
      Dim rowMax 
      rowMax = Application.WorksheetFunction.Max(Range(src.Cells(curRow, 11), src.Cells(curRow, 37))) 
      If (rowMax > 1) Then 
       Cells(curRow, curCol).Value = 100 * CLng(src.Cells(curRow, curCol).Value)/rowMax 
      Else 
       Cells(curRow, curCol).Value = "No Business" 
      End If 
     Else 
      Cells(curRow, curCol).Value = "Data NA" 
     End If 
     curCol = curCol + 1 
    Loop 

    curRow = curRow + 1 
Loop 

End Sub 
+0

Put 'src.' vor Bereich auch so' ... WorksheetFunction.Max (src.Range (... ' –

+0

Sie müssen sich durch die gesamte gehen Code und jedes Bereich Objekt sollte das Elternblatt als Präzedenzfall haben. Es gibt viele 'Zellen' ohne das Blattqualifikationsmerkmal. –

+0

Ich erwartete, dass diese Zellen ohne Blattkennzeichen auf das aktuelle/aktive Blatt zeigen. – rookie

Antwort

1

Zwei Dinge:

  1. Es ist immer ratsam, die Abstammungs aller Kreisobjekte zu qualifizieren, nur keine Mischung, um sicherzustellen, aus welcher Zelle verwiesen wird.

  2. Mit der Möglichkeit, dass Fehler in den Daten auftreten, muss eine Array-Formel Max zum Überspringen der Fehler verwendet werden. Auch in der Formel können Sie eine Schleife nach oben verschieben, so dass nicht für jede Spalte die gleiche Antwort berechnet wird.

Code:

Sub stdInScaled() 

Dim curCol, curRow 
curRow = 2 

Dim src As Worksheet 
Set src = Worksheets("PurposefulSample") 

Dim trgt As Worksheet 
Set trgt = Worksheets("scaled") 

Do While (src.Cells(curRow, 1).Value <> "") 
    curCol = 11 
    Dim rowMax 
    Dim rng As String: rng = src.Range(src.Cells(curRow, 11), src.Cells(curRow, 37)).Address 
    rowMax = src.Evaluate("Max(IF(isnumber(" & rng & ")," & rng & "))") 
    Do While (CStr(src.Cells(curRow, curCol).Value) <> "") 
     If (IsNumeric(src.Cells(curRow, curCol).Value)) Then 
      If (rowMax > 1) Then 
       trgt.Cells(curRow, curCol).Value = 100 * CLng(src.Cells(curRow, curCol).Value)/rowMax 
      Else 
       trgt.Cells(curRow, curCol).Value = "No Business" 
      End If 
     Else 
      trgt.Cells(curRow, curCol).Value = "Data NA" 
     End If 
     curCol = curCol + 1 
    Loop 
    curRow = curRow + 1 
Loop 

End Sub 
+0

Aah arbeitete wie ein Zauber. Danke vielmals. Irgendwelche gute Literatur willst du, dass ich das hier lese? – rookie

+0

Ich habe durch Versuch und Irrtum gelernt, wie ich Projekte für meinen letzten Job gemacht habe. Die meisten meiner Referenzen kamen vom googlen, bis ich eine Antwort fand, die ich verwenden und verstehen konnte. –