2016-07-14 3 views
1

Ich habe ein Makro, das den Wert in Spalte E zurückgeben soll, wenn es den Werten in Spalte A, Spalte B und Spalte D entspricht. Die folgende Formel eingegeben Excel funktioniert super:VBA gibt "type-mismatch" zurück, wenn Formel einwandfrei funktioniert

=SUMPRODUCT(--(A1:A180="Category Name"),--(B1:B180="Specific Type"),--(D1:D180=2015),(E1:E180))

aber das folgende VBA-Programm gibt einen "Typ-Mismatch-Fehler". Das Programm befindet sich als Modul und nicht unter einem bestimmten Blatt. Ich habe überprüft, dass die "Blattname" Bereiche auch existieren. Kann jemand sehen, was der Fehler ist?

Für den Datensatz sind Spalten a und b Text und Spalten d und e sind Zahlen.

Function LocateFirstCell() 
Dim FirstCell 

Dim ColA 
Dim ColB 
Dim ColD 
Dim ColE 

Dim Name As String 
Dim BOD As String 
Dim Year As Integer 

Set ColA = Worksheets("Sheet Name").Range("A1:A180") 
Set ColB = Worksheets("Sheet Name").Range("B1:B180") 
Set ColD = Worksheets("Sheet Name").Range("D1:D180") 
Set ColE = Worksheets("Sheet Name").Range("E1:E180") 


Name = "Category Name" 
BOD = "Specific Type" 
Year = 2015 


FirstCell = [SUMPRODUCT(--(ColA=Name),--(ColB=BOD),--(ColD=Year),(ColE))] 
'=SUMPRODUCT(--(A1:A180="Category Name"),--(B1:B180="Specific Type"),--(D1:D180=2015),(E1:E180)) 

MsgBox ("FirstCell is " & FirstCell) 
End Function 
+1

Sowohl [.Name] (https://msdn.microsoft.com/en-us/ Bibliothek/Büro/aa175750 (v = Büro.11) .aspx) und [Jahr] (https://msdn.microsoft.com/en-us/library/88k2aec8.aspx) sind ** reservierte Wörter **. Es ist nie eine gute Idee, reservierte Wörter zu verwenden, es sei denn aus einem ganz besonderen Grund (das gehört nicht dazu). – Jeeped

Antwort

5

Sie können VBA-Variablen nicht in der kurzen Hand von Evaluate verwenden; die [] ist kurzerhand für ActiveSheet.Evaluate

Sie müssen es schreiben und die Variablen in einer Zeichenfolge verketten:

FirstCell = Worksheets("Sheet Name").Evaluate("SUMPRODUCT(--(" & ColA.Address & "=""" & Name & """),--(" & ColB.Address & "=""" & BOD & """),--(" & ColD.Address & "=" & Year & "),(" & ColE.Address & "))") 
+0

Sie, mein Herr, sind ausgezeichnet und haben meinen Dank! Während die geschriebene Formel immer noch zu einem "Typenkonfliktfehler" führte, fügte ich Anführungszeichen mit Chr (34) um die Variablen Name und BOD hinzu und die Formel funktioniert jetzt. Danke nochmal! – chimPANz

+0

Ah ja, sie würden gebraucht werden. Ich werde die Änderungen vornehmen. Könnten Sie als korrekt markieren, indem Sie auf das Häkchen bei der Antwort klicken. –

Verwandte Themen