Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: Excel Range mit Variable adressieren

  1. #1
    Registriert seit
    25.02.2008
    Ort
    Bayern
    Beiträge
    611
    Danke
    64
    Erhielt 27 Danke für 23 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum,

    ich möchte ein Excelblatt mit einen Array aus einer Steuerung (S7) beschreiben.
    Die Spalte ist M, beginnt ab Zeile 4.
    Die Variable CNT1 ist eine Schleifenzähler,der auch das Element des Array adressiert.

    Das hier funktioniert nicht:

    Do
    wsExcel.Range("M"+4+CNT1) = HmiRuntime.SmartTags("Test_TIME_OUT")(CNT1)
    CNT1 = CNT1+1
    Loop Until CNT1 = 55
    CNT1 = 0

    Warum?

    Es grüßt
    Sailor
    Always look on the bright side of life
    Zitieren Zitieren Excel Range mit Variable adressieren  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Was bekommst du denn für einen Meldung bzw. was passiert denn ?

    Auf jeden Fall solltest du den Code mal so ändern :
    Code:
    wsExcel.Range("M"+cstr(4+CNT1)) = ...
    Gruß
    Larry

  3. #3
    Kallemann Gast

    Standard

    Hallo Sailor.

    Wenn Dir das "Cells"-Objekt zur Verfügung steht, könntest Du dies verwenden anstatt das "Range"-Objekt.
    Die Syntax wäre dann :

    Code:
    wsExcel.Cells(CNT1 + 3, 13) = ...
    Das würde auch eventuelle Typ-Konvertierungen ersparen.
    Da Dir die Anzahl der Elemente (55) scheinbar bekannt ist, könntest Du anstatt der Do-Loop-Schleife auch eine For-Next-Schleife verwenden. Das erspart Dir zum Einen die Überprüfung hinsichtlich des momentanen Wertes des Schleifenzählers und zum Anderen entfällt dann auch noch die Erhöhung des Wertes des Schleifenzählers in jedem Durchlauf. Die Abarbeitung Deiner Schleife würde dadurch also schneller werden.
    Beispiel:

    Code:
    For CNT1 = 1 To 55
        wsExcel.Cells(CNT1 + 3, 13) = HmiRuntime.SmartTags("Test_TIME_OUT")(CNT1)
    Next
    Geändert von Kallemann (15.02.2014 um 13:32 Uhr)

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Kallemann Beitrag anzeigen
    Da Dir die Anzahl der Elemente (55) scheinbar bekannt ist, könntest Du anstatt der Do-Loop-Schleife auch eine For-Next-Schleife verwenden. Das erspart Dir zum Einen die Überprüfung hinsichtlich des momentanen Wertes des Schleifenzählers und zum Anderen entfällt dann auch noch die Erhöhung des Wertes des Schleifenzählers in jedem Durchlauf. Die Abarbeitung Deiner Schleife würde dadurch also schneller werden.
    Und du meinst, wenn du weniger schreibst dann wird es automatisch schneller? Eine For-Schleife ist eine Sonderform einer Do-While Schleife, bei der die Inkrement-Anweisung und Abbruchbedingungen implizit erstellt werden. Schneller wird dadurch erstmal nichts.

    Wenn man eine For-Schleife verwenden kann, sollte diese alleine wegen der Übersichtlichkeit schon verwendet werden.

Ähnliche Themen

  1. Temporäre Variable in FC absolut adressieren
    Von rightsaidtim im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 28.11.2012, 21:32
  2. Temperaturregelung eines Exruders (Split-Range)
    Von JensO im Forum Sonstige Steuerungen
    Antworten: 3
    Letzter Beitrag: 27.08.2011, 09:36
  3. split range regler und step 7
    Von WIX im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.04.2011, 22:27
  4. Variable indirekt adressieren -CoDeSys-
    Von olb im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 16.01.2011, 09:18
  5. Array mit Variablen adressieren
    Von Jens im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 13.12.2006, 20:57

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •