Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  2-dimensional variables Datenfeld

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  2-dimensional variables Datenfeld (972 mal gelesen)
Wyndorps
Ehrenmitglied V.I.P. h.c.
Ingenieur



Sehen Sie sich das Profil von Wyndorps an!   Senden Sie eine Private Message an Wyndorps  Schreiben Sie einen Gästebucheintrag für Wyndorps

Beiträge: 4563
Registriert: 21.07.2005

erstellt am: 10. Nov. 2006 09:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Wyndorps an!   Senden Sie eine Private Message an Wyndorps  Schreiben Sie einen Gästebucheintrag für Wyndorps

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ok. Das hat sich erübrigt. Es steht bei der Hilfe zu Redim, dass nur das letzte Element variabel sein darf.
Trotzdem Danke!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 10. Nov. 2006 11:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Wyndorps 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Wyndorps an!   Senden Sie eine Private Message an Wyndorps  Schreiben Sie einen Gästebucheintrag für Wyndorps

Beiträge: 4563
Registriert: 21.07.2005

erstellt am: 10. Nov. 2006 11:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)


Sehen Sie sich das Profil von okl an!   Senden Sie eine Private Message an okl  Schreiben Sie einen Gästebucheintrag für okl

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Wyndorps 10 Unities + Antwort hilfreich

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. IMHOIn my humble oppinion (Meiner Meinung nach): unschön.

Grüße, Ole

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 14. Nov. 2006 11:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Wyndorps 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 14. Nov. 2006 14:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Wyndorps 10 Unities + Antwort hilfreich

Hi,

du kannst, wenn du Preserve benutzt, nur die letzte Dimension deines Arrays erweitern.

------------------
Gruß
Nepumuk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Wyndorps
Ehrenmitglied V.I.P. h.c.
Ingenieur



Sehen Sie sich das Profil von Wyndorps an!   Senden Sie eine Private Message an Wyndorps  Schreiben Sie einen Gästebucheintrag für Wyndorps

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz