Excel-Tabelle in Array und danach in Schleife die Werte aus dem Array auslesen

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von naddel_27.

    Excel-Tabelle in Array und danach in Schleife die Werte aus dem Array auslesen

    Hallo Leute,

    würd gern aus einer Excel-Tabelle einen bestimmten Bereich in ein VBA-Array einlesen. Danach sollen die Werte aus diesem Array einzeln ausgelesen werden und abgearbeitet werden mit einem anderen Programm (Arena). Hab bischen was geschrieben, funkt aber nich richtig. Kann mir jemand villeicht bitte helfen? Danke!

    LG Naddel

    Visual Basic-Quellcode

    1. 'Ausführung des VBA-Blocks zur Steuerung der Simulation mit Hilfe von VBA
    2. Private Sub VBA_Block_2_Fire()
    3. Dim s As SIMAN
    4. Set s = ThisDocument.Model.SIMAN
    5. Dim sArray() As String 'das Array
    6. Dim iIndex As Integer 'Zähler für den Index
    7. Dim sRange As String 'der Range
    8. Dim iCells As Integer 'Anzahl der Zellen
    9. Dim iRow As Integer 'Schleifenzähler für die Zeilen
    10. Dim iCol As Integer 'Schleifenzähler für die Spalten
    11. Dim i As Integer
    12. sRange = "A3:A30" ' Range festlegen
    13. ' Die Anzahl der Zellen ermitteln
    14. iCells = Range(sRange).Cells.Count
    15. ' Das Array per Redim dimensionieren
    16. ReDim sArray(iCells - 1)
    17. 'nun über alle Zeilen und Spalten die Werte ins Array einlesen
    18. For iCol = 1 To Range(sRange).Columns.Count
    19. For iRow = 1 To Range(sRange).Rows.Count
    20. sArray(iIndex) = sRange 'Range(sRange).Cells(iRow, iCol).value
    21. iIndex = iIndex + 1
    22. Next
    23. Next
    24. For i = 1 To UBound(sArray)
    25. If sArray(i) <> 0 Then
    26. s.EntityAttribute(s.ActiveEntity, s.SymbolNumber("EndRun")) = sArray(i)
    27. Exit For
    28. End If
    29. Next i
    30. End Sub


    Edit by Agent: VBA gehört ins VBA-Forum -> verschoben + VB-Tag eingefügt

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Agent“ ()

    RE: Excel-Tabelle in Array und danach in Schleife die Werte aus dem Array auslesen

    Hallo,
    Original von naddel_27
    Kann mir jemand villeicht bitte helfen? Danke!

    zum einen ist es geschickter, den Range einfach einem Variant zuzuweisen (fertig ist das Array) und zum anderen wäre es doch recht praktisch, wenn du uns auch einmal die Probleme etwas näher erläuterst.

    Ganz ehrlich: Ich habe keine Lust, denn Sinn und Zweck jeder einzigen Zeile auf potentielle Fehler zu scannen. Dein Quelltext scheint mir recht sinnlos, warum befüllst du eine eindimensionales Array mit zwei For-Next-Schleifen und weist dann auch noch immer denselben Wert (sRange) zu. Evtl. hast du Glück und du findest jemanden, welcher mehr Zeit investieren mag. Ich melde mich, wenn du dein Problem etwas transparenter darstellst.

    Gruß Markus

    P.S.:
    also so:

    Visual Basic-Quellcode

    1. Dim arr As Variant
    2. arr = ActiveSheet.Range("A3:A30")
    3. MsgBox arr(2, 1)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „alchimist“ ()

    Hi,

    erstmal sorry. War gestern bischen in Eile und hab das Ganze doch recht unsauber hier reingestellt. Mea culpa!
    Zunächst muss ich dazu erklären, dass ich mit einem Programm arbeite, dass sich Arena nennt. Mit diesem Programm kannst Du alle möglichen Arten von Problemstellungen simulieren. Es ist blockstrukturiert, d.h. es gibt vorgefertigte Blocks wie Create-Module, Dispose-Module,etc. Zusätzlich hat man die Möglichkeit über sogennante VBA-Blocks auf Simultionsereignisse Einfluss zu nehmen.

    Mein Problem:

    Anfangs der Simultion möchte ich eine Initialisierungsliste (ein- evtl. auch mehrdimensional) zunächst von Excel in ein VB-Array laden. Es handelt sich hierbei um eine Art Produktionsplan. Danach sollen alle einzelnen Elemente aus dem Array genau in der Reihenfolge abgearbeitet werden in der Simultion, wie sie auch in der Tabelle stehn. Am besten sollen die Elemente, wenn sie in die Simulationsumgebung geladen wurden auch aus dem Array verschwinden. Und sie gesagt sollen alle Elemente in einer Schleife abgearbeitet werden. Da ich noch relativ grün bin, was VB anbelangt, hat sich doch das eine oder andere Problem aufgetan.

    Zum Beispiel auch, dass ich natürlich eine vorgegebene Größe für das Array verwenden könnte, was aber nicht so elegant ist, wie zuerst via Vb zu checken, wie viele Elemente stehn tatsächlich in der Tabelle und dementsprechend dann auch das Array auszulegen (Redim...).

    Die Zeile

    Visual Basic-Quellcode

    1. s.EntityAttribute(s.ActiveEntity, s.SymbolNumber("EndRun")) = sArray(i)


    ist eine zentraler Punkt. Arena bedient sich der Sprache SIMAN. Mit Hilfe von Dim s as SIMAN kann man jedoch die Verknüpfung zu VB herstelln.

    Visual Basic-Quellcode

    1. s.EntityAttribute(s.ActiveEntity, s.SymbolNumber("EndRun")) = sArray(i)



    ist hier eine Variable, die angibt, wie viel zB von Typ A produziert werden soll, bevor Typ B an der Reihe ist. EntityAttirbute weist jeder Entität gewisse Eigenschaften zu. Active Entity und SymbolNumer "" greift auf eine spezielle vorher definierte Eigenschaft der Entität zu.

    Wenn Du mir mit dieser Array-Geschichte weiterhelfen könntest, wär ich sehr dankbar.

    Nochmal sorry für das Chaos da oben.

    LG N

    P.S.: Kann ich, wenn in der Schleife, wenn ich die Elemente des Arrays abarbeite eine Select Case integrieren, dass je nach ankommendem Typ den entsprechenden Fall auslöst? Also sprich

    Visual Basic-Quellcode

    1. For i = 1 To ....
    2. Select Case
    3. Case Typ A
    4. Mach das und das
    5. Case Typ B
    6. Mach das und das
    7. ....
    8. End Select
    9. Next i



    Edit by Mad Andy:
    VB-Tag eingefügt, in Zukunft bitte selbst machen!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()