Microsoft Excel

Herbers Excel/VBA-Archiv

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

Tabellenblätter "einlesen" | Herbers Excel-Forum


Betrifft: Tabellenblätter "einlesen" von: Thomas Windbüchler
Geschrieben am: 17.01.2012 21:36:50

hallo Nochmals!

Und jetzt noch:

Im tabellenblatt "Basisdaten" befinden sich in C8 bis c200 Pfad und Dateinamen

das Makro soll prüfen welche der in dieser Liste vorhandenen Dateien vorhanden ist und dann diese Datei(en) öffnen
Danach das Tabellenblatt "Musterherhebungsblatt" kopieren und im worksheet "Auswertung" in das Tabellenblatt mit dem Namen aus der dazupassenden Zelle aus C8 bis C200 einfügen (Der Tabellenblattname ist gleich dem Dateinamen (ohne .Dateiendung)

klingt nicht so schwer, ist für mich alleine aber unlösbar...

  

Betrifft: AW: Tabellenblätter "einlesen" von: fcs
Geschrieben am: 18.01.2012 10:05:25

Hallo Thomas,

hier:

Danach das Tabellenblatt "Musterherhebungsblatt" kopieren und im worksheet "Auswertung" in das Tabellenblatt mit dem Namen aus der dazupassenden Zelle aus C8 bis C200 einfügen

gehen Begriffe durcheinander bzw. hab ich Verständnisfragen.
1. Wo befindet sich das Tabellenblatt "Musterherhebungsblatt"?
In den ggf. zu öffnenden Dateien?

2. Willst du tatsächlich das Tabellenblatt "Musterherhebungsblatt" kopieren oder nur den Zellbereich Daten/Formatierungen in diesem Tabellenblatt?
Wenn Zellbereich:
Ist dieser in allen Dateien identisch z.B. A1:F20 oder variabel?
Sollen nur die Werte oder auch die Zellformatierungen in die Tabellenblätter in "Auswertung" kopiert werden?

3. Was ist "Auswertung" ?
Kann eigentlich kein Worksheet (= Tabellenblatt) sein, sonder muss eine Excel-Datei/Arbeitsmappe "Auswertung.xlsx" oder "Auswertung.xlsm" sein.

4. Befindet sich das Blatt "Basisdaten" in der Arbeitsmappe "Auswertung"?

5. Ist die Mappe "Auswertung" zum Zeitpunkt des Makrostarts die aktive Arbeitsmappe?

Gruß
Franz


  

Betrifft: Tabellenblätter erstellen mit Makro danach einlese von: Thomas Windbüchler
Geschrieben am: 18.01.2012 11:18:47

Hallo Franz!

Danke für Deine Hilfe!

1) in "Beiden" Workbooks, einerseits in den ggf. zu öffnenden Dateien (Worksheet.name = Mustererhebungsblatt), workbook.name= z.B. Hr. Meier, Fr. Müller usw...
und andererseits auch im Auswertungsworkbook (workbook.name = Auswertung) und dort heisst das sheet auch worksheet.name = Musterherhebungsblatt - das dient als "vorlage" für die Tabellenblätter die auch über ein makro jeweils kopiert werden und dann mit dem Namen (z.B. Hr. Meier, Fr. Müller) benannt werden
hmm bin mir nicht sicher ob ich mich verständlich ausgedrückt habe

2. Du has Recht! ich will nicht das Tabellenblatt kopieren sondern nur die Zellen A6 bis x106 (oder falls Zeilen eingefügt werden bis 1 Zeile weniger als die Zeile in der "Summe" steht (aktuell in A107)

3. Beides, Auswertung ist ein Workbook und ein Worksheet (im gleichnamigen Workbook mit der Dateiendung .xlsm)

4. Genau (zumindest das hab ich verständlich gebracht...)

5. Richtig - und soll es danach auch wieder sein (und genauer, das Worksheet "Auswertung" Zelle A1)

Ich hoffe einiges ist jetzt klarer....?


  

Betrifft: AW: Daten aus Dateien kopieren per Makro von: fcs
Geschrieben am: 18.01.2012 13:58:44

Hallo Thomas,

in der hochgeladen Textdatei findest du den Code eines entsprechenden Makros.
https://www.herber.de/bbs/user/78492.txt

Gruß
Franz


  

Betrifft: Tabellenblätter erstellen mit Makro danach einlese von: Thomas Windbüchler
Geschrieben am: 18.01.2012 17:18:51

Hallo Franz!

Vielen Dank - ich glaub es fehlt nur noch ganz wenig....

Ich bekomm einen Fehler:

Fehler-Nr.: 1004
Die Select-Medhode des Range-Objektes konnte nicht ausgeführt werden.

Und zwar bei der Datei aus der die Daten kopiert weren sollen also z.B. "Hr. Meier.xls"

Woran könnte das liegen?

Danke nochmals!

lg Thomas


  

Betrifft: AW: Tabellenblätter erstellen mit Makro danach einlese von: fcs
Geschrieben am: 18.01.2012 18:18:24

Hallo Thomas,

den Fehler kann ich nicht nachvollziehen.

Die einzige Range-Select-Anweisung ist kurz vor Ende der Makroausführung und die ist nach meiner Meinung sogar überflüssig.

Mit meinen Testdateien läuft das Makro unter Excel 2007 jedenfalls ohne Probleme durch.

In welcher Prorammzeile tritt der Fehler denn auf?
Deaktiviere hierzu mal vorübergehnde die Zeile

On Error GoTo Fehler

und starte das Makro.

Gruß
Franz


  

Betrifft: Tabellenblätter erstellen mit Makro danach einlese von: Thomas Windbüchler
Geschrieben am: 18.01.2012 19:06:10

Hallo Franz!

Getan und - schwierig:

Dann bekomm ich ein Fenster mit einem Weißen Kreuzerl auf in rotem Kreis und einfach nur "400" (als überschrift des Fenster ist "Microsoft Visual Basic for Applications"

Wenn ich das Makro mit F8 im einzelschrittmodus durchführen lasse bleibt er irgendwie in der "For-Next" Schleife (oder er durchläuft die 200 mal das hab ich nicht versucht...)?

versteh ich nicht...


  

Betrifft: Tabellenblätter erstellen mit Makro danach einlese von: Thomas Windbüchler
Geschrieben am: 18.01.2012 18:33:38

Hallo Franz!

ich bin dem Fehler noch weiter "Nachgelaufen" und hab folgende Vermutung:

Ich hab's fett geschrieben dort wo die Schleifenabbarbeitung beginnt ....

Option Explicit

Sub Auswertung()
  
  Dim rngName As Range
  Dim wbAuswert As Workbook, wksZiel As Worksheet, strZiel As String
  Dim wbQuelle As Workbook, wksQuelle As Worksheet
  Dim lngZeile As Long, strQuelle As String, rngQuelle As Range
  Dim StatusCalc As Long, strMsgTitel As String
  
  Const strCopy As String = "Mustererhebungsblatt" 'Name des Blatts mit zu kopierenden Daten
  On Error GoTo Fehler
  If MsgBox("Auswertungsdaten einlesen?", vbYesNo) = vbNo Then GoTo Fehler
  strMsgTitel = "Fehlermeldung - Auswertung"
  Set wbAuswert = ActiveWorkbook 'Datei "Auswertung.xlsm"
  
  'Makrobremsen lösen
  With Application
    .EnableEvents = False
    StatusCalc = .Application.Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
  End With
  
  'Zellen mit den Dateinamen abarbeiten
  For Each rngName In wbAuswert.Worksheets("Basisdaten").Range("C8:C200").Cells
    'leere Zellen überspringen
    If rngName.Value <> "" Then
    
Ich bin mir nicht sicher aber vielleicht ist hier der Hund drin? Es scheint so als ob er  _
keinen Dateinamen übernimmt?, sowohl Basisdaten als auch C8:c200 sind richtig, aber er übernimmt nur "" und deswegen steigt er sofort wieder aus... (Next)

  'prüfen, ob Datei vorhanden
      strQuelle = VBA.Dir(rngName.Value)
      strMsgTitel = "Auswertung - Datei " & rngName.Value
      If strQuelle = "" Then
        'Datei nicht gefunden
      Else
        'Quelldatei schreibgeschützt öffnen
        Set wbQuelle = Workbooks.Open(Filename:=rngName.Value, ReadOnly:=True)
        'Prüfen, ob Blatt mit zu kopierenden Daten vorhanden
        If fncCheckSheet(varBlatt:=strCopy, wb:=wbQuelle) = True Then
          Set wksQuelle = wbQuelle.Worksheets(strCopy)
          'Zu kopierender Bereich
          With wksQuelle
            'letzte Zeile mit Daten in Spalte A
            lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
            'Zeile mit "Summe" suchen
            Do
              If .Cells(lngZeile, 1) = "Summe" Or lngZeile < 8 Then
                lngZeile = lngZeile - 1
                Exit Do
              End If
              lngZeile = lngZeile - 1
            Loop
            'Bereich A6:Xnnn
            Set rngQuelle = .Range(.Cells(6, 1), .Cells(lngZeile, 24))
          End With
          'Zieltabelle setzen = Name Quelldatei ohne Dateinamenserweiterung
          strZiel = Left(wbQuelle.Name, InStrRev(wbQuelle.Name, ".") - 1)
          If fncCheckSheet(varBlatt:=strZiel, wb:=wbAuswert) = True Then
            Set wksZiel = wbAuswert.Worksheets(strZiel)
            'Zellbereich aus Quelle kopieren und Formeln ggf. durch Werte ersetzen
            With rngQuelle
              .Copy Destination:=wksZiel.Range(.Address)
              With wksZiel.Range(.Address)
                .Value = .Value
              End With
            End With
          Else
            MsgBox "Tabellenblatt """ & strZiel & """  in Auswertung nicht vorhanden", _
              vbInformation + vbOKOnly, strMsgTitel
          End If
        Else
          MsgBox "Blatt""" & strCopy & """ nicht vorhanden", _
              vbInformation + vbOKOnly, strMsgTitel
        End If
        wbQuelle.Close savechanges:=False
      End If
    End If
NextDatei:
    Set wbQuelle = Nothing
    Set wksQuelle = Nothing
    Set rngQuelle = Nothing
  Next
  wbAuswert.Activate
  wbAuswert.Worksheets("Auswertung").Activate
  Range("A1").Select
  Application.ScreenUpdating = True
  MsgBox "Fertig"
'Fehlerbehandlung
  Err.Clear
Fehler:
  With Err
    Select Case .Number
      Case 0 'kein Fehler
      Case Else
        MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
                  vbInformation + vbOKOnly, strMsgTitel
        If Not wbQuelle Is Nothing Then
          wbQuelle.Close savechanges:=False
          Resume NextDatei
        End If
    End Select
  End With
'Makrobremsen zurücksetzen
  With Application
    .EnableEvents = True
    .Calculation = StatusCalc
    .ScreenUpdating = True
  End With
'Variablen aufräumen
  Set wbAuswert = Nothing
End Sub

Public Function fncCheckSheet(ByVal varBlatt, Optional ByVal wb As Workbook) As Boolean
  'Prüft ob Blatt in Arbeitsmappe vorhanden
  Dim objSheet As Object
  On Error GoTo Fehler
  If wb Is Nothing Then Set wb = ActiveWorkbook
  fncCheckSheet = True
  Set objSheet = wb.Sheets(varBlatt)
Fehler:
  With Err
    Select Case .Number
      Case 0 'Alles ok
      Case Else
       fncCheckSheet = False
    End Select
  End With
End Function



  

Betrifft: AW: Tabellenblätter erstellen mit Makro danach einlese von: fcs
Geschrieben am: 18.01.2012 19:22:13

Hallo Thomas,

ein Fehler an der Stelle ist völlig unlogisch.
Entweder in den Zellen im Bereich C8:C200 stehen Daten oder keine. Bei leer wird halt nichts gemacht ansonsten geht es weiter mit der Prüfung der Dateinamen. Ein Fehler an dieser Stelle hätter auch nichts mit deiner ursprünglich geschriebenen Fehlermeldung zu tun.

Packe evtl. mal deine Datei in abgespeckter Version (mit nur einem Tabellenblatt, das zuder Dateiliste passt) und eine zu öffnende Datendatei in ein ZIP-File und schicke es an meine E-Mailadresse (findest du hier unter Forums-Seiten---Profile---Profilliste). Dann schaue ich mir das mal an.

Gruß
Franz


  

Betrifft: Tabellenblätter erstellen mit Makro danach einlese von: Thomas Windbüchler
Geschrieben am: 18.01.2012 11:19:10

Hallo Franz!

Danke für Deine Hilfe!

1) in "Beiden" Workbooks, einerseits in den ggf. zu öffnenden Dateien (Worksheet.name = Mustererhebungsblatt), workbook.name= z.B. Hr. Meier, Fr. Müller usw...
und andererseits auch im Auswertungsworkbook (workbook.name = Auswertung) und dort heisst das sheet auch worksheet.name = Musterherhebungsblatt - das dient als "vorlage" für die Tabellenblätter die auch über ein makro jeweils kopiert werden und dann mit dem Namen (z.B. Hr. Meier, Fr. Müller) benannt werden
hmm bin mir nicht sicher ob ich mich verständlich ausgedrückt habe

2. Du has Recht! ich will nicht das Tabellenblatt kopieren sondern nur die Zellen A6 bis x106 (oder falls Zeilen eingefügt werden bis 1 Zeile weniger als die Zeile in der "Summe" steht (aktuell in A107)

3. Beides, Auswertung ist ein Workbook und ein Worksheet (im gleichnamigen Workbook mit der Dateiendung .xlsm)

4. Genau (zumindest das hab ich verständlich gebracht...)

5. Richtig - und soll es danach auch wieder sein (und genauer, das Worksheet "Auswertung" Zelle A1)

Ich hoffe einiges ist jetzt klarer....?


Beiträge aus den Excel-Beispielen zum Thema "Tabellenblätter "einlesen""