Autor
|
Thema: 2-dimensional variables Datenfeld (972 mal gelesen)
|
Wyndorps Ehrenmitglied V.I.P. h.c. Ingenieur
Beiträge: 4563 Registriert: 21.07.2005
|
erstellt am: 10. Nov. 2006 09:36 <-- editieren / zitieren --> Unities abgeben:
Der folgende Code läuft ohne Fehlermeldung durch, wenn man das Preserve weglässt. Allerdings sollen die vorher eingetragenen Werte erhalten bleiben. Mit Preserve gib es Laufzeitfehler 9. Gleichzeitig soll aber die Feldgröße variabel veränderbar sein. Was mache ich falsch? Grüße und Dank Option Explicit Sub test() Dim xDat() As Variant Dim i, k As Integer For i = 0 To 2 For k = 0 To 2 ReDim Preserve xDat(i, k) xDat(i, k) = (i + k) ^ 2 Next k Next i End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wyndorps Ehrenmitglied V.I.P. h.c. Ingenieur
Beiträge: 4563 Registriert: 21.07.2005 Creo 8.0.1.0 Genius Tools 8.0 Windchill 12.0.2.0
|
erstellt am: 10. Nov. 2006 10:48 <-- editieren / zitieren --> Unities abgeben:
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 10. Nov. 2006 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für Wyndorps
Trotzdem nochmal Hallo was mir nämlich noch aufgefallen ist: Code: Dim i,k as Integer
definiert NUR das k !!und wenn Du von Anfang an feste Grenzen im array setzt, sollte dennoch gehen, was Du möchtest, ohne das Redim Preserve: Code: Option Explicit Sub test() Dim i As Integer, k As Integer Dim xDat(5, 5) 'feste Grenzen setzen, können ja ruhig größer sein For i = 0 To 2 For k = 0 To 2 'ReDim Preserve xDat(i, k) xDat(i, k) = (i + k) ^ 2 Next k Next i End Sub
------------------ Gruß, Nicole Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wyndorps Ehrenmitglied V.I.P. h.c. Ingenieur
Beiträge: 4563 Registriert: 21.07.2005
|
erstellt am: 10. Nov. 2006 11:56 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von runkelruebe:
Code: Dim i,k as Integer
definiert NUR das k !!
Danke!! Eigentlich weiß ich das, aber dieser Fehler passiert mir immer wieder. Kommt noch aus alten Pascal-Zeiten. Zitat: Original erstellt von runkelruebe:
und wenn Du von Anfang an feste Grenzen im array setzt, sollte dennoch gehen, was Du möchtest, ohne das Redim Preserve:
Leider kann ich keine festen Grenzen gebrauchen, da ich Grafiken mit variabler Kurvenanzahl und variablen Datenmengen je Kurve benötige. Ich habe mir aber mit einem Umweg über eine Typ-Deklaration geholfen. Anbei mein derzeitiger Lösungszutand. Vielleicht hilft es jemandem: Grüße und Dank Option Explicit Type Serie Daten() As Variant End Type Dim xdat() As Serie Dim yDat() As Serie Private Sub prcCreateChart() Dim objChartObject As ChartObject Dim f As Integer Dim i As Integer Set objChartObject = Worksheets(1).ChartObjects.Add(200, 100, 400, 250) With objChartObject .Name = "Testdiagramm" For i = 1 To UBound(xdat) With .Chart .ChartType = xlXYScatterSmooth .SeriesCollection.NewSeries .SeriesCollection(i).XValues = xdat(i).Daten .SeriesCollection(i).Values = yDat(i).Daten .SeriesCollection(i).Border.LineStyle = xlNone .SeriesCollection(i).Trendlines.Add Type:=xlPolynomial, Order:=2, Forward:=0, Backward:=0, DisplayEquation:=False, DisplayRSquared:=False End With Next i For i = 1 To UBound(xdat) With .Chart .SeriesCollection(i).Border.LineStyle = xlNone .SeriesCollection(i).Trendlines(1).Border.ColorIndex = i + 2 End With Next i End With End Sub Public Sub test() Dim xx() As Variant Dim i As Integer Dim k As Integer For i = 1 To 2 ReDim Preserve xdat(i) ReDim Preserve yDat(i) For k = 1 To 9 ReDim Preserve xdat(i).Daten(k) ReDim Preserve yDat(i).Daten(k) xdat(i).Daten(k) = (i + k) ^ 2 yDat(i).Daten(k) = (i * k) * 2 Next k Next i Call prcCreateChart End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
okl Mitglied Wirtsch-Ing (Maschbau)
Beiträge: 157 Registriert: 21.04.2006 3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1300, Delmia V5R16 SP1, Win XP Prof SP2, Office 2003, VS 2005, VB 6
|
erstellt am: 14. Nov. 2006 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für Wyndorps
Zitat: Original erstellt von runkelruebe:Code:
Dim xDat(5, 5) 'feste Grenzen setzen, können ja ruhig größer sein
Nö! Wenigstens ein klein wenig auf Performance achten! Selbst wenn man es kaum merkt, wenn man mit neueren Compis arbeitet, verschenkt man doch unnötig Speicherplatz, Geschwindigkeit etc. Mal hier ein bisschen, mal dort ein paar Bytes und schon ist die Durchlaufzeit um ein paar Prozenties höher. IMHO: unschön. Grüße, Ole Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 14. Nov. 2006 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für Wyndorps
Zitat: Nö! Wenigstens ein klein wenig auf Performance achten!
ich rede ja auch nicht von 5000, sondern von z.B. 5 daß man dabei zumindest so ungefähr in den Regionen bleibt, um die es später geht, habe ich vorausgesetzt!
------------------ Gruß, Nicole Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 14. Nov. 2006 14:41 <-- editieren / zitieren --> Unities abgeben: Nur für Wyndorps
|
Wyndorps Ehrenmitglied V.I.P. h.c. Ingenieur
Beiträge: 4563 Registriert: 21.07.2005 Creo 8.0.1.0 Genius Tools 8.0 Windchill 12.0.2.0
|
erstellt am: 14. Nov. 2006 20:33 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Nepumuk: du kannst, wenn du Preserve benutzt, nur die letzte Dimension deines Arrays erweitern.
Das war das Problem, was ich oben bereits geschrieben habe. Da in meinem Fall eine unbekannte Zahl von Messreihen mit einer unbekannten Zahl von Messdaten ausgegeben werden müssen, habe ich die 2-dimensionale Variabilität über die Kombination mit der Typdefinition realisiert. Funktioniert übrigens sehr gut. Zugegeben, mehr als 30 Messreihen in einem Diagramm sind auch nicht wirklich toll. Man hätte auch eine feste Obergrenze für die Reihen wählen können, aber dann fehlt am Ende doch wieder genau die eine. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|