2017-07-27 5 views
1

Ich habe Probleme beim Aufruf von Sub. Fehlermeldung ist falsche Anzahl von Argumenten oder ungültige Zuweisung von Eigenschaften. Ich habe viele Variationen ausprobiert und nichts hat funktioniert.Fehler beim Aufruf Sub in VBA

Sub last_non_empty_cell_in_a_row() 

Dim rngCell As Range, i As Long 

Set rngCell = Cells.Find(What:="*", After:=Cells(1, 1), LookIn:=xlFormulas, 
LookAt _ 
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:= _ 
False, SearchFormat:=False) '.Activate 
i = rngCell.Row 

End Sub 


Sub code_main() 

Dim x As Long 

Call last_non_empty_cell_in_a_row(i) 

For x = 1 To i 
If Range("R" & x) = "m_M" Then 
If Range("P" & x) = "m_DH" Then 
If Range("Q" & x) = "" Then 
Else 
Range("P" & x, "R" & x).Interior.ColorIndex = 22 
End If 
Else 
Range("P" & x, "R" & x).Interior.ColorIndex = 22 
End If 
Else 
Range("P" & x, "R" & x).Interior.ColorIndex = 0 

End If 

Next x 



End Sub 
+4

Sie passieren 'I' in 'last_non_empty_cell_in_a_row'. Das Sub nimmt keinen Parameter. –

Antwort

2

Sie wollen last_non_empty_cell_in_a_row zu einem Function ändern und haben es den Wert i zurückzukehren.

Function last_non_empty_cell_in_a_row() As Long 

Dim rngCell As Range, i As Long 
Set rngCell = Cells.Find(What:="*", After:=Cells(1, 1), LookIn:=xlFormulas, 
LookAt _ 
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:= _ 
False, SearchFormat:=False) '.Activate 
i = rngCell.Row 
last_non_empty_cell_in_a_row = i 
End Function 

Und dann, in der rufenden Prozedur:

Sub code_main() 

Dim x As Long 

For x = 1 to last_non_empty_cell_in_a_row() 
... 

Es können auch andere Probleme oder Fehler sein, habe ich nicht getestet. Bemerkenswerterweise scheint last_non_empty_cell_in_a_row eine Funktionssignatur zu sein, die nicht wirklich beschreibt, was die Funktion zurückgibt. Für Möglichkeiten, um die „letzte Zelle“ in einem bestimmten Bereich oder eine Folie zu erhalten, finden Sie unter:

Error in finding last used cell in VBA

+2

Eine weitere Option besteht darin, den Sub zu ändern, um einen ByRef-Parameter zu akzeptieren. –

+0

Danke! Das war sehr nützlich und hilfreich. Es funktioniert gut. Wie auch immer, das Umwandeln von Sub() in Funktion() macht es unmöglich, dieses Makro separat aufzurufen, richtig? – RafMil

+0

@RafMil Ja, Sie können es nicht wie im Makro-Menü aufrufen. –

Verwandte Themen