Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Daten aus andere Exceltabelle auslesen

Betrifft: Daten aus andere Exceltabelle auslesen von: ANAnas
Geschrieben am: 10.09.2014 10:26:04

Guten morgen Community,

mir stelllt sich momentan folgende Problematik: Ich habe eine Main-Excel Datei. Über diese soll es möglich sein, Daten aus einer anderen Excel Datei einzulesen. Diese Excel Datei soll man über ein Auswahlfenster öffnen. Die Daten sollen dann in die Main eingelesen werden...

Kann mir jemand sagen wie das funktioniert?

LG

  

Betrifft: AW: Daten aus andere Exceltabelle auslesen von: Jack_d
Geschrieben am: 10.09.2014 10:29:21

Hallo Mango

hast es schon mal mit dem Rekorder Probiert?
Den Quelltext den er dir ausspuckt, kann man dann wunderbar anpassen.

Grüße


  

Betrifft: AW: Daten aus andere Exceltabelle auslesen von: Hajo_Zi
Geschrieben am: 10.09.2014 10:29:33

warum nicht Verknüpfung?

GrußformelHomepage


  

Betrifft: AW: Daten aus andere Exceltabelle auslesen von: ANAnas
Geschrieben am: 10.09.2014 11:17:10

Hinter der Main-Datei steckt ein Quellcode mit dem die eingelesene Excel-Datei bearbeitet werden soll. Die Main ist also nur "Mittelsmann" und dient lediglich zur Bearbeitung. Nachdem die Datei bearbeitet wurde (Klick auf "Start" in der Userform) rödelt das Programm durch und spuckt am Ende die fertige Datei aus.

So zumindest der Plan :D


  

Betrifft: AW: Daten aus andere Exceltabelle auslesen von: fcs
Geschrieben am: 10.09.2014 14:32:06

Hallo ANAnas,

nachfolgend das Makro-Grundgerüst für Datei auswählen, Daten übertragen, Datei wieder schließen.

Gruß
Franz

Sub prcDatenHolen()
  Dim wkbMain As Workbook, wksZiel As Worksheet
  Dim wkbData As Workbook, wksData As Worksheet
  Dim varAuswahl As Variant
  
  On Error GoTo Beenden
  
  'Dateiauswahldialog anzeigen
  varAuswahl = Application.GetOpenFilename( _
      Filefilter:="Excel(*.xls;*.xlsx;*.xlsm;*.xlsb),*.xls;*.xlsx;*.xlsm;*.xlsb", _
      Title:="Bitte datendatei auswählen")
  
  If varAuswahl = False Then GoTo Beenden
  
  'Main-Datei-Objekte setzen
  Set wkbMain = ActiveWorkbook
  
  Application.ScreenUpdating = False
  
  'Datendatei schreibgeschützt öffnen in Daten-Tabellenblatt setzen
  Set wkbData = Application.Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
  Set wksData = wkbData.Worksheets(1) 'BlattNr/Blattname anpassen
  
  
  'Daten von Daten-Tabelle nach Main-Datei übertragen - hier nur Testbeispiel
  Set wksZiel = wkbMain.Worksheets("Input") 'Blattname anpassen
  wksData.Range("B2:H4").Copy
  wksZiel.Range("B3").PasteSpecial Paste:=xlPasteValues
  
  Application.CutCopyMode = False
  
  
  'Daten-Datei wieder schließen
  wkbData.Close savechanges:=False
  Set wkbData = Nothing
  
Beenden:
  With Err
    Select Case .Number
      Case 0 'alles OK
      Case Else
        MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
        If Not wkbData Is Nothing Then wkbData.Close savechanges:=False
    End Select
  End With
  Application.ScreenUpdating = True
End Sub



  

Betrifft: AW: Daten aus andere Exceltabelle auslesen von: ANAnas
Geschrieben am: 11.09.2014 11:58:08

Hallo Franz!

Erstmal vielen lieben Dank für deine Hilfe :)
Bei mir funktioniert das nicht ganz so wie ich es mir vorstelle...vielleicht kannst du mir da nochmal sunter die Arme greifen: die Main startet automatisch in der Userform1. Das einlesen klappt nicht ganz, es kommt zum Fehler: Formular wird bereits angezeigt und kann daher nicht gebunden dargestellt werden.

Hast du eine Lösung parat?

LG


  

Betrifft: AW: Daten aus andere Exceltabelle auslesen von: fcs
Geschrieben am: 11.09.2014 12:53:18

Hallo ANAnas,

eine direkte Lösung hab ich nicht parat. Wie denn auch? Ich kenne weder deine Datei(en) noch irgendwelche Makro-Codes.

Die Meldung selber bedeutet:
Dein Userform1 wird bereits angezeigt und jetzt wird ein weiteres Makro gestartet mit der Anweisung

Userform1.Show

Das funktioniert nicht! Die Zeile muss dann raus oder eine Prüfung eingebaut werden, ob das Userform schon geöffnet/sichtbar ist.(Userform1.Visible=True ?)

die Main startet automatisch in der Userform1
Was bedeutte dies?
A) Das Userform1 wird gestartet/geöffnet und als Teil der Userform-Anzeige wird auch die Main-Datei geöffnet?
D.h. das Userform1 ist nicht in der Main-Datei gespeichert, sondern in einer anderen Datei. Wenn ja, in welcher Datei?

B) Die Main-Datei wird geöffnet und beim öffnen automatisch die Userform angezeigt?
D.h. Userform1 ist in der Main-Datei gespeichert.

Gruß
Franz


  

Betrifft: AW: Daten aus andere Exceltabelle auslesen von: ANAnas
Geschrieben am: 16.09.2014 08:04:55

Hey Franz, danke für deinen Tip!
Habe es mit einer Abfrage lösen können :)

Du hast mir deinen Quellcode zum kopieren bereitgestellt...nun habe ich dazu noch eine Frage:
wie kann ich einzelne Spalten kopieren? Hier nochmal der Quellcode:

Private Sub Auslesen_Click()

  Dim wkbMain As Workbook, wksZiel As Worksheet
  Dim wkbData As Workbook, wksData As Worksheet
  Dim varAuswahl As Variant
  
  On Error GoTo Beenden
  
  'Dateiauswahldialog anzeigen
  varAuswahl = Application.GetOpenFilename( _
      Filefilter:="Excel(*.xls;*.xlsx;*.xlsm;*.xlsb),*.xls;*.xlsx;*.xlsm;*.xlsb", _
      Title:="Bitte datendatei auswählen")
  
  If varAuswahl = False Then GoTo Beenden
  
  'Main-Datei-Objekte setzen
  Set wkbMain = ActiveWorkbook
  
  Application.ScreenUpdating = True 'False
  
  'Datendatei schreibgeschützt öffnen in Daten-Tabellenblatt setzen
  Set wkbData = Application.Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
  Set wksData = wkbData.Worksheets(1) 'BlattNr/Blattname anpassen
  
  
  'Daten von Daten-Tabelle nach Main-Datei übertragen - hier nur Testbeispiel
  Set wksZiel = wkbMain.Worksheets("Tabelle1") 'Blattname anpassen
  wksData.Range("A2:BY1773").Copy
  wksZiel.Range("A2").PasteSpecial Paste:=xlPasteValues
  
  Application.CutCopyMode = False
    
    
  'Daten-Datei wieder schließen
  wkbData.Close savechanges:=False
  Set wkbData = Nothing
  
Beenden:
  With Err
    Select Case .Number
      Case 0 'alles OK
      Case Else
        MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
        If Not wkbData Is Nothing Then wkbData.Close savechanges:=False
    End Select
  End With
  Application.ScreenUpdating = True
End Sub
Sagen wir mal, ich benötige Spalte a,b,d,h,z,ab und bb...wie löse ich das?
Danke für deine Hilfe :)


  

Betrifft: AW: Daten aus andere Exceltabelle auslesen von: ANAnas
Geschrieben am: 16.09.2014 08:06:52

Ergänzend zum ebend geschriebenen:

ich beginne in Zeile 2 ;)


  

Betrifft: AW: Daten aus andere Exceltabelle auslesen von: fcs
Geschrieben am: 16.09.2014 11:54:34

Hallo ANAnas,

wen mehrere Zellbereiche aus der Quelltabelle übernommen werden sollen, dann muss man das Kopieren/Einfügen entspechend verfeinern.

Gruß
Franz


Sub prcDatenHolen()
  Dim wkbMain As Workbook, wksZiel As Worksheet, Zeile_Z As Long, Spalte_Z As Long
  Dim wkbData As Workbook, wksData As Worksheet, Zeile_L, Spalte_D
  Dim varAuswahl As Variant
  
  On Error GoTo Beenden
  
  'Dateiauswahldialog anzeigen
  varAuswahl = Application.GetOpenFilename( _
      Filefilter:="Excel(*.xls;*.xlsx;*.xlsm;*.xlsb),*.xls;*.xlsx;*.xlsm;*.xlsb", _
      Title:="Bitte datendatei auswählen")
  
  If varAuswahl = False Then GoTo Beenden
  
  'Main-Datei-Objekte setzen
  Set wkbMain = ActiveWorkbook
  
  Application.ScreenUpdating = False
  
  'Datendatei schreibgeschützt öffnen in Daten-Tabellenblatt setzen
  Set wkbData = Application.Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
  Set wksData = wkbData.Worksheets(1) 'BlattNr/Blattname anpassen
  
  'Daten von Daten-Tabelle nach Main-Datei übertragen - hier nur Testbeispiel
  Set wksZiel = wkbMain.Worksheets("Input") 'Blattname anpassen
  With wksZiel
    'Altdaten in Zieltabelle löschen
    With .UsedRange
      Zeile_L = .Row + .Rows.Count - 1 'letzte benutze Zeile
    End With
    Zeile_Z = 1 'Zeile ab der gelöscht werden soll
    If Zeile_L >= Zeile_Z Then
        .Range(.Rows(Zeile_Z), .Rows(Zeile_L)).ClearContents
    End If
  End With
  
  Zeile_Z = 1 'Einfüge-Zeile in Zieltabelle
  Spalte_Z = 1 '1. Einfügespalte in Zieltabelle
  
  With wksData
    With .UsedRange
      Zeile_L = .Row + .Rows.Count - 1 'letzte benutze Zeile
    End With
    For Spalte_D = 1 To .UsedRange.Column + .UsedRange.Columns.Count - 1
      Select Case Spalte_D
        Case 1, 2, 4, 8, 26, 27, 28 'a,b,d,h,z,ab und bb
          .Range(.Cells(2, Spalte_D), .Cells(Zeile_L, Spalte_D)).Copy
          wksZiel.Cells(Zeile_Z, Spalte_Z).PasteSpecial Paste:=xlPasteValues
          
          Spalte_Z = Spalte_Z + 1
        Case Else
          'do nothing
      End Select
    Next
  End With
  
  Application.CutCopyMode = False
  
  
  'Daten-Datei wieder schließen
  wkbData.Close savechanges:=False
  Set wkbData = Nothing
Beenden:
  With Err
    Select Case .Number
      Case 0 'alles OK
      Case Else
        MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
        If Not wkbData Is Nothing Then wkbData.Close savechanges:=False
    End Select
  End With
  Application.ScreenUpdating = True
End Sub



 

Beiträge aus den Excel-Beispielen zum Thema "Daten aus andere Exceltabelle auslesen"