816 Aufrufe
Gefragt in Tabellenkalkulation von ahibi Einsteiger_in (3 Punkte)
Hallo zusammen

Ich habe das Problem eine Exceltabelle das auf unterschiedliche externe Daten die sich immer wieder ändern oder mehr werde zuzugreifen, möchte das am einfachsten mit einem Makro lösen das ich nur anstoße wenn ich eine Aktualisierung dieser Dateien bekomme also nicht automatisch wenn ich die Tabelle öffne

Diese Daten sollen aber auch erst ab einer Zeile/Spalte gelesen werden

das einfügen der Daten soll aber auch erst ab einer Zeile/Spalte geschehen

Daten die schon drin sind sollen verglichen werden und die neuen Daten angefügt werden

Vielen Dank

Ahibi :)

12 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Ahibi,

ja das geht wink.

Falls du aber ein Makro möchtest, dann müsstest du schon eine etwas genauere Erklärung liefern.

So müsste man z.B. wissen, ob es in diesen externen Dateien immer nur ein Arbeitsblatt gibt, oder ob dort mehrere Arbeitsblätter vorhanden sind. Falls dort mehrere Arbeitsblätter vorhanden sind, aus welchem Arbeitsblatt sollen die Daten dann kopiert werden. Und natürlich ab welcher Zeile / Spalte sollen die Daten kopiert bzw. eingefügt werden? Und erkläre bitte noch mal genau, was das Makro tun soll.

Gruß

M.O.

0 Punkte
Beantwortet von
Moin moin

so also die Quellen liefern mir aus dem SAP eine einfache Excelliste ohne Überschriften ect. der Name der Liste kann man ja anpassen ich habe sie "1_ext_Pumpen" genannt

also der Anfang ist Zeile 1 ab Spalte A und geht bis Spalte F wo unterschiedlichste Inhalte die ich brauche abgebildet werden

Ziel meine Arbeitsmappe

unterschiedlichste Tabellenblätter, brauche das aber im Tabellenblatt "Pumpen"

ab Zeile 7 und Spalte B folgend bis G

Was soll es tun:

ich bekomme alle paar Monate mal ein update in Form eines Auszuges in Excel von SAP mit aktuellen Nummern und Bezeichnungen und soll eine Liste die wir als Vorlage verwenden für ein Formblatt aktualisieren mit neusten Nummern und Bezeichnungen, damit wir die dann verwenden können.

deshalb sind die beiden vordringlichen Sachen:

vergleichen quelle ziel schon vorhanden ok

vergleichen quelle ziel nicht vorhanden ergänzen

und das über die komplette Liste

ich bin recht neu und fange gerade an selber mit VBA zu experimentieren deshalb habe ich diesen Weg gewählt um mich weiterzubilden und voran zu kommen.

Danke schonmal Ahibi
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Ahibi,

du kennst deine Tabellen und weißt welche Daten miteinander verglichen werden. Wir Helfer hier draußen aber nicht.

Wenn es in der zu öffnenden Arbeitsmappe (die mit den aus SAP generierten Daten) nur eine Tabelle gibt, dann ist der Name unwichtig. Gibt es aber in dieser Arbeitsmappe mehrere Tabellenblätter, dann braucht es einen Namen.

Da es in der SAP-Liste keine Überschriften gibt, muss man natürlich aus wissen, welche Spalten aus der SAP man mit welchen Spalten aus der zu ergänzenden Datei vergleichen muss und in welche Spalten die Daten eingefügt werden müssen.

Wenn du mal zwei Beispieldateien mit ein paar Dummy-Daten zur Verfügung stellen könntest, wäre das ggf. einfacher nach zu vollziehen. Eine Anleitung zum Hochladen von Dateien gibt es hier: Klick mich!

Gruß

M.O.

0 Punkte
Beantwortet von

so ich habe mal kurz 2 Dateien die für mein Datei wichtig sind rausgezogen

1_ext_Pumpe  (Quelle)

2_Abnahme  (Ziel)

den Beginn ab wann verglichen oder angefügt wird habe ich markiert (gelb)

Danke

Ahibi

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Ahibi,

in deiner SAP-Liste haben die Nummern einen Punkt 3002.1212. In deiner Pumpenliste fehlt dieser Punkt 30021212.

Ist das nur ein Schreibfehler oder muss der Punkt beim Vergleich "entfernt" werden?

Gruß

M.O.
0 Punkte
Beantwortet von
nein er muss nicht entfernt werden ist im SAP nur ein Zeichen der Trennung weil es in 4er Zeichen abgelegt wird meist nummern kann auch mal ein Bauchstabe sein

BSP: 3001.R121 oder 3001.1212 er sollte übernommen werden aber mein Excel nimmt das Zeichen nur dann wenn die Zellen auf Text formatiert sind wenn sie als Standard formatiert sind werden die Punkte als 1000 Trennung verwendet
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Ahibi,

das folgende Makro gehört in Standardmodul der Arbeitsmappe, in der die Daten ergänzt werde sollen:

Sub Import()
Dim arrDaten As Variant
Dim lngZeile As Long
Dim lngLetzte As Long
Dim Datei
Dim d As Long
Dim b As Long
Dim bExists As Boolean
Dim arrVorhanden As Variant

'Datei-Öffnen Dialog aufrufen
Datei = Application.GetOpenFilename(FileFilter:="Microsoft Excel-Dateien (*.xl*), *.xl*", Title:="EINE Datei zum Öffnen auswählen")
If Datei = False Then
   'Makro abbrechen wenn Benutzer den Öffnen-Dialog abbricht
    MsgBox "Der Benutzer hat abgebrochen.", vbInformation
    Exit Sub
End If

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'ausgewählte Datei öffnen
Workbooks.Open (Datei)

With ActiveWorkbook
  'Daten aus erstem Blatt in Array einlesn
   With .Worksheets(1)
      arrDaten = .Range(.Cells(1, 1), .Cells(.Cells(Rows.Count, 2).End(xlUp).Row, 8))
   End With
  'Arbeitsmappe ohne Änderungen schließen
  .Close (False)
End With

With ThisWorkbook.Worksheets("Pumpen")
  'Daten aus Spalte B in Array einlesen
   arrVorhanden = .Range(.Cells(6, 2), .Cells(.Cells(Rows.Count, 2).End(xlUp).Row, 2))
  'nun vorhandene Zeilen durchlaufen
  For d = 1 To UBound(arrDaten, 1)
    For b = 1 To UBound(arrVorhanden, 1)
      'Marker für vorhanden auf Falsch setzen
      bExists = False
      If arrVorhanden(b, 1) = arrDaten(d, 1) Then
        bExists = True              'Marker für vorhanden
        Exit For                    'Schleife verlassen
      End If
    Next b
    'nun ggf. nicht vorhandene Daten ergänzen
    If bExists = False Then
      lngEinf = .Cells(Rows.Count, 2).End(xlUp).Row + 1   'Einfügezeile wird ermittelt
      'Daten werden in Blatt geschrieben
       With .Cells(lngEinf, 2)
         .NumberFormat = "@"                      'Zelle als Text formatieren, damit Nummer mit Punkt übernommen wird
         .Value = arrDaten(d, 1)                  'Inhalt einfügen
       End With
      .Cells(lngEinf, 3) = arrDaten(d, 2)
      .Cells(lngEinf, 4) = arrDaten(d, 3)
      .Cells(lngEinf, 5) = arrDaten(d, 4)
      .Cells(lngEinf, 6) = arrDaten(d, 5)
      .Cells(lngEinf, 7) = arrDaten(d, 6)
      .Cells(lngEinf, 11) = arrDaten(d, 7)
      .Cells(lngEinf, 13) = arrDaten(d, 8)
    End If
  Next d
End With

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub

Teste mal, ob das Makro so funktioniert, wie du dir das vorstellst.

Und viel Spaß beim VBA-Lernen yes.

Gruß

M.O.

0 Punkte
Beantwortet von
Vielen Dank schon mal vorab werde erst morgen zum testen kommen, habe jetzt Meetings und dann noch der VBA-Kurs online von der Firma die nächsten Wochen.

Gruß Ahibi
0 Punkte
Beantwortet von

Moin moin zusammen

habe heute früh endlich Zeit gefunden mich wieder ans Projekt zu setzen um weiter zu kommen, dabei bin ich nachdem ich das makro eingefügt habe beim ausführen auf einen Fehler gestoßen, wo ich leider nicht weiter komme habe schon gesucht was er damit meint aber so tief stecke halt noch nicht drin.

Fehler beim kompilieren    

Variable nicht definiert

siehe Bild

Danke dafür

Ahibi

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo,

ja da habe ich vergessen die Variable zu definieren.

Ergänze bei den DIM-Anweisungen die folgende Zeile

Dim lngEinf As Long

Gruß

M.O.

...