Microsoft Excel

Herbers Excel/VBA-Archiv

Warum läuft diese Prozedur nicht?

    Betrifft: Warum läuft diese Prozedur nicht? von: FriederW
    Geschrieben am: 28.08.2003 08:32:23

    Hallo VBA-Experten,
    aus diesem Forum wurde mir freundlicherweise die unten aufgeführte Prozedur übermittelt, die die nachfolgend beschriebene Aufgabenstellung bewältigen sollte:

    In drei identischen Tabellen (Tabellenblätter "P1", "P2" und "P3") befinden sich in den Spalten B, C und D (jeweils ab Zeile 4) Datensätze, die in Abhängigkeit einer Angabe in der entsprechenden Zeile in Spalte E (dort können die Angaben "V1" oder "V2" stehen) in die bereits bestehenden Tabellenblätter "V1" bzw. "V2" jeweils ab Zeile 4 - als kompletter Datensatz in die Spalten B bis D übernommen werden sollen. Das heißt also, dass die Tabelle "V1" der Reihe nach mit den Datensätzen gefüllt wird, bei denen in der jeweiligen Zeile in den Tabellen "P1", "P2" oder "P3" in Spalte E "V1" vermerkt ist (entsprechendes gilt für die Tabelle "V2"). In den auszufüllenden Tabellen "V1" bzw. "V2" sollte in Spalte E mit der Angabe "P1", "P2" oder "P3" ein Hinweis auf die "Herkunft" des jeweiligen Datensatzes gegeben werden.

    Starte ich die Prozedur, werden zwar die Tabellen "V1" und "V2" geleert, mehr tut sich aber leider nicht, d.h. es werden keinerlei Werte aus den Tabellen "P1", "P2" oder "P3" in die Tabellen "V1" oder "V2" übertragen.

    Eine Fehlermeldung beim Ablauf der Prozedur erscheint allerdings auch nicht.

    Woran liegt das? Würde mich sehr freuen, wenn ihr mir bei der "Fehlersuche" behilflich sein könntet. Ganz herzlichen Dank dafür bereits an dieser Stelle!

    Mfg
    Frieder

      


    Betrifft: Und wo ist die Prozedur? von: RAnton
    Geschrieben am: 28.08.2003 08:50:25

    -


      


    Betrifft: AW: Sorry - Hier ist die Prozedur! von: FriederW
    Geschrieben am: 28.08.2003 09:09:58

    Hallo und Entschuldigung,
    versehentlich habe ich vergessen, die Prozedur beizufügen, was ich hiermit nachhole.
    Passiert im Eifer des Gefechts, ich wollte den Code unbedingt zum Laufen bringen, allein schaffe ich das aber wohl nicht, daher die Hektik. Sorry.
    Mfg
    Frieder

    Sub fillSheets()
     Dim lV1_cnt, lV2_cnt As Integer
     Dim l_sheetname As String
     
     'Zielbereiche leeren
     For i = 1 To 2
       Sheets("V" & CStr(i)).Range("B4:E65536") = ""
     Next i
     lV1_cnt = 0
     lV2_cnt = 0
     
     'Zielbereiche füllen
     For j = 1 To 3
       For k = 4 To 65536
         l_sheetname = Sheets("P" & CStr(j)).Cells(k, 5)
         If IsNull(CVar(l_sheetname)) Or _
            IsEmpty(CVar(l_sheetname)) Or _
            l_sheetname = "" Then
            Exit For
         ElseIf l_sheetname = "V1" Then
            lV1_cnt = lV1_cnt + 1
            For l = 2 To 4
              Sheets(l_sheetname).Cells(lV1_cnt + 3, l) = Sheets("P" & CStr(j)).Cells(k, l)
            Next l
            Sheets(l_sheetname).Cells(lV1_cnt + 3, 5) = "P" & CStr(j)
         ElseIf l_sheetname = "V2" Then
            lV2_cnt = lV2_cnt + 1
            For m = 2 To 4
              Sheets(l_sheetname).Cells(lV2_cnt + 3, m) = Sheets("P" & CStr(j)).Cells(k, m)
            Next m
            Sheets(l_sheetname).Cells(lV2_cnt + 3, 5) = "P" & CStr(j)
         End If
       Next k
     Next j
    End Sub
    





      


    Betrifft: AW: Sorry - Hier ist die Prozedur! von: RAnton
    Geschrieben am: 28.08.2003 09:28:41

    Hallo Frieder,
    also an dem Code scheint nix merkwürdiges zu sein.
    Bist du mal im Debug-Modus im Einzelschritt durch und hast dir angeschaut, was die einzelnen Codezeilen machen?

    Gruß
    RAnton


      


    Betrifft: AW: Sorry - Hier ist die Prozedur! von: Nike
    Geschrieben am: 28.08.2003 09:30:06

    Hi,
    könntest du mal die Datei bzw einen Ausschnitt dieser Datei posten?
    ggf mit der Seite, wo die Ergebnisse her kommen und hin sollen
    per Kommentar beschrieben ;-)

    l_sheetname = Sheets("P" & CStr(j)).Cells(k, 5)
    könntest du auch einfacher haben
    l_sheetname = worksheets(j).Cells(k, 5)

    das hier
    If IsNull(CVar(l_sheetname)) Or _
    IsEmpty(CVar(l_sheetname)) Or _
    l_sheetname = "" Then
    geht wohl auch so:
    If l_sheetname = "" Then
    oder?

    Bye

    Nike


      


    Betrifft: AW: Sorry - Hier ist die Prozedur! von: FriederW
    Geschrieben am: 28.08.2003 10:33:07

    Hallo Nike,
    füge Dir hier den Entwurf der betreffenden Datei bei.
    Schön, wenn Du mir helfen könntest.
    Hier bereits besten Dank für Deine Mühe.
    Mfg
    Frieder

    https://www.herber.de/bbs/user/756.xls


      


    Betrifft: AW: Sorry - Hier ist die Prozedur! von: Nike
    Geschrieben am: 28.08.2003 13:17:02

    Hi,

    in deinem Code wird auf V1 geprüft, dabei stehen in den Spalten nur P1-P3 oder leer

    ElseIf l_sheetname = "V1" Then

    Ansonsten müßtest du mal zu deinen Tabellen dazuschreiben,
    was von wo wohin kopiert werden soll- das hab ich noch nichtganz verstanden ;-)

    Bye

    Nike


      


    Betrifft: AW: Sorry - Hier ist die Prozedur! von: FriederW
    Geschrieben am: 28.08.2003 13:31:02

    Hallo Nike,
    ich glaub, dass die Beschreibung der Aufgabenstellung etwas zu wünschen übrig läßt.
    Zudem hab ich in der geposteten Datei jeweils die Zellen E3 in den Tabellen V1 und V2 nicht korrekt bezeichnet, dort muss nicht Vertreter, sondern jeweils Produkt stehen.
    Damit dürfte die Aufgabenstellung etwas leichter nachvollziehbar sein: Also sämtliche Werte aus den Spalten A bis E der Tabellen P1, P2, und P3 sollten in die Tabellen V1 oder V2 übertragen (kopiert werden; diese Tabellen also zeilenweise "gefüllt" werden) und zwar, die Datensätze bei denen in der Ursprungstabelle (P1, P2, P3) in der Spalte E V1 steht in die Tabelle V1 (entsprechend in Tabelle V2,wenn V2 in der Spalte E steht). In den Zieltabellen (V1 bzw. V2) sollte dann in der Spalte E (korrekte Bezeichnung: Produkt) entsprechend P1, P2 oder P3 (je nach Ursprung des Datensatzes) stehen.
    Vielleicht hilft diese Beschreibung. Bereits besten Dank für Deine bisherige Mühe.

    Mfg
    Frieder


      


    Betrifft: AW: Sorry - Hier ist die Prozedur! von: Nike
    Geschrieben am: 28.08.2003 13:58:09

    Hi,
    der Fehler bleibt derselbe ;-)
    In der Spalte stehen nur Werte wie
    z.B. P1 bis P3 und keine V1 oder V2 Werte,
    daher wird dein Code nix finden...

    Bye

    Nike


      


    Betrifft: Danke! - und eine letzte Frage! von: FriederW
    Geschrieben am: 28.08.2003 16:48:39

    Hi Nike,
    danke, das hätte ich eigentlich selbst merken müssen, aber manchmal steht man richtig auf der Leitung.
    Würde mich freuen, wenn Du mir zeigen würdest, wie der Code verändert werden muss, wenn möglicherweise aus vier (statt bisher 3) Produkttabellen (also eine weitere Tabelle "P4"), die Werte in 3 Vertretertabellen (bisher 2, also eine weitere Tabelle "V3") übertragen werden sollen.
    Wäre schön, wenn Du mir helfen kannst, ansonsten auch so bereits herzlichen Dank für Deine Arbeit.
    Mfg Frieder


      


    Betrifft: AW: Danke! - und eine letzte Frage! von: Nike
    Geschrieben am: 29.08.2003 09:11:13

    Hi Frieder,

    in diesem Code ist aber jetzt nicht korrigiert, das nach V gesucht wird...

    Sub fillSheets()
    Dim lV1_cnt As Integer    
    Dim lV2_cnt As Integer    
    Dim l_sheetname As String  
    Dim j As Integer    
    Dim k As Long  
    'Zielbereiche leeren
    For i = 1 To 2  
      Sheets("V" & CStr(i)).Range("B4:E65536").ClearContents
    Next i
    lV1_cnt = 0
    lV2_cnt = 0

    'Zielbereiche füllen
    For j = 1 To 4   'Hier sind die Variablen die nach "P" angefügt werden
        For k = 4 To 65536  
            l_sheetname = Sheets("P" & CStr(j)).Cells(k, 5)
            If l_sheetname = "" Then  
                Exit For  
            ElseIf l_sheetname = "V1" Then    
                lV1_cnt = lV1_cnt + 1
                For l = 2 To 4  
                    Sheets(l_sheetname).Cells(lV1_cnt + 3, l) = Sheets("P" & CStr(j)).Cells(k, l)
                Next l
                Sheets(l_sheetname).Cells(lV1_cnt + 3, 5) = "P" & CStr(j)
            ElseIf l_sheetname = "V2" Then    
                lV2_cnt = lV2_cnt + 1
                For m = 2 To 4  
                    Sheets(l_sheetname).Cells(lV2_cnt + 3, m) = Sheets("P" & CStr(j)).Cells(k, m)
                Next m
                Sheets(l_sheetname).Cells(lV2_cnt + 3, 5) = "P" & CStr(j)
            End If  
        Next k
    Next j
    End Sub  


    Bye

    Nike


      


    Betrifft: Vielen Dank! Habe einiges gelernt. von: FriederW
    Geschrieben am: 29.08.2003 11:58:48

    Hi Nike,
    fünf Dinge habe ich Dir noch mitzuteilen:
    1. Ich habe aus Deinen Hilfen einiges gelernt,
    2. Ich habe aber auch gesehen, dass ich in Sachen VBA noch unheimlich viel lernen muss
    3. Ich bewundere (und beneide)solche VBA Experten wie Dich um diese Kenntnisse
    4. Ich freue mich, dass solche Könner so großzügig Neulingen immer wieder Hilfe anbieten
    5. Ich bedanke mich dafür ganz herzlich bei Dir (u. allen anderen die mir geholfen haben)

    Mfg
    Frieder


     

    Beiträge aus den Excel-Beispielen zum Thema " Warum läuft diese Prozedur nicht?"