Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Daten aus anderer Datei verarbeiten
#1
Hallo zusammen,

und zwar geht es mir darum das ich eine Maschinenliste pflege.

In dieser Maschinenliste gibt es Stellplätze der Maschinen.

Ich hätte gerne einen vba code der die Maschinen nach der Seriennummer (welche in Spalte C steht) sucht und im Wochenplan die gleiche Seriennummer sucht (dort in spalte B)

und mir dann in meiner Liste den aktuellen Stellplatz des Wochenplanes einträgt. Findet er Maschinen nicht im Wochenplan soll er diese ignorieren.


Ich hoffe mir kann jemand dabei helfen. Bisher habe ich mit Hilfe von Gast 123 meinen anderen Step bewältigt bekommen um in einer anderen Liste Maschinen zu suchen und einzutragen in meine. Das ist schon mal super.



Mein nächster Schritt wäre eben nun der Abgleich des Stellplatzes.


Ich hoffe auf Hilfe und vielen Dank schon mal dafür.


Grüße René


P.S. ich habe einen Abgleich mit Ladebalken drin die Form heißt DatenAbgleich. Dies ist aber sehr einfach und guckt in einer anderen Datei ob die Maschine mit der Seriennummer vorhanden ist oder nicht. Wenn Sie da ist setzt sie auf Yes und wenn nicht auf No.
Das bräuchte ich eben evtl. komplexer für den Wochenplan bei dem er die Stellplätze updatet :)

Der VBA Bereich ist pw geschützt. Sorry vergessen. Das Passwort ist 0815


Angehängte Dateien
.xlsm   Liste.xlsm (Größe: 877,93 KB / Downloads: 5)
.xlsx   Wochenplan.xlsx (Größe: 86,82 KB / Downloads: 3)
Antworten Top
#2
Moin!
Mal ganz auf die schnelle und ungetestet, könnte es so gehen;

Code:
Dim zielpfad As String
Dim quelle
Dim ziel
Dim anzzeilen As Long
Dim zeile As Long
Dim suche

zielpfad = "C:\....\Wochenplan.xlsx" 'anpassen

Set quelle = ActiveSheet

anzzeilen = quelle.Cells(Row.Count, 3).End(xlUp).Row

Set ziel = Workbooks.Open(zeilpfad)

For zeile = 19 To anzzeilen

   If quelle.Cells(zeile, 3) <> "" Then
       Set suche = ziel.Worksheets(1).Columns(2).Find(quelle.Cells(zeile, 3), lookat:=xlWhole)
       If Not suche Is Nothing Then
           quelle.Cells(zeile, 8) = suche.Offset(, 1)
       End If
               
   End If

Next

ziel.Close

Dabei sollte der Stellplatz aus dem Blatt in das Blatt Spalte 8 überrtagen werden.
VG
[-] Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:
  • UltraTM
Antworten Top
#3
Hallo,

zu spät (und wohl etwas umständlich):

Code:
'im Sheets("Wochenplan"), sollte aber auch aus Liste gehen

Sub F_en()
Dim WSF As WorksheetFunction: Set WSF = Application.WorksheetFunction
Dim Plan As Workbook: Set Plan = Workbooks("Wochenplan.xlsx")
Dim Liste As Workbook: Set Liste = Workbooks("Liste 0815.xlsm")

With Plan.Sheets("Aktuell")
    lr = .Cells(Rows.Count, 2).End(xlUp).Row
    Ar = .Range("B10:C" & lr)
End With

With Liste.Sheets("Maschinenliste")
    lr = .Cells(Rows.Count, 3).End(xlUp).Row
    For i = 19 To lr
        St = WSF.VLookup(.Cells(i, 3), Ar, 2, 0)
        If Not VBA.IsError(St) Then .Cells(i, "H") = St
    Next i
    
End With

Set Plan = Nothing
Set Liste = Nothing
End Sub

Der vorhandene Code ist eigentlich gut geschrieben und komplizierter als die jetzige Frage (???).

mfg

(was bedeuten den die Codes der 14 Teams: sind die Base64 kodiert)
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • UltraTM
Antworten Top
#4
@Fennek

Das klappt.

Ich hoffe nur es funktioniert auch wenn dort mehrere hundert Maschinen drin sind.

Das erste DatenAbgleichen da hat mir jemand geholfen ich habe dann das Ladebalkenzeugs noch eingebaut um auch zu sehen das sich was tut inklusive einem Feedback.


Jetzt muss ich nur noch sowas bauen um Kunden und die 2 Termine abzugleichen. Habe versucht deins umzuschreiben das ich auch die 3 anderen Sachen aus der Master Datei bekomme aber da kommt immer ein Laufzeitfehler oder Typen unzulässig.

Im Anhang mal die Master Datei. bei mir ist Kunde in Spalte E und in der LIste in U. Das Fertigstellungsdatum ist bei mir in F und dort in AC der Abholtermin bei mir in G und dort in AD.


Meine Liste ist die Maschinenliste. Die anderen sind aus anderen Abteilungen welche ich auf dem Server dann eben abfragen/öffnen kann zum abgleichen um mich leichter zutun, Daher das Makro VBA Zeugs. Alles von Hand ist sehr mühsam :(


Auch danke an 1Mathias


Grüße René


Angehängte Dateien
.xlsx   Master.xlsx (Größe: 123,92 KB / Downloads: 3)
Antworten Top
#5
(17.08.2018, 21:15)Fennek schrieb: Hallo,

zu spät (und wohl etwas umständlich):

Code:
'im Sheets("Wochenplan"), sollte aber auch aus Liste gehen

Sub F_en()
Dim WSF As WorksheetFunction: Set WSF = Application.WorksheetFunction
Dim Plan As Workbook: Set Plan = Workbooks("Wochenplan.xlsx")
Dim Liste As Workbook: Set Liste = Workbooks("Liste 0815.xlsm")

With Plan.Sheets("Aktuell")
   lr = .Cells(Rows.Count, 2).End(xlUp).Row
   Ar = .Range("B10:C" & lr)
End With

With Liste.Sheets("Maschinenliste")
   lr = .Cells(Rows.Count, 3).End(xlUp).Row
   For i = 19 To lr
       St = WSF.VLookup(.Cells(i, 3), Ar, 2, 0)
       If Not VBA.IsError(St) Then .Cells(i, "H") = St
   Next i
   
End With

Set Plan = Nothing
Set Liste = Nothing
End Sub

Der vorhandene Code ist eigentlich gut geschrieben und komplizierter als die jetzige Frage (???).

mfg

(was bedeuten den die Codes der 14 Teams: sind die Base64 kodiert)

Das klappt.

Ich hoffe nur es funktioniert auch wenn dort mehrere hundert Maschinen drin sind.

Das erste DatenAbgleichen da hat mir jemand geholfen ich habe dann das Ladebalkenzeugs noch eingebaut um auch zu sehen das sich was tut inklusive einem Feedback.


Jetzt muss ich nur noch sowas bauen um Kunden und die 2 Termine abzugleichen. Habe versucht deins umzuschreiben das ich auch die 3 anderen Sachen aus der Master Datei bekomme aber da kommt immer ein Laufzeitfehler oder Typen unzulässig.

Im Anhang mal die Master Datei. bei mir ist Kunde in Spalte E und in der LIste in U. Das Fertigstellungsdatum ist bei mir in F und dort in AC der Abholtermin bei mir in G und dort in AD.


Meine Liste ist die Maschinenliste. Die anderen sind aus anderen Abteilungen welche ich auf dem Server dann eben abfragen/öffnen kann zum abgleichen um mich leichter zutun, Daher das Makro VBA Zeugs. Alles von Hand ist sehr mühsam :(


Auch danke an 1Mathias


Grüße René
Antworten Top
#6
Hallo,

als ich angefangen habe, plante ich (wie Mathias) ein "Range.Find", der übliche Ansatz. Dann wollte ich einmal ausprobiren, ob ein "VLookUp" auch mit Arrays geht.

Die Frage ist, warum nicht gleich einen "=SVerweis()"?

Falls sich der Dateiname "Wochenplan" ändern sollte, kann man dies mit ".Links.ChangeLink" anpassen.

mfg
Antworten Top
#7
Hallo,

Problem ist es sind nie alle Maschinen im Wochenplan.

Es ist folgendes. Die Master Datei ist aus der Logisitkabteilung daher weiß man welche Maschinen bei uns sind Kunden haben usw und wenn sie wieder rausgehen.

Die Produktion hingegeben hat jede Woche einen neuen Wochenplan in dem die Maschinen drin sind die aktuell gefertigt werden müssen.


Meine Liste ich bin eben aus der QS und brauche einen Überblick und auch eine Doku eben wer welche Maschine angeguckt hat usw. Das heißt bei mir bleiben alle Maschinen drin. 
Im wochenplan nicht dieser wird 1x die woche geschickt und in der Master Liste werden gelieferte Maschinen in ein anderes Blatt verschoben Monat für Monat.


Daher ist mir ein VBA code ganz lieb der sich die infos holt und sie dann bei mir bleiben. Wie eben mein DatenAbgleich für die Abholungen. Ist die Maschine aus meiner Liste in der Master Liste ist sie in der Firma sprich "Yes" ist sie nicht mehr in der Liste wurde sie ausgeliefert und bei mir "No" und ich kann sie ausblenden mit einem Filter.

Es kann eben immer mal passieren das beim Kunden ein Problem auftaucht und ich dann eben nachgucken will wer die Maschine den geprüft hat.


Dies nur als Erklärung wie der Ablauf ist :)

Daher wäre es für mich gut den Kunden, Fertigstellungsdatum und Lieferdatum auch abgleichen zu können, da mal was verschoben wird oder eben Lagermaschinen dann einen Kunden haben.



Ich bin leider nicht so der vba profi und für mich war es letztes jahr ein ganz schönes Stück den DatenAbgleich mit einem Ladebalken, Feedback und Fehler zu versehen :D

Vielleicht kann ja ein Profi wie du mir helfen den Datenabgleich um zubauen das ich

1 mal ihn noch extra habe also als neue Form für Stellplatz Abgleich
und 1 mal ihn extra als Abgleich für Kunde, Fertigstellungsdatum und Abholdatum habe.

Da die Daten ja in verschiedenen Listen sind und ich dann gewollt bestimmte Sachen abrufen kann.

Das macht soviel Arbeit im Moment immer alles per Hand zu prüfen und up zu daten.

Grüße René
Antworten Top
#8
Hier der Code des Abgleiches welchen ich gerne nutzen würde um andere Daten abzugleichen anstatt einfach alles zu löschen und nur wenn es gefunden wir Yes oder wenn nicht No eingetragen wird:

Code:
'Option Explicit

Const AbgDatei = "MASTER HTIG PRODUCTION"  'Original Name der Abgleich Datei
Const Deliver1 = "Overview"      'kann jedes Jahr geandert werden
Const MaschSpa = "F"    'Spalte der Maschinen Nummer (F) oder als Nummer
Const MZ1 = 19   '1.Zeile in Maschinenliste wahlweise 19 oder 22


Private Sub CommandButton1_Click()
   MitKommentar
End Sub
Private Sub MitKommentar()
'Als erste deklarieren wir unsere Variablen
'Den Zähler i für die aktuelle Zeile
   'Dim i As Long
   'Die letzte Zeile
   'Dim lzML As Long
   'Variablen um die prozentualen Anteil zu ermitteln
   Dim Prozent As Double
   Dim ProzentAktuell As Double
   Dim ProzentLänge As Double
   'Berechnung Dauer des Vorgangs
   Dim DaZeit As Date
   DaZeit = Time
   
   'Die Berechnung
   Dim lzDV As Long, lzML As Long, OldTxt
   Dim rFind As Range, MaschNr As String
   Dim Wb As Workbook, DEL As Worksheet
   Dim i As Long, n As Long
   
   'Button deaktivieren
   CommandButton1.Enabled = False
   'Zu Fehler springen wenn Blatt/Datei Falsch
   On Error GoTo Fehler
   Set Wb = Workbooks(AbgDatei)
   Set DEL = Wb.Worksheets(Deliver1)
   lzDV = DEL.Cells(Rows.Count, 1).End(xlUp).Row

   'Startzeit in Label schreiben
   Me.Label34.Caption = Time
   'Andere Label leeren
   Me.Label35.Caption = ""
   Me.Label37.Caption = ""
   Me.Label38.Caption = ""
   'Statusbar alten Text speichern
   OldTxt = Application.StatusBar
   'Um das ganze ein wenig zu beschleunigen schalten wir vorübergehend
   'die Bildschirmaktualisierung aus
   Application.ScreenUpdating = False
   'Als erstes setzen wir die Variable Prozent auf null
   Prozent = 0
   With ThisWorkbook.Worksheets("Maschinenliste")
       'Nun ermitteln wir die letzte Zeile unserer Tabelle
       lzML = .Cells(Rows.Count, 1).End(xlUp).Row
       'Alle Zeilen auf nein Setzen
       .Range("D" & MZ1 & ":D" & lzML) = "No"
       'Nun setzen wir unsere Schleife auf
       For i = MZ1 To lzML

           'Suchen der Maschinen die in der Liste sind
           'und diese abgleichen
           'In Statusbar anzeigen
           Application.StatusBar = " Zeile " & i & "  von  " & lzML & " mit Maschinen wird abgeglichen "
           MaschNr = .Cells(i, 3).Value
           If Left(MaschNr, 1) = "!" Then MaschNr = Mid(MaschNr, 2, 50)
           Set rFind = DEL.Columns(MaschSpa).Find(What:=MaschNr, after:=Cells(1, MaschSpa), LookIn:=xlValues, _
           lookat:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
           
           If Not rFind Is Nothing Then _
            .Cells(i, 4) = "Yes": n = n + 1
           'Da wir die Exceltabelle und die Userform gleichzeitig bearbeitet werden
           ' müssen wir einen eine Aufgabe in den Arbeitsspeicher auslagern.
           'Ansonsten sehen wir zur Laufzeit keine Veränderungen an der Progressbar.
           'Um dies zu realisieren übergeben wir die Ermittlung der Wochentage mit
           '"Do Events" an den Arbeitspeicher.
           DoEvents

           'Um den aktuellen Fortschritt anzeigen zu können ermitteln wir
           'als nächstes anhand unseres Zählers und der letzten Zeile den
           'prozentualen Wert. -1 da wir in der 2. Zeile beginnen.
           ProzentAktuell = (i - MZ1) / (lzML - MZ1) * 100

           'Unser Prozentlabel hat eine Länge (width) von 500. Wir teilen
           'diese durch 100 und multiplizieren das Ergebnis mit den zuvor
           'ermittelten Fortschritt. Anschließend können wir unsere Elemente
           'mit diesem Ergebnis exakt positionieren.
           ProzentLänge = 500 / 100 * ProzentAktuell

           'Nun zeigen wir unserem User den aktuellen Fortschritt
           Prozentanzeige.Caption = Format(ProzentAktuell, "##0") & " %"

           'Außerdem interessiert dem User die aktuelle Position unserer Tabelle
           Zeile.Caption = "Zeile " & i & " von " & lzML & " Zeilen bearbeitet "

           'Die Breite unseres Fortschrittbalkens wird um die Prozentlänge erhöht.
           Fortschritt.Width = ProzentLänge
           'Hier zeigen wir das aktuelle Datum sowie den ermittelten Tag
           aktuellesDatum.Caption = .Cells(i, 1) & " - " & .Cells(i, 3) & " _ " & .Cells(i, 4) & " _ " & .Cells(i, 5)

           'Die linke Position unserer Prozentanzeige, die "Mitfährt", wird durch die
           'steigende Breite des Fortschrittbalkens nach links verschoben.
           '-47 da dies die Breite des Labels ist.
           Prozentanzeige.Left = Fortschritt.Width - 47


           'Abhängig vom prozentualen Fortschritt manipulieren wir nun die Farbe unseres
           'Fortschrittslabels und ändern die Caption unserer Userform entsprechend.
           Select Case ProzentAktuell
           Case Is > 85
               'Me.Caption = "Ich bin gleich fertig"
               Fortschritt.BackColor = vbGreen
           Case Is < 50
               'Me.Caption = "Es dauert noch eine Weile"
               Fortschritt.BackColor = vbRed
           Case Is > 49
               Fortschritt.BackColor = vbYellow
               'Me.Caption = "Mehr als die Hälfte ist geschafft"
           End Select
       Next i

   End With
   'Um unser Ergebnis anzuzeigen schalten wir zuletzt die Bildschirmaktualisierung wieder
   'ein
   Application.ScreenUpdating = True
'MsgBox n & "  Maschinen aus der Liste sind in den Produktionshallen."
'Endzeit in Label schreiben
Me.Label39.Caption = CDate(Time - DaZeit)
Me.Label35.Caption = Time
Application.StatusBar = OldTxt
'Ergebnis in Labels schreiben
Me.Label37.Caption = n & "  Maschinen aus der Liste sind in den Produktionshallen"
Me.Label38.Caption = "Die restlichen Maschinen wurden auf (No) gesetzt"
'Button deaktivieren
CommandButton1.Enabled = True
Exit Sub

'Fehler:  MsgBox "Unerwarteter Fehler - Richtige Datei mit richtigem Blatt geöffnet ??"
Fehler:  MsgBox " Datei: " & AbgDatei & " - Blatt:  " & Deliver1 & Chr(10) & "Datei geöffnet? und/oder Name richtig geschrieben??" & Chr(10), vbOKOnly, " Fehler bitte prüfen " '& Error()
CommandButton1.Enabled = True
End Sub


Dies wäre super wenn ich das z.b. nutzen könnte um eben aus der Liste die spalten Kunde, Fertigungsdatum und Abholdatum mit meiner abgleichen könnte.

Kunde  - meine Liste Spalte E    - Die andere Liste Spalte U
Fertigungsdatum - meine Liste Spalte F  - Die andere Liste Spalte AC
Abholdatum - meine Liste Spalte G  - Die andere Liste Spalte AH
Antworten Top
#9
Hallo

ich fühle mich geehrt wenn etwas gut klappt.
Habe 1/2 Jahr Pause gemacht und weiss im Augenblıck nicht mehr genau welche Datei das war?
Kannst du mir bitte eine Beispieldatei mit gewünschter Lösung schicken das ich wieder reinkomme.

mfg  Gast 123
Antworten Top
#10
(22.08.2018, 18:58)Gast 123 schrieb: Hallo

ich fühle mich geehrt wenn etwas gut klappt.
Habe 1/2 Jahr Pause gemacht und weiss im Augenblıck nicht mehr genau welche Datei das war?
Kannst du mir bitte eine Beispieldatei mit gewünschter Lösung schicken das ich wieder reinkomme.

mfg  Gast 123

Halo Gast,

klar habe die Dateien mal angehängt.

Suche echt eine Lösung wie ich die gewünschten Daten abgleichen kann. Natürlich nur bei denen die gefunden werden, die anderen kann er ignorieren.

Ich hab deinen Code von letztem Jahr in eine Form gebaut mit Ladebalken usw. Diese heißt DatenAbgleich.

Grüße René


Angehängte Dateien
.xlsx   Master.xlsx (Größe: 123,92 KB / Downloads: 3)
.xlsm   Liste.xlsm (Größe: 858,75 KB / Downloads: 2)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste