Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
964to968
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Typen unverträglich --> warum ?

Typen unverträglich --> warum ?
10.04.2008 10:51:31
FM
Hallo,
ich habe ein kleines Problem mit einer worksheet function.
Ich möchte von einem Skript aus bestimmte Werte summieren wenn 2 Kritieren erfüllt sind ("22" und das jeweilige Land das ausgelesen wird). Als Fehlermeldung bekomme ich "Typen unverträgelich".
Ich komme allerdings nicht darauf wie ich die Variablen sonst deklarieren sollte...
Wäre für jegliche Hilfe dankbar.
Gruss
FM
(P.S. anzzeilen ist als public deklariert und dort als Integer)

Sub countries()
Dim cells_country As Integer
Dim v_country, total_country As Long
Dim country_name As String
AnzZeilen = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 3).End(xlUp).Row - 1
For cells_country = 2 To 14 Step 1
country_name = ThisWorkbook.Worksheets("data").Cells(cells_country, 7).Value
v_country = WorksheetFunction.SumProduct((ThisWorkbook.Worksheets("data").Range("a2:a500") = "  _
_
22") * _
(ThisWorkbook.Worksheets("data").Range("d2:d500") = country_name) * _
ThisWorkbook.Worksheets("data").Range("b2:b500"))
Next cells_country
End Sub


19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 11:04:00
Renee
Hi FM,
Na da ist so fast alles verkehrt, was man verkehrt machen kann.
z.B.
anzzeilen ist als public deklariert und dort als Integer Rows müssen als DOUBLE deklariert sein.
v_country As String SumProduct gibt einen DOUBLE Wert zurück
Warum du das mit VBA machst, ist mir ebenfalls schleierhaft. Warum nicht gleich die SUMMENPRODUKT Formel in die Zellen der Tabelle schreiben ?
GreetZ Renée

AW: Typen unverträglich --> warum ?
10.04.2008 11:11:16
Andi
Hi,
Rows müssen als DOUBLE deklariert sein
Warum?
Klar, sobald ich mehr als 32.767 Zeilen habe, schon, aber bis dahin geht doch Integer ohne Probleme, oder?
Und wenn ich die 32.767 überschreite, dann bekomme ich doch keine Typ-Unverträglichkeit, sondern einen Überlauf.
Schönen Gruß,
Andi

Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 11:13:08
FM
Danke erstmal für die Antwort. Ich mache das per VBA weil das nur ein Codeteil von mehreren ist und das ganze einen output in einer Userform hat (Spreadsheet und zudem noch ein Chartspace in der Userform)
Wenn ich es richtig verstanden habe muss dann :
Anzzeilen double sein
und v_country auch double ?
Ich habe das nun mal geändert aber leider bekomme ich immer noch die gleiche Meldung. Wäre es evtl. möglich mir noch einen weiteren Tip zu geben :) ?
Danke im voraus
Florian

Sub countries()
Dim cells_country As Integer
Dim v_country As Double
Dim country_name As String
Dim anzzeilen As Double
anzzeilen = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 3).End(xlUp).Row - 1
For cells_country = 2 To 14 Step 1
country_name = ThisWorkbook.Worksheets("data").Cells(cells_country, 7).Value
v_country = WorksheetFunction.SumProduct((ThisWorkbook.Worksheets("data").Range("a2:a" &  _
anzzeilen) = "22") * _
(ThisWorkbook.Worksheets("data").Range("d2:d" & anzzeilen) = country_name) * _
ThisWorkbook.Worksheets("data").Range("b2:b" & anzzeilen))
Next cells_country
End Sub


Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 11:29:16
Beverly
Hi Reneé,
weshalb müssen Rows als DOUBLE deklariert werden? Long (2.147.483.648) ist doch selbst bei Excel2007 für die Zeilenanzahl ausreichend! Double (E hoch 300 und noch was) ist für Gleitkommazahlen doppelter Genauigkeit erforderlich.
Ich hatte Double für die betreffende Variable nur deshalb vorgeschlagen, weil ich die Ausgangsdaten nicht kenne und das Ergebnis möglicherweise eine Kommazahl sein könnte.


AW: Typen unverträglich --> warum ?
10.04.2008 11:32:00
Renee
Hi Karin,
Sorry, hab mich vertan. Meinte LONG !
GreetZ Renée

Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 11:46:26
Andi
Hi,
trotzdem halte ich meinen Einwand aufrecht, dass bei Integer-Deklaration bis 32.000 Zeilen nichts passiert, und darüberhinaus eine Typ-Unverträglichkeit, sondern ein Überlauf auftritt.
Schönen Gruß,
Andi

AW: Typen unverträglich --> warum ?
10.04.2008 11:56:52
Reinhard
Hallo Andi,
jain, liegt doch wohl daran was zuerst im Code benutzt wird *Korinthen auspack*
Ansonsten sehe ich das genauso :-)
Gruß
Reinhard

AW: Typen unverträglich --> warum ?
10.04.2008 12:24:00
FM
nun gut aber nur um das zu verstehen. Es liegt definitiv daran dass eine Variable falsch deklariert ist oder? Weil dann kann ich ja dementsprechend testen.

AW: Typen unverträglich --> warum ?
10.04.2008 12:59:22
Renee
Hi FM,
Es liegt definitiv daran, dass die Parameter für die SUMPRODUCT Function falsch sind!
Ich werd mich in ungefähr 1h melden.
Aber warum du 12 mal einen Loop durchläufst und immer wieder die gleiche Variable überschreibst, bedarf vielleicht doch noch einer Erklärung!
GreetZ Renée

Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 13:09:32
Reinhard
Hi FM,
leider nein.
Die Variable die das Ergebnis von Sumproduct bekommt muß als Double deklariert/definiert werden.
(Liegt an SumProduct, bei einer anderen Worksheetfunction kann/wird das anders sein)
Diesen Fehler hast du ja korrigiert. Ich auch.
Leider ist da noch etwas anderes nicht korrekt und ich weiß nicht was sonst hätte ich (Andere) dir das sicher schon geschrieben)
Und, beim Antworten auf einen Beitrag ist oben rechts ein Kästchen "Frage noch offen", hake dieses bitte an wenn die Frage noch ffen ist oder du eine Nachfrage hast. Brauchst du jetzt nicht zu machen, mache ich gerade. Noch offene Beiträge erkennt man am Ausrufungszeichen und sie erscheinen wenn du oben aus "offene Fragen" klickst.
Es ist für dich vorteilhaft wenn du dir gleich grundsätzlich angewöhnst in Blättern für die Spalten immer Integer zu benutzen und für die Zeilen immer long.
Um den Fehler der entstehen KÖNNTE wenn man sich nicht daranhält drehte sich ein Teil dieser Diskussion, sorry wenn dich das verständlicherweise verwirrt hat :-(
Weil es mir gerade einfällt, in deiner Ausgangsfrage stand im Code sinngemäß
Dim a,b as long
Falls du dann denkst a wäre auch als Long deklariert irrst du, es bleibt Variant, korrekt müßte es so aussehen:
Dim a as Long, b as Long
Ich hoffe ich habe dich jetzt nicht zu sehr zugetextet *gg*
Zusammengefasst, dein Problem ist weiterhin ungelöst.
Gruß
Reinhard

Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 13:32:00
Rudi
Hallo,

für die Spalten immer Integer zu benutzen


funktioniert, formal aber falsch, da auch die Column-Eigenschaft des Range-Objekts als Long definiert ist.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: Typen unverträglich --> warum ?
10.04.2008 13:49:41
Renee
Hi FM,
Das einzige, was ich anstelle der WS-Function anbieten kann, ist:

v_country = Evaluate("=SUMPRODUCT((data!A2:A500=22)*" & _
"(data!D2:D500)=""" & country_name & """)*" & _
"(data!B2:B500))")


GreetZ Renée

Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 13:58:22
FM
danke für die vielen Tips bis jetzt. Werde ich gleich alles ausprobieren.
Zur Frage warum ich 12 mal dieselbe Varaible überschreibe.
Das wird natürlich im Endeffekt nicht so sein. Bis jetzt wollte ich nur mal testen ob es überhaupt funsktioniert und danach wird bevor das nächste NEXT kommt die Variable im Spreadsheet der Userform "verewigt".

AW: Typen unverträglich --> warum ?
10.04.2008 11:09:21
Beverly
Hi,
sind es immer ganzzahlige Werte die sich ergeben, oder können sie auch mit Kommastellen sein? Dann hilft vielleicht Double für v_country anstelle von integer.


Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 11:14:00
FM
@Beverly:
v_country wir ein $ Wert sein der schon Kommastellen haben kann/wird, welche ich dann später per FORMAT kürze.

AW: Typen unverträglich --> warum ?
10.04.2008 14:48:00
FM
Hallo,
so ich habe das mit dem Evaluate nun getestet. Dabei habe ich herausgefunden dass, wenn ich v_country also Variant deklariere (oder gar nicht. Habe kein option explicit verwendet) es durchläuft. Wenn ich den Wert dann in einer Zelle im Worksheet ausgeben will bekomme ich dort ein #Wert!.

Sub countries()
Dim cells_country As Integer
Dim v_country
Dim country_name As String
Dim anzzeilen As Double
anzzeilen = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 3).End(xlUp).Row - 1
For cells_country = 2 To 14 Step 1
country_name = ThisWorkbook.Worksheets("data").Cells(cells_country, 7).Value
v_country = Evaluate("=SUMPRODUCT((data!A2:A500=""" & PD & """)*" & _
"(data!D2:D500)=""" & country_name & """)*" & _
"(data!B2:B500))")
ThisWorkbook.Sheets(1).Range("d2").Value = v_country 'diese line nur zum testen ob  _
der Wert der rauskommt richtig ist
Next cells_country
End Sub


Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 14:58:27
Renee
Hi FM,
wieso eigentlich Level VBA gut ?
also Variant deklariere (oder gar nicht. Habe kein option explicit verwendet) es durchläuft
1. Wer Option Explicit nicht verwendet, handelt fahrlässig!
2. Als Variant das ist das gleiche wie nix & option explicit!
3. Es wurde x-mal erwähnt, das SUMPRODUCT einen DOUBLE Wert zurückgibt!
4. Wo und wie ist PD deklariert, was ist der Inhalt von Spalte A, was ist der Inhalt von PD ?
5. Niemand kann deine Tabelle sehen, ausser dir. Dürften wir mal einen Blick drauf werfen ?
GreetZ Renée

Anzeige
AW: Typen unverträglich --> warum ?
10.04.2008 15:14:57
FM
So ich hab jetzt mal eine Beispielstabelle aufgemacht.
Zum Hintergrund warum in VBA: Weil es ein relativ großen Programm ist und diese "Abfrage" nur ein kleiner Teil davon. Allerdings habe ich ein eigenes Sub dafür der Übersicht halber.
PD ist eine Variable vom Typ String. Diese enthält den Wert der aktuellen Periode. Und dieser ändert sich dann logischerweise nach einer Periode.
Vielleicht kann ich ja dann anhand dieser Beispieltabelle ableiten wie es bei mir funktionieren kann. Ansonsten mache ich das evtl. ganz anders.
Zur Frage warum VBA gut. Naja weil mir bescheiden dann doch zu weit unten war. Es ist natürlich immer eine Definitionssache. Ich kann sicher einiges bewältigen im VBA aber sehr vieles auch nicht. Ich bin nun mal kein gelernter Programmierer sondern mache das eher privat und zur Arbeitserleichterung wegen :).
So hier zum Tabellenbeispiel:
https://www.herber.de/bbs/user/51414.xls
Danke !
Gruss
Florian

AW: Typen unverträglich --> warum ?
10.04.2008 15:30:00
Renee
Hi FM,
Da war ne Klammer am falschen Ort:

v_country = Evaluate("=SUMPRODUCT((data!A2:A8=""" & PD & """)*" & _
"(data!B2:B8=""" & country_name & """)*" & _
"(data!D2:C8))")


GreetZ Renée

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige