Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1260to1264
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
Inhaltsverzeichnis

Index aßerhalb des gültigen Bereichs. Array

Index aßerhalb des gültigen Bereichs. Array
Michel
Hi Leute,
habe folgendem Code geschrieben.

Private Sub Swingingdoor()
Dim x As Long
Dim eps As Long
Dim y(100) As Long, i As Integer, j As Integer
Dim t(100) As Long
Dim stg As Long
Dim delta As Long
x = Range("G12").Value
eps = "2"
i = i + 1
If j delta = x - stg * i - y(j)
If Abs(delta) > eps Then
j = j + 1
y(j) = x
t(j) = Time()
i = 0
Else
y(j + 1) = x
End If
End If
Range("I15").Value = y(0)
Range("I16").Value = y(1)
Range("I17").Value = y(20)
End Sub

Ich bekomme bei der fettgedruckten Zeile beim delta immer den Fehler 9 "Index außerhalb des gültigen Bereichs.
Kann mir jeman helfen und mir sagen warum?
Noch eine andere Frage. Kann ich eine Zelle als Array deklarieren? Dim Celle(1,1)As feld(2) z.B geht nicht oder?ALso der Zelle irgendwie sagen, dass sie ein Array erkennen soll?
Vielen Dank für eure Hilfe
Gruß Michel
AW: Index aßerhalb des gültigen Bereichs. Array
26.04.2012 23:20:47
Reinhard
Hallo Michel,
wahrscheinlich hast du im Modul oben
Option Base 1
stehen, dann hat in der Fehlerzeile j den Wert 0, das muß den Fehler geben.
Gruß
Reinhard
AW: Index aßerhalb des gültigen Bereichs. Array
26.04.2012 23:28:18
Michel
Hi Reinhard,
danke für die schnelle Antwort.
Wie kann ich den Fehler beheben? Soll ich Option Base auf 0 setzen?
Hast du zu meiner 2. Frage vieleicht auch ne Idee?
Gruß Michel
AW: Index aßerhalb des gültigen Bereichs. Array
26.04.2012 23:44:46
Reinhard
Hallo Michel,
das kannste machen wie du willst. Ich weiß ja nicht wraum du da Option Base 1 stehen hast bzw. brauchst.
Deklariere die Variablen so
Dim y(0 To 100)
So ist es unabhängig von Option Base...
Die 2te Frage habe ich nich verstanden.
Gruß
Reinhard
Anzeige
AW: Index aßerhalb des gültigen Bereichs. Array
27.04.2012 00:03:43
Michel
Hi Reinhard,
danke. Habe Option base auf 0 gesetzt und der Fehler tritt nicht mehr auf, allerdings macht das Programm nicht was es soll.
Bei der 2ten Frage wollte ich folgendes wissen. Ich arbeite im Moment mit einer OPC Verbindung zwischen SPS und Excel. Jetzt lasse ich mir Werte von der SPS nach Excel übertragen und werte sie dann in Excel aus. Mein Problem ist nun, dass ich auf die Zelle G26 von der SPS ein mit Werten gefülltes Array übertragen bekomme. Nun Steht in dieser Zelle aber nur eine 0 und nicht die Werte des Arrays. Wie bekomme ich es hin, dass ich in dieser Zelle die Werte von dem Array angezeigt bekomme? dachte halt des geht indem ich die Zelle als Array deklariere aber des geht nicht. Hast du eine Idee.
Danke für deine Zeit
Gruß Michel
Anzeige
AW: Index aßerhalb des gültigen Bereichs. Array
27.04.2012 01:14:29
Reinhard
Hallo Michel,
zu 1, ich weiß ja nicht was der Code machen soll. So wie ich das sehe läuft der Code einmal durch und fertig.
Keine For Whlie Do schleife drin.
Zu 2, Excel kann nur das auswerten was wer auch immer in G26 reinschrieb.
Und pro Zelle nur einen Wert, kein array.
Gruß
Reinhard
Man kann zwar ein potenzielles Datenfeld ...
27.04.2012 01:38:28
Luc:-?
…auch auswerten, wenn es scheinbar nur 1 Zelle beansprucht, aber diese Art Datenfelder zeigen dann einen Fehlerwert; zum Auswerten benötigt man außerdem immer die Datenquelle, Michel!
Hier wird ein Wert angezeigt (0), was wohl üblicherweise dem 1.Wert des Datenfeldes entspricht, falls Xl nicht ganz die Annahme verweigert und deshalb die ganze Transaktion 0 ergibt, was allerdings auch auf ein leeres Datenfeld hinweisen könnte. Also muss hier die Organisation des Ganzen (das Im- bzw Export-Pgm) verändert wdn — darauf haben irgendwelche Deklarationen in xlVBA keinerlei Einfluss. Eine Zelle ist und bleibt nunmal ein Range-Objekt in Xl!
Gruß Luc :-?
Anzeige
AW: Man kann zwar ein potenzielles Datenfeld ...
27.04.2012 11:15:49
Michel
Hi Reinhard und Luc,
vielen Dank für eure Antworten und Hilfe (vor allem um diese Zeit noch) Wahnsinn :-). Echt tolt.
@Luc. Also hab ich das richtig verstanden, dass ich mir das aus dem Kopf schlagen kann ein Array komplett in eine Zelle zu übertragen. Okey.
@Reinhard. Auch dir nochmal danke. Das Programm ist ein Swingingdoor Algorithmus, der einen kontinuierlichen Wert eines Füllstandes aufnimmt und die Anzahl der aufgenommenen Werte reduziert. D.h Wenn der füllstandssensor 100 Werte aufnimmt, kann ich durch Verändern des Wertes eps am schluss die Werte auf z.B 20 reduzieren. Dies dient zur Betriebsdatenerfassung, weil man ja nicht jeden einzelnen Wert im Verlauf des Sensors braucht zum Verarbeiten.
Private Sub Swingingdoor()
Dim x As Long
Dim eps As Long
Dim y(100) As Long, i As Integer, j As Integer
Dim t(100) As Long
Dim stg As Long
Dim delta As Long
x = Range("G12").Value
eps = "2"
i = i + 1
If j  eps Then
j = j + 1
y(j) = x
t(j) = Time()
i = 0
Else
y(j + 1) = x
End If
End If
Range("I15").Value = y(0)
Range("I16").Value = y(1)
Range("I17").Value = y(20)
End Sub
Es soll so funktionieren: Den sich verändernden Füllstandswert sehe sehe ich in der Zelle G12.
Mit der Zeile x=Range("G12").Value wollte ich das x halt der Wert ist. Nun soll dieses Programm die Werte aufnehmen und die Werte ins Array schreiben. Wenn ein Wertgegenüber dem vorhergehenden Wert ausserhalb des Schlauches der Breite eps ist soll dieser Wert wieder als neuer Wert abgespeichert werden, so erreiche ich eine Reduktion.
Ist das einigermaßen verständlich? ist schwer zu erklären. Ich hab gedacht es zählt automatisch hoch durch die Zeile I= i+1. oder muss ich hier mit ner Schleife arbeiten?
Hoffe ihr könnt mir helfen. Wenn noch was unklar ist bitte melden.
Gruß u Danke Michel
Anzeige
Ja, kannst du, nur ein Wert pro Zelle, der aber...
27.04.2012 14:31:50
Luc:-?
…auch ein Text sein kann, Michel,
was meint, dass du alle Werte miteinander verbunden als Text in die Zelle übertragen kannst. Das Verbinden muss aber entweder bereits vor dem oder während des Imports erfolgen. Am idealsten wäre es dabei, eine Matrixkonstante in Textform zu erzeugen, also etwas in der Form "{1,5.2,1.3,4;4,7.5,2.6,3;7,0.8,6.9,9}". Auf die Zelle mit diesem Text könnte sich eine benannte Fml mit integrierter XLM-Fkt AUSWERTEN beziehen, etwa so Datenfeld =AUSWERTEN("="&Tabelle1!A10), wenn der MatrixKonstText in A10 steht, wobei das "="& eigentl nicht benötigt wird, aber mitunter klappt's ohne nicht. Der Name Datenfeld liefert jetzt bei Anwendung in einer ZellFml stets ein solches (Array), dass man dann bspw mit INDEX in Einzelwerte zerlegen kann.
Das bezog sich alles auf eine reine ZellFml-Lösung. Zur Einbindung in deine Fkt brauchst du den Namen nicht, aber die Matrixkonstante in Textform. Die sollte dann aber der englischen Notation folgen, also "{1.5,2.1,3.4;4.7,5.2,6.3;7.0,8.6,9.9}". Die Zelle kannst du dann mit Evaluate(…) in deiner udFkt auswerten (falls die MxKonst in dt NotatForm vorliegt, vorher entsprd wandeln → ggf 3xReplace). Allerdings hat diese Methode ihre Grenzen — es dürfen nicht zu viele Werte sein, damit nicht Textlängen- u/o Matrix-Limits überschritten wdn.
Gruß Luc :-?
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige