Felder in aktives Sheet kopieren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
InputBox MsgBox
Bild

Betrifft: Felder in aktives Sheet kopieren
von: Mathias
Geschrieben am: 04.10.2015 20:20:31

Hallo Zusammen,
ich möchte per Makro folgendes machen, hab nur keine Ahnung wie ;)
Ich habe eine Datei "Materialliste". In dieser Datei gibt es nur ein Sheet "Material".
Wenn ich nun das Makro in einer beliebigen (aktiven) Datei ausführe, sollten aus der Datei "Materialliste" die Zellen A, B, E, F, G einer Zeile in die beliebige Datei in Spalte A, B, C, D und E ab Zeile 4 kopiert werden, wenn in Der Datei "Materialliste" in Spalte N ein "x" steht.
Das Makro soll in der "beliebigen" Datei hinterlegt werden, da ich diese als Vorlage nutze und diese auch umbenenne. Den Sheetnamen könnte ich fest vergeben. Z.B. Materialverbrauch.
Ich möchte das Makro gerne unabhängig vom Dateinamen ausführen können, damit er sich die entsprechenden Zellen aus der Datei "Materialliste" holt.
Vermutlich ist das nicht einmal so schwer.... aber ich bekomme das leider nicht hin.
Ich bin euch schon jetzt super Dankbar für eure Hilfe.
Viele Grüße
Mathias

Bild

Betrifft: AW: Felder in aktives Sheet kopieren
von: Sepp
Geschrieben am: 04.10.2015 21:15:03
Hallo Mathias,
teste mal.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub importMaterial()
Dim objWB As Workbook, objWS As Worksheet, objActive As Worksheet, rng As Range
Dim strFile As String

On Error GoTo ErrExit

Static CalculationMode As Long

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  CalculationMode = .Calculation
  .Calculation = xlManual
  .DisplayAlerts = False
End With

On Error Resume Next
Set rng = Application.InputBox("Wo sollen die Daten eingefügt werden?", _
  "Materialliste", ActiveCell.Address, Type:=8)
On Error GoTo ErrExit

If Not rng Is Nothing Then
  rng.CurrentRegion.Clear
  
  With Application.FileDialog(msoFileDialogFilePicker)
    .InitialFileName = "E:\Forum"
    .Title = "Datei auswählen"
    .ButtonName = "Auswahl..."
    .InitialView = msoFileDialogViewList
    .Filters.Clear
    .Filters.Add "Excel Dateien", "*.xls; *.xlsx; *.xlsm", 1
    .Filters.Add "Alle Dateien", "*.*", 2
    .FilterIndex = 1
    If .Show = -1 Then strFile = .SelectedItems(1)
  End With
  
  If Len(strFile) Then
    Set objWB = Workbooks.Open(strFile)
    objWB.Sheets(1).Copy Before:=rng.Parent
    objWB.Close False
    Set objWS = ThisWorkbook.Sheets(rng.Parent.Index - 1)
    With objWS
      .Range("A1").AutoFilter Field:=14, Criteria1:="=x", Operator:=xlAnd
      .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy rng
      .Delete
    End With
    rng.Range("C1,D1,H1:N1").EntireColumn.Delete
  End If
End If

ErrExit:

With Err
  If .Number <> 0 Then
    MsgBox "Fehler in Prozedur:" & vbTab & "'importMaterial'" & vbLf & String(60, "_") & _
      vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
      "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
      .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
      "VBA - Fehler in Prozedur - importMaterial"
    .Clear
  End If
End With

On Error GoTo 0

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .Calculation = CalculationMode
  .DisplayAlerts = True
  .StatusBar = False
End With


Set rng = Nothing
Set objWB = Nothing
Set objWS = Nothing
Set objActive = Nothing
End Sub

Gruß Sepp


Bild

Betrifft: AW: Felder in aktives Sheet kopieren
von: Mathias
Geschrieben am: 05.10.2015 20:57:04
Hallo Sepp,
vielen vielen Dank erst einmal für das Makro und deine Mühe.
Leider macht das Makro noch nicht so ganz das, was ich mir vorgestellt habe. Grund ist wohl auch, dass ich dir zu wenige Informationen gegeben habe ;)
Ich habe mal die beiden betroffenen Dateien angehangen. Zum einen die Materialliste - diese liegt immer bei mir unter C:\temp\Materialliste.xlsx.
Dann meine Vorlagendatei - hier mit dem Namen "Materialverbrauch". Diese kann auch anders heißen.
In der Datei Materialverbrauch sind u.a. Zellen enthalten, die mit Formeln oder auch einem sverweis gefüllt sind. Diese werden beim ausführen von deinem Makro leider gelöscht.
Ich habe heute noch ein paar kleine Anpassungen an der Materialliste vornehmen müssen, so dass jetzt folgende Felder aus der Materialliste in die Tabelle Materialverbrauch kopiert werden müssten:
A nach A
C nach D
D nach E
F nach G
I nach J
Die Tabelle Materialliste habe ich eigentlich immer geöffnet. Von daher könnte das Makro die Daten direkt aus dieser Datei holen.
Ist das viel Aufwand, dein Makro nach meinen Vorstellungen anzupassen?
https://www.herber.de/bbs/user/100605.xlsx
https://www.herber.de/bbs/user/100606.xlsx
Viele Grüße
Mathias

Bild

Betrifft: AW: Felder in aktives Sheet kopieren
von: Sepp
Geschrieben am: 05.10.2015 21:02:21
Hallo Mathias,
in deiner "Materiallieste" gibt es keine Spalte N, bzw. keine Spalte in der Datensätze mit einem "x" gekennzeichnet sind!
Wenn "Materialliste" immer im selben Pfad liegt, warum dann per VBA, du kannst sie Daten auch per Formel ziehen, selbst wenn "Materialliste" geschloßen ist.

Gruß Sepp


Bild

Betrifft: AW: Felder in aktives Sheet kopieren
von: Mathias
Geschrieben am: 05.10.2015 22:06:05
Hallo Sepp,
durch die Änderungen an meiner Liste ist die Spalte mit dem "x" jetzt M. Da hab ich mich vertan.
Wenn ich das aber mit Formeln machen, habe ich ja folgendes Problem. Wenn ich mehrere Dateien "Materialverbrauch"habe und eine andere Auswahl per x in der Tabelle Materialliste auswähle, verändere ich ja evtl. auch in anderen Kopien der Tabelle Materialverbrauch die Einträge.
Die Tabelle Materialverbrauch wird immer in den jeweiligen Kundenauftrag umbenannt. Wenn ich jetzt mehrere Kundenaufträge geöffnet habe, würde er diese ja alle aktualisieren.?
Oder liege ich da falsch?
Viele Grüße
Mathias

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Felder in aktives Sheet kopieren"