Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA zu kompliziert für mich

VBA zu kompliziert für mich
30.03.2023 15:25:04
Frank

Hallo zusammen,
ich habe hier ein Programm in einem Programm habe ich Daten und in einen anderen Programm habe ich andere Daten die danach alle in der Liste Sichtbar sein muss. Ich gebe hier in Programm1 die Artikelnummer und die Charge ( 632371 ) ein. In Programm 2 kann ich leider keine Charge eingeben und dann muss ich über das Datum alle Daten ziehen. Jetzt brauche ich die Daten genau wie die roten Zahlen sind. ( ab zeile 158 ) wie bekomme ich das per VBA hin. Es muss in VBA sein, da vorher (die Daten ziehen usw.. ) alles in VBA ist. Aber hier hänge ich. Die Frage2 wäre, wenn der Mitarbeiter die Daten nicht über Charge holt sondern über das MHD dann muss das gleiche prinzip über MHD laufen.

Kann mir jemand dabei helfen ???
https://www.herber.de/bbs/user/158510.xlsx

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA zu kompliziert für mich
30.03.2023 21:48:21
Frank
Guten Abend,
Ich habe jetzt versucht über makro einen Filter anzulegen aber das ging leider auch nicht.
Hmmm :-(


AW: VBA zu kompliziert für mich
31.03.2023 02:49:46
Piet
Hallo Frank

VBA ist nicht kompliziert, wenn man die Funktionen verstanden hat.
Du schreibst von Programn 1+2, ich kan aber kein Makro 1+2 finden!

Dein Beispiel ist für mich zu unverstaendlich. Da blicke ich noch nicht durch??
In Tabelle2 steht eine SAP Nummer, und Artikel Holz Buche. Den Artikel finde ich nicht in Tabelle1
Mir ist auch noch unklar welche Spalten aus Tabelle 1 nach Tabelle2 übernommen werden sollen??

mfg Piet.


Anzeige
AW: VBA zu kompliziert für mich
31.03.2023 07:05:20
MCO
Hallo Frank!

Klar kann man die Daten über VBA holen aber die sollten schon so beschrieben sein, dass sich auch zu unterscheiden sind.

Du willst eigentlich über die eingegebenen Daten im Kopf die Zeilen anfügen. Aber mit den Daten kommen deutlich mehr Zeilen in Frage.
Und das MHD dazuzunehmen grenzt es auf 1 bzw 2 Datensätze ein.

Was soll denn den Datensuchlauf auslösen? Die bloße Eingabe? Also: wenn Artikel + (charge oder MHD) gefüllt sind, dann such alle zutreffenden Daten und trag sie in Tab 1 ein? Oder ein Knopf, der die Suche startet? Ich vermute, die Daten werden angefügt und nicht ersetzt?

Fragen über Fragen
Gruß, MCO


Anzeige
AW: VBA zu kompliziert für mich
31.03.2023 09:45:59
Frank
Guten Morgen, danke das ihr mir dabei hilft.
Progamm1 heißt, das die Daten von dem Programm SAP ( Tabelle1)kommt. Programm2 heißt das die Daten vom Lagerprogramm kommt. Also zwei verschiedene Programme.
Also in SAP gebe ich die Artikelnummer ein und die Charge oder das MHD ( wenn ich beide Daten habe dann gebe ich beide ein ). Die Eingaben stehen dann auch in ( Tabelle1 ) Zelle C4,C5,C6
Es wird auch immer nur eine Artikelnummer eingegeben, weil diese Auswertung immer nur eine Artikelnummer betrifft.
Ich brauche Programm 2 ( Tabelle2 ) weil dort Daten sich befinden die in Programm1 nicht gibt und zum Schluß soll eine Liste entstehen.

Programm2 funktioniert so : Artikelnummer und den Zeitraum und anschließend kommen die Daten (Tabelle 2).

Das heißt, das Makro soll anhand (Tabelle1)Zelle C5 oder Zelle C6 ( oder beide wenn was drin steht ) im Programm2 Spalte J und K prüfen und wenn z.B. die Charge gefunden hat diese dann wie in Programm1 zeile 21 untereinander anzeigen lassen. Das MHD würde in Spalte J (Daten2) stehen.

Ich könnte mir auch vorstellen das in einem neuen Tabellenblatt dann alles zusammengefasst wird. Wichtig ist, dass ein Blatt entsteht zum herausdrucken.

Danke echt an alle. :-)


Anzeige
AW: VBA zu kompliziert für mich
31.03.2023 13:26:11
MCO
Hallo Frank!

Mindestens 1 Vorgabe, alles rüberholen, was passt.

Das sollte tun, was du verlangst:

Sub Daten_holen()

    chrg = Range("C5")
    MHD = Range("C6")
    
    If Len(chrg & MHD) = 0 Then antw = MsgBox("Gar keine Vorgabe wird alle Datensätze importieren...." & Chr(10) & "Willst du weitermachen?", vbExclamation + vbYesNo + vbDefaultButton2, "Keine Beschränkung")
    If antw > vbYes Then Exit Sub
    
    With Sheets(2)
        For Each rw In .UsedRange.Rows
        
            If IIf(chrg > "", .Cells(rw.Row, "J") = chrg, True) And IIf(MHD > "", .Cells(rw.Row, "K") = MHD, True) Then
                lz = Cells(Rows.Count, "A").End(xlUp).Row + 1
                Cells(lz, "A") = Cells(lz - 1, "A")
                Cells(lz, "D") = chrg
                Cells(lz, "F") = .Cells(rw.Row, "F")
                Cells(lz, "N") = .Cells(rw.Row, "E")
            End If
        Next rw
    End With
    
    Cells(lz, "A").CurrentRegion.Borders().Weight = xlThin
End Sub
Gruß, MCO


Anzeige
AW: VBA zu kompliziert für mich
31.03.2023 14:24:09
Frank
Hallo MCO,
Ich werde es heute gleich testen. Danke danke erstmal :-)


AW: VBA zu kompliziert für mich
31.03.2023 20:09:36
Frank
Hallo nochmal,
ich habe jetzt mal so getestet: ( die zwei If herausgenommen. ) da schaut es kannst gut aus. wenn er aber gar nichts findet wird Cells(lz, "A").CurrentRegion.Borders().Weight = xlThin gelb kann man hier sagen Msg Box: " keine Daten gefunden" ?

Sub Daten_holen()

 
     chrg = Range("C5")
     MHD = Range("C6")
     
    ' If Len(chrg & MHD) = 0 Then antw = MsgBox("Gar keine Vorgabe wird alle Datensätze importieren...." & Chr(10) & "Willst du weitermachen?", vbExclamation + vbYesNo + vbDefaultButton2, "Keine Beschränkung")
   '  If antw > vbYes Then Exit Sub
     
     With Sheets(2)
         For Each rw In .UsedRange.Rows
         
             If IIf(chrg > "", .Cells(rw.Row, "J") = chrg, True) And IIf(MHD > "", .Cells(rw.Row, "K") = MHD, True) Then
                 lz = Cells(Rows.Count, "A").End(xlUp).Row + 1
                 Cells(lz, "A") = Cells(lz - 1, "A")
                 Cells(lz, "D") = chrg
                 Cells(lz, "F") = .Cells(rw.Row, "F")
                 Cells(lz, "N") = .Cells(rw.Row, "E")
                 Cells(lz, "J") = MHD
             End If
         Next rw
     End With
     
     Cells(lz, "A").CurrentRegion.Borders().Weight = xlThin
 End Sub


Anzeige
AW: VBA zu kompliziert für mich
01.04.2023 02:48:17
Piet
Hallo Frank

du hast die Lösung doch schon selbst genannt, es nur nicht verstanden!!
Ersetze einfach diesen Befehl durch eine MsgBox. Das ist alles, so einfach!
Cells(lz, "A").CurrentRegion.Borders().Weight = xlThin --- Neuer Befehl:
MsgBox " keine Daten gefunden"

mfg Piet


AW: VBA zu kompliziert für mich
01.04.2023 09:10:48
Frank
Hallo Piet, ah bin ich blond :-)
Die Meldung kommt aber immer. :-(

noch eine Frage.: wenn ich keine Charge und kein MHD habe soll Excel alle daten vom Tabellenblatt 2 ab Zeile 2 in Tabelle 1 einpflegen.
Da wäre evtl eine MSG Box cool: Keine Charge ( in Zelle C5 ) und MDH ( in Zelle C6 )eingegeben, wollen sie ALLE Daten ziehen ? Dann JA wird alle gezogen und bei Nein abbrechen.

Und mal eine Frage, kann ich einen Tabellennamen vergeben ? statt Sheets2 sollte jemand die Tabellen verschieben oder eins hinzufügen ?

Danke ECHT. für eure kostbare Zeit.


Anzeige
AW: VBA zu kompliziert für mich
01.04.2023 17:43:51
Piet
Hallo Frank

ich habe den Code überarbeitet, das Makro hat jetzt drei getrennte Funktionen.
Alle Daten über MsgBox, MHD + Charge gemeinsam, oder MHD oder Charge einzel auswerten.
Probiere es bitte selbst aus. Dazu gibt es noch ein Löschprogramm mit MsgBox Abfrage.

Zum Tabellen Namen, öffne bitte mal den VBA Editor und die VBA Projekt Ansicht!
Dort siehst du zwei getrennte Namen für Tabellen, den VBA Objektnamen und den Reiternamen.
Ich verwende für Tabelle1 den VBA Namen Tabelle1 im Makro. (ist identisch mit Tabellen Namen)
Tabelle2 habe ich auf den VBA Namen "Daten" gesetzt, das musst du bei dir auch machen!

Danach könnt ihr den Reiternamen umbenennen wie ihr wollt, dem Makro ist das egal!
Ich hoffe du hast den Unterschied zwischen VBA Namen und Reiternamen verstanden.
Sonst experimentiere bitte mit einer Testdatei herum, bis es dir klar ist. Man sieht es sofort.
Den Reiternamen (Tabelle) kannst du manuelli aendern, den VBA Namen nur im Editor!

mfg Piet

Dim MHD As Variant, lz As Long
Dim Chrg As Variant, lz2 As Long

Sub Daten_holen_Neu()
Dim AC As Range, n As Integer
Dim Atw As Variant, rw As Long
    Chrg = Tabelle1.Range("C5")
    MHD = Tabelle1.Range("C6")
     
   If Len(Chrg & MHD) = 0 Then
      Atw = MsgBox("Wollen sie ALLE Daten ziehen ?", vbYesNo)
      If Atw = vbNo Then Exit Sub
   End If
   
     With Tabelle1   'Tabelle1
         'LastZell in Tabelle1 und Daten Tabelle
         lz2 = Daten.Cells(Rows.Count, 1).End(xlUp).Row
         lz = .Cells(Rows.Count, 1).End(xlUp).Row + 1
         
         For rw = 2 To lz2
             'Option:  Alle Daten auflisten
             If Antw = vbYes Then GoTo list
             'Option:  MHD + Charge gemeinsam auswerten
             If Chrg > "" And Daten.Cells(rw, "J") = Chrg And _
                MHD > "" And Daten.Cells(rw, "K") = MHD Then GoTo list
             'Option:  MHD oder Charge einzeln auswerten
             If Chrg > "" And Daten.Cells(rw, "J") = Chrg Or _
                MHD > "" And Daten.Cells(rw, "K") = MHD Then
list:           .Cells(lz, "D") = Chrg  'Charge
                .Cells(lz, "J") = MHD   'MHD
                .Cells(lz, "A") = .Cells(lz - 1, "A") 'Artikelnummer
                .Cells(lz, "B") = .Cells(lz - 1, "B") 'text
                .Cells(lz, "C") = .Cells(lz - 1, "C") 'Nummer
                .Cells(lz, "F") = Daten.Cells(rw, "F")
                .Cells(lz, "N") = Daten.Cells(rw, "E")
                 lz = lz + 1: n = n + 1
             End If
         Next rw
     End With
     
     If n = 0 Then MsgBox ("keine Daten gefunden")
 End Sub
Sub Daten_löschen()
Dim Atw As Variant, rw As Long
With Tabelle1   'Tabelle1
     lz = .Cells(Rows.Count, 1).End(xlUp).Row
     Atw = MsgBox("Wollen sie ALLE Kunden - Daten löschen ?", vbYesNo)
     If Atw = vbNo Then Exit Sub
     .Range("A10:R" & lz).ClearContents
     .Range("A10").Value = .Range("C4").Value
     MsgBox "Bitte Text und Nummer2 neu eingeben !"
End With
End Sub


Anzeige
AW: VBA zu kompliziert für mich
02.04.2023 11:49:50
Frank
Hallo Piet, Danke für deine hilfe ... Wahnsinn. Jetzt ist nur noch ein Fehler ich habe wie im Beispiel ein MHD und eine Charge da sollte er nur die Zeile 9 nehmen. Leider zieht es trotzdem alle 4 Chargen.

Als Test Charge 632371 und MHD: 03.02.2023 da muss jetzt in Tabelle Daten NUR die Zeile 9 nehmen.

Danke nochmal für alles

https://www.herber.de/bbs/user/158554.xlsm


AW: VBA zu kompliziert für mich
02.04.2023 14:29:18
Frank
Hallo Piet.
das Problem ist das der Mitarbeiter folgende Möglichkeiten hat.
1. nur über die Charge, dann muss Excel ALLE Chargen mit dem richtigen MHD ziehen.
z.B. Charge 639897 dann wären zwei Zeilen mit dem MHD 16.02.2023 und 03.02.2023 ( Zeile 17 und 18 )
2.nur über MHD, dann muss das MHD mit allen Chargen ziehen. z.B.
MHD.03.02.2023 dann muss alles mit diesem MHD gezogen werden. hier wären dann mit Charge 632371 und 639897 ( Zeile 9 und 18 )
3. er gibt ein MHD und eine Charge vor, z.b. Charge 632371 mit MHD 03.02.2023 dann muss Excel die Zeile 9 nehmen. weil nur da bei bedingungen vorhanden sind.
4. Sollte kein MHD oder Charge drin stehen, dann muss Excel alle Chargen mit MHD ziehen.

Als Info
Alle eingaben wie Charge, MHD oder gar nichts ( das wäre ein Zeitraum) findet in SAP statt und zieht die Listen.

Möchte mich nochmal für deine wertvolle Zeit bedanken. Hilfst mir echt .DANKE


Anzeige
AW: VBA zu kompliziert für mich
02.04.2023 14:43:06
Piet
Hallo Frank

Sorry, nicht ausreichend getestet, aber kein Problem. Jetzt sollte es klappen. Viel Spass damit ...

mfg Piet

  • Dim MHD As Variant, lz As Long
    Dim Chrg As Variant, lz2 As Long

    Sub Daten_holen_Neu()
    Dim AC As Range, n As Integer
    Dim Atw As Variant, rw As Long
        Chrg = Tabelle1.Range("C5")
        MHD = Tabelle1.Range("C6")
         
       If Len(Chrg & MHD) = 0 Then
          Atw = MsgBox("Wollen sie ALLE Daten ziehen ?", vbYesNo)
          If Atw = vbNo Then Exit Sub
       End If
       
         With Tabelle1   'Tabelle1
             'LastZell in Tabelle1 und Daten Tabelle
             lz2 = Daten.Cells(Rows.Count, 1).End(xlUp).Row
             lz = .Cells(Rows.Count, 1).End(xlUp).Row + 1
             
             For rw = 2 To lz2
                 'Option:  Alle Daten auflisten
                 If Antw = vbYes Then GoTo list
                 'Option:  MHD + Charge gemeinsam auswerten
                 If Chrg > "" And MHD > "" Then
                    If Daten.Cells(rw, "J") = Chrg And _
                       Daten.Cells(rw, "K") = MHD Then GoTo list
                  'Option:  MHD oder Charge einzeln auswerten
                 ElseIf Chrg > "" And Daten.Cells(rw, "J") = Chrg Or _
                    MHD > "" And Daten.Cells(rw, "K") = MHD Then
    list:           .Cells(lz, "D") = Chrg  'Charge
                    .Cells(lz, "J") = MHD   'MHD
                    .Cells(lz, "A") = .Cells(lz - 1, "A")   'Artikelnummer
                    .Cells(lz, "B") = .Cells(lz - 1, "B")   'text
                    .Cells(lz, "C") = .Cells(lz - 1, "C")   'Nummer
                    .Cells(lz, "D") = Daten.Cells(rw, "J")  'Charge
                    .Cells(lz, "F") = Daten.Cells(rw, "F")
                    .Cells(lz, "N") = Daten.Cells(rw, "E")
                     lz = lz + 1: n = n + 1
                 End If
             Next rw
         End With
         
         If n = 0 Then MsgBox ("keine Daten gefunden")
     End Sub



  • Anzeige
    AW: VBA zu kompliziert für mich
    02.04.2023 14:52:57
    Frank
    Hallo Piet, sieht klasse aus, werde es morgen gleich in der Hauptliste testen.
    Danke echt, ich könnte die Knutschen :-)

    Danke Danke und einen schönen Sonntag


    AW: VBA zu kompliziert für mich
    02.04.2023 18:15:57
    Piet
    Hallo Frank

    freut mich zu hören, wünsche dir von Herzen das alles richtig klappt. Toi, toi, toi
    Fliege Montag Abend in Urlaub, habe dort kein Internet, kann dir dann nicht mehr helfen!
    Bin gespannt auf dein Testergebnis ...

    mfg Piet

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige