2017-08-23 2 views
1

Ich habe ein Problem mit der Countif-Funktion in VBA (die letzten zwei Zeilen des Codes). Es muss bestimmte Werte in einem bestimmten Bereich berechnen, aber es zählt absolut jeden Wert als mp3 und nichts als mp4.VBA CountIf Problem

Das seltsamste ist, dass, wenn ich die Prozedur in ein neues separates Modul kopieren, ohne Variablen zu übergeben, alles richtig funktioniert und mir die richtigen Werte zurückgibt. Was ist hier falsch? Dank

Private Sub FindValue(ByVal fileno As String, ByVal deadline As String) 

Dim i As Integer 
Dim xWs As Worksheet 
Dim rng As Range 
Dim olApp As Object 
Dim olMail As Object 
Dim var As Integer 
Dim user As String 
Dim uplDate As String 
Const olMailItem = 0 
Dim lastrow As Long 
Dim mp3 As Long 
Dim mp4 As Long 

Sheets("Add_User_ID").Select 
var = Sheets("Add_User_ID").Range(("A2"), Sheets("Add_User_ID").Range("A2").End(xlDown)).Rows.Count 
If fileno = "" Then 
fileno = InputBox("File number") 
End If 
If deadline = "" Then 
deadline = InputBox("Deadline, any format(e.g. 27th of August EOD)") 
End If 
uplDate = Format(Date, "YYYYMMDD") 

For i = 2 To var + 1 
user = Sheets("Add_User_ID").Cells(i, "A").Value 
Sheets("allocation").Select 
With ActiveSheet 
    .AutoFilterMode = False 
    .Range("A:I").AutoFilter 
    .Range("A:A").AutoFilter field:=1, Criteria1:=user 
End With 

Sheets("allocation").Range("A1").Select 
Set rng = ActiveCell.CurrentRegion 
Application.Workbooks.Add 
Set xWs = Application.ActiveSheet 
rng.Copy Destination:=xWs.Range("A1") 
lastrow = xWs.Cells(Rows.Count, 2).End(xlUp).Row - 1 
mp3 = WorksheetFunction.CountIf(Range(Cells(2, 4), Cells((lastrow + 1), 4)), 3) 
mp4 = WorksheetFunction.CountIf(Range(Cells(2, 4), Cells((lastrow + 1), 4)), 4) 

Antwort

4

ändern das Ende des Codes dies:

with xWs 
    mp3 = WorksheetFunction.CountIf(.Range(.Cells(2, 4), .Cells((lastrow + 1), 4)), 3) 
    mp4 = WorksheetFunction.CountIf(.Range(.Cells(2, 4), .Cells((lastrow + 1), 4)), 4) 
end with 

Wtihout die mit und die ., die Cells und Range beziehen sich auf die Active. Daher ist es eine gute Idee, es selbst zu beziehen.

Dann, wenn Sie Lust haben, Refactoring Code wie folgt:

+0

Dank, das Makro selbst richtig funktioniert, wird das Problem auf die Stufe mit MP3-und MP4-Berechnung. es berechnet den richtigen Bereich, wobei wir sagen, 250 Zellen mit Wert 3 und 500 mit Nummer 4, aber Countif für Nr 3 gibt mir das Ergebnis von 750 und Countif von Nr 4 gibt den Wert 0 zurück, was absolut falsch ist. selbst wenn ich den Code a/t deine Empfehlungen aktualisiert habe, zählt es immer noch nicht richtig :( – muahahahh

+0

@muahahahh - hast du es geändert, das '.' und das' With' hinzugefügt? – Vityata