Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
460to464
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
460to464
460to464
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ich verstehe es einfach nicht!

Ich verstehe es einfach nicht!
02.08.2004 11:12:38
ponti
hallo,
ich habe folgendes Problem:
Eine Tabelle mit verschiedenen Messwerten.
Das Makro soll aus den (über Userform ausgewählten) Messwerten den Mittelwert bilden.
Makro:
Dim a, b, c, d, e, f, g As Integer

Private Sub CommandButton1_Click()
Dim ä As String
Sheets("Übersicht").Cells(55, 1).Value = TextBox1.Text
Sheets("Übersicht").Cells(55, 2).Value = TextBox2.Text
Sheets("Übersicht").Cells(55, 3).Value = TextBox3.Text
Sheets("Übersicht").Cells(55, 4).Value = TextBox4.Text
Sheets("Übersicht").Cells(55, 5).Value = TextBox5.Text
Sheets("Übersicht").Cells(55, 6).Value = TextBox6.Text
Sheets("Übersicht").Cells(55, 7).Value = TextBox7.Text
a = TextBox1.Text
b = TextBox2.Text
c = TextBox3.Text
d = TextBox4.Text
e = TextBox5.Text
f = TextBox6.Text
g = TextBox7.Text
ä = TextBox9.Text
If a = 0 Then a = 4 / 3
If b = 0 Then b = 4 / 3
If c = 0 Then c = 4 / 3
If d = 0 Then d = 4 / 3
If e = 0 Then e = 4 / 3
If f = 0 Then f = 4 / 3
If g = 0 Then g = 4 / 3
Sheets(ä).Activate
Sheets("Übersicht").Cells(1, 1) = (Cells(285, (a * 3) - 1) + _
Cells(285, (b * 3) - 1) + Cells(285, (c * 3) - 1) _
+ Cells(285, (d * 3) - 1) + Cells(285, (e * 3) - 1) + _
Cells(285, (f * 3) - 1) + Cells(285, (g * 3) - 1))
If a <> 4 / 3 Then a = 1 Else a = 0
If b <> 4 / 3 Then b = 1 Else b = 0
If c <> 4 / 3 Then c = 1 Else c = 0
If d <> 4 / 3 Then d = 1 Else d = 0
If e <> 4 / 3 Then e = 1 Else e = 0
If f <> 4 / 3 Then f = 1 Else f = 0
If g <> 4 / 3 Then g = 1 Else g = 0
Sheets("Übersicht").Cells(1, 1) = Sheets("Übersicht").Cells(1, 1) / (a + b + c + d + e + f + g)
Unload UserForm6
End Sub

Eingabe der Messwerte, und des Blattes, auf welchem die messwerte sind:
z.B.
Blatt1, 1,2,3,0,0,0,0 (Jeweils in andere Textbox, hier Blatt1, Messerte 1, 2 u. 3)
Problem:
g ist immer auf 1. Ich habe keine ahnung wiso, aber g (= letzte Textbox) ist immer auf 1, auch wenn ich in die Textbox 0 eingebe. Dadurch komme ich immer auf ein falsches ergebnis. Gebe ich in die letzte Textbox (g) nichts ein, tritt ein Fehler (Typenfehler) auf.
Weiß jemand rat?
MfG ponti

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ich verstehe es einfach nicht!
02.08.2004 11:18:12
Harald
Hallo Ponti,
probier mal statt
a = TextBox1.Text etc.
a = TextBox1.Value
Im Übrigen könnte das Problem ganz wo anders liegen. Mit
Dim a, b, c, d, e, f, g As Integer
legst Du fest, dass a...g nur ganzzahlige Werte annehmen kann. Somit kann die Zuweisung
If a = 0 Then a = 4 / 3
nur a=1 liefern, da 4/3=1,3333333... als Integer nicht darstellbar ist.
Gruß Harald
AW: Ich verstehe es einfach nicht!
Reinhard
Hi Harald,
mit dem Integer hast du Recht, aber
Dim a, b, c, d, e, f, g As Integer
legt nur g als Integer fest.
Die anderen sind variant bzw empty wenn du Nametype(a) aufrufst.
Korrekt wäre grundsätzlich
Dim a as Integer, b as Integer, usw.
mal jetzt von der 1.333 Problematik abgesehen.
Gruß
Reinhard
Anzeige
AW: Ich verstehe es einfach nicht!
02.08.2004 11:31:44
Harald
Hallo Reinhard,
das ist mir ganz neu und ich bin entsetzt!
Wo kann ich mehr zu diesem Umstand nachlesen? Irgendwie passt das nicht in mein Verständnis von sinnvoller Variablendeklaration.
Gruß Harald
AW: Ich verstehe es einfach nicht!
Reinhard
Hi Harald,
nachlesen zB in der Hilfe zu excelvba*g
Auszug:
Dim-Anweisung (Beispiel)
Dieses Beispiel zeigt die Verwendung der Dim-Anweisung zum Deklarieren von Variablen. Die Dim-Anweisung läßt sich auch zur Deklaration von Datenfeldern verwenden. Die voreingestellte untere Grenze für Datenfeldindizes ist 0 und kann auf Modulebene mit der Option Base-Anweisung geändert werden.
' Wert1 und Wert2 werden standardmäßig als Variant mit
' dem Wert Empty initialisiert.
Dim Wert1, Wert2
' Explizite Deklaration einer Variablen vom Typ Integer.
Dim Zahl As Integer
' Mehrere Deklarationen in einer Zeile. AndereVar hat den Typ
' Variant, da kein Typ angegeben wird.
Dim AndereVar, Auswahl As Boolean, GebDatum As Date
...
Gruß
Reinhard
Anzeige
Danke o.T.
02.08.2004 12:10:34
Harald
AW: Ich verstehe es einfach nicht!
ponti
Jetzt wirds mir klar!
Da durch Dim a, b, c, d, e, f, g As Integer nur das letzte definiert wird, springt auch
nur das letzte auf 1, da es 1,333 als Integer ja nicht darstellen kann!!!
Danke!
Was nehm ich dann? Gibts sowas wie float in C++?
AW: Ich verstehe es einfach nicht!
Uduuh
Hallo,
Single oder Double, je nach dem wie genau du's haben willst.
Gruß aus'm Pott
Udo
AW: Ich verstehe es einfach nicht!
Reinhard
Hi sponti,
nimm
dim a as single, b as single,...
geht glaub bis 10 hoch 45
wenn das nicht reicht
double geht bis 10 hoch 324 :-)
Gruß
Reinhard
Man Dankt!
ponti
Vielen Dank!
Man Dankt!
ponti
Vielen Dank!
AW: Ich verstehe es einfach nicht!
ponti
Hallo Harald,
beides löst mein Problem nicht. Die als Integer definierten Werte nehmen komischerweise den wert 1,3333333 an. Und zwar alle, der Reihe nach, bis auf das letzte (g), was im Debugger zwar den Wert "If g = 0 Then g = 4 / 3" zugewiesen bekommt, dann aber nicht wie die anderen auf 4/3 (1,333) sondern auf 1 geht.
Anzeige
Siehe Reinhard
02.08.2004 11:32:47
Harald
AW: Ich verstehe es einfach nicht!
ponti
Hallo Harald,
beides löst mein Problem nicht. Die als Integer definierten Werte nehmen komischerweise den wert 1,3333333 an. Und zwar alle, der Reihe nach, bis auf das letzte (g), was im Debugger zwar den Wert "If g = 0 Then g = 4 / 3" zugewiesen bekommt, dann aber nicht wie die anderen auf 4/3 (1,333) sondern auf 1 geht.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige