Doppelte For Funktion

  • Excel

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von Sam85.

    Doppelte For Funktion

    Hallo,

    ich wollte eine doppelte For Funktion ausführen, leider scheint dabei etwas noch nicht ganz zu stimmen:
    Y wird korrekt berechnet ergibt die Anzahl Tage im Monat. Und genauso oft soll der I Block ausgeführt werden bzw. in das Tabellenblatt eingefügt werden.
    Bisher erscheint er aber nur einmal. Was muss ich anders machen?

    VB.NET-Quellcode

    1. fspalte = ActiveSheet.Cells(5, ActiveSheet.Columns.Count).End(xlToLeft).Column + 1
    2. For y = 1 To (tbl.ListColumns(monat).DataBodyRange.Count - wsf.CountBlank(tbl.ListColumns(monat).DataBodyRange))
    3. datatherapeut = frmTherapeut.lb_therapeut.ListCount - 1
    4. Set datacells = Range(Cells(5, fspalte), Cells(5, fspalte).Offset(0, datatherapeut))
    5. frmTherapeut.lb_therapeut.RowSource = "dt_Therapeut[Nachname_Therapeut]"
    6. For i = 0 To frmTherapeut.lb_therapeut.ListCount - 1
    7. datacells(1, i) = frmTherapeut.lb_therapeut.List(i, 0)
    8. Next i
    9. Next y
    @VB1963 Ja genau die soll was machen :).

    Also es sollen Werte aus einer ListBox "Y"-Mal in die Spalten geschrieben werden.
    Die Werte "I" sind also alle Einträge aus der ListBox.
    Bisher läuft es so, dass alle Einträge aus der ListBox einmal auf die Tabelle geschrieben werden. Aber eigentlich soll Y dafür sorgen, dass das öfter passiert.
    Ich kann auch eine Beispiel Datei hochladen, falls es das einfach macht. :)
    Also y soll einfach diese liste ans Ende des ersten Eintrages stellen. Hoffe das Beispiel macht Sinn. Ansonsten ich stell die Datei auch gerne zur Verfügung.

    ​Kurz mal als Beispiel:

    i = 0 to end (Daten aus ListBox)
    A
    B

    Y = 1 to end (Ermittelte Länge einer Tabelle)

    Ergebnis
    AB AB AB
    Der bisherige Code schreibt die Nachnamen bis zu 31 Mal immer an die selben Stellen, da die Koordinaten immer gleich bleiben. Aber was willst Du in den Plänen genau drinhaben? Immer die selben Namen pro Spalte? Von morgens bis abends?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @VaporiZed ups...das ist ja nicht das was ich wollte :).
    Genau die Namen werden aus der ListBox geladen. Und die Uhrzeit steht einmal vorne, sozusagen der Rahmen des Plans. Dann soll für jeden Tag der Namensbereich dupliziert werden.
    In den Feldern selbst wird einfach mit Doppelklick die Auswahl gestartet um Werte in den Plan einzutragen.

    Ich würde auch gerne an den ersten erzeugten Namen und alle folgenden ersten Namen, den Tag aus der ListBox stehen haben.
    Diese Zeile wird dann in jeder Spalte in einer Combobox eingetragen und mit dem Goto befehlt selektiert.

    Das wäre dann aber erst das nächste :)..da wollte ich nämlich

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sam85“ ()

    @VaporiZed
    Um deine Fragen expliziter zu beantworten:

    Uhrzeit als einmalige Spalte (freezepane ist aktiv)
    Die Namen immer wiedererholend pro Spalte in derselben Zeile
    Und mit jeden y-namen Block, soll das datum aus der der tabelle, die zum Zählen verwendet wird, zwei zeilen über den namen hinzugefügt werden.

    Sam85 schrieb:

    Genau die Namen werden aus der ListBox geladen.
    meinetwegen

    Sam85 schrieb:

    Und die Uhrzeit steht einmal vorne, sozusagen der Rahmen des Plans.
    Uhrzeit soll in die erste Tabellenspalte. Ist sie ja schon bzw. macht ja Dein Makro.

    Sam85 schrieb:

    Dann soll für jeden Tag der Namensbereich dupliziert werden.
    keine Ahnung, was Du damit meinst.*

    Sam85 schrieb:

    In den Feldern selbst wird einfach mit Doppelklick die Auswahl gestartet um Werte in den Plan einzutragen.
    scheint das Formular zu betreffen und nicht Dein Codestolperstein, um den es hier geht.

    Sam85 schrieb:

    Ich würde auch gerne an den ersten erzeugten Namen und alle folgenden ersten Namen, den Tag aus der ListBox stehen haben.
    erster Name? alle folgenden ersten Namen? Wo bist Du da gedanklich und was stellst Du Dir darunter vor?*

    Sam85 schrieb:

    Diese Zeile wird dann in jeder Spalte in einer Combobox eingetragen und mit dem Goto befehlt selektiert.
    Comboboxeintrag bekommst Du bestimmt selber hin. GoTo? Wenns nicht mehr anders geht, ist das Programm falsch strukturiert.

    Sam85 schrieb:

    Das wäre dann aber erst das nächste :)..da wollte ich nämlich
    da wolltest Du was?


    Sam85 schrieb:

    Uhrzeit als einmalige Spalte (freezepane ist aktiv)
    freezepane hab ich gegooglet. Ist ja eh schon drin. Ne Problemfokussierung wäre hilfreich, sonst ertrinken wir in für uns irrelevanten Infos. Sorry für alle, die das anders sehen und die ich mit meiner Verallgemeinerung versehentlich miterfasst haben. Zumindest geht es aber mir so.

    Sam85 schrieb:

    Die Namen immer wiedererholend pro Spalte in derselben Zeile
    mögen sie sich gut erholen. Auch mehrmals ^^ wiederholend pro Spalte in derselben Zeile ?( *

    Sam85 schrieb:

    Und mit jeden y-namen Block, soll das datum aus der der tabelle, die zum Zählen verwendet wird, zwei zeilen über den namen hinzugefügt werden.
    den kapier ich gar nicht*

    *bitte Screenshot mit Ist- und Soll-Zustand. Ohne bin ich wohl zu inkompetent, es zu kapieren.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @VaporiZed :)...tut mir Leid wenn ich zu unpräzise war.

    warte hier ist ein Screenshot mit dem Ist und Soll Zustand.

    Es soll natürlich der Bereich mit den Namen so oft dupliziert werden, wie Tage im Monat vorhanden sind.

    Bzgl. dem ComboBox Eintrag. Im Grunde bekomme ich das hin, ich tu mir nur Schwer mit dem Code für "Suche immer in Zeile 2 von jeder benutzen Spalte"..

    VB.NET-Quellcode

    1. fspalte = ThisWorkbook.ActiveSheet.Cells(2, ActiveSheet.Columns.Count).End(xlToLeft).Column
    2. cb_tag.List = ThisWorkbook.ActiveSheet.Range("A2:E" & fspalte).Value


    und der entsprechenden Selektion. Ich bin noch am überlegen wie ich das am Besten aufbauen kann, eine Idee. Der Wert steht ja in der ComboBox aber nicht die Zeilen Bezeichnung?

    VB.NET-Quellcode

    1. Application.Goto reference:=Cells(Columns(5).Find(Date, lookat:=xlWhole).Row, 1), Scroll:=True
    Bilder
    • IST.PNG

      96,56 kB, 1.920×1.058, 19 mal angesehen
    • SOLL.PNG

      98,12 kB, 1.920×1.058, 19 mal angesehen
    Ok, alle Namen sooft wie Tage im Monat: check. Das y muss mit der Namenanzahl multipliziert in die datacells mit rein.

    Visual Basic-Quellcode

    1. Dim Offset As Integer
    2. For y = 1 To (tbl.ListColumns(monat).DataBodyRange.Count - wsf.CountBlank(tbl.ListColumns(monat).DataBodyRange))
    3. Offset = frmTherapeut.lb_therapeut.ListCount
    4. Set datacells = Range(Cells(5, fspalte), Cells(5, fspalte).Offset(0, datatherapeut))
    5. For i = 0 To frmTherapeut.lb_therapeut.ListCount - 1
    6. datacells(1, Offset * (y - 1) + i + 1) = frmTherapeut.lb_therapeut.List(i, 0)
    7. datacells(1, Offset * (y - 1) + i + 1).ColumnWidth = 30
    8. Next i
    9. Next y
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @VaporiZed Eins A :thumbsup: genau so wollte ich das.

    hier die Bilder zu dem Datum (Bild und Bild2). Dabei bin ich noch am Überlegen..am Ende wollte ich alle Spalten eines Monats auslesen für eine Tabelle zur Auswertung mit einer Splitfunktion (Bild3).
    Jedoch weiß ich nicht ob es dafür sinnvoller ist in jeder Spalte ein Datum stehen zu haben oder ob Excel erkennt wenn nichts drin steht das einfach das letzte genommen werden soll?!

    Hoffe das war zumindest etwas schlüssig. ;(
    Bilder
    • Bild.PNG

      100,1 kB, 1.920×1.058, 22 mal angesehen
    • Bild2.PNG

      91,61 kB, 1.920×1.058, 19 mal angesehen
    • Bild3.PNG

      96,19 kB, 1.920×1.058, 25 mal angesehen
    Datumszeile: check
    In die bestehende Schleife lässt sich auch das Datum einbauen. Mein Vorschlag:

    Visual Basic-Quellcode

    1. Dim ofs As Integer, Datum As Date
    2. For y = 1 To (tbl.ListColumns(monat).DataBodyRange.Count - wsf.CountBlank(tbl.ListColumns(monat).DataBodyRange))
    3. ofs = frmTherapeut.lb_therapeut.ListCount
    4. Set datacells = Range(Cells(5, fspalte), Cells(5, fspalte).Offset(0, datatherapeut))
    5. Datum = CDate(y & "." & cb_monat.ListIndex & "." & Right(tb_workbook.Text, 4))
    6. Cells(2, ofs * (y - 1) + 2).Value = WeekdayName(Weekday(Datum), True) & ", " & y & "."
    7. For i = 0 To frmTherapeut.lb_therapeut.ListCount - 1
    8. datacells(1, ofs * (y - 1) + i + 1) = frmTherapeut.lb_therapeut.List(i, 0)
    9. datacells(1, ofs * (y - 1) + i + 1).ColumnWidth = 30
    10. Next i
    11. Next y


    btw: MsgBox ("Der Kalender exestiert existiert bereits."), vbExclamation
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    Sam85 schrieb:

    kommt bei dir auch immer Freitag als Wochentag
    Es werden alle Wochentage aufgelistet. Als Kurzfassung. Auch Freitag, eben als Fr.. Soll der nicht auftauchen? Willst Du bestimmte Tage rausnehmen? Gehört Freitag bei Dir nicht zu Woche? => Ich find da Deine Frage ... irgendwie unklar.
    Einfach dran denken: existieren kommt von Existenz. Oder im Englischen: If something exists. Nicht exests.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Misverständnis. Bei mir steht überall Freitag siehe Bild (also kein Samstag bis Donnerstag). :)

    Ja das passiert mir manchmal im leider Eifer des Gefechts, dass ich Worte falsch schreibe. X/ manchmal vergesse ich auch welche...
    Bilder
    • Bild.PNG

      87,82 kB, 1.920×1.058, 26 mal angesehen
    Bei mir läuft's. Gab's nen Codeübertragungsfehler von Forum zu Excel? Anbei Deine FrmMain-CodeDatei mit funktionierenden Wochentagen zurück. Einfach als Komplettersatz. Keine Sorge, hab sonst nix verändert ;)
    Dateien
    • FrmMain.txt

      (9,99 kB, 15 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«