Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1704to1708
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Problem mit SpecialPaste

Problem mit SpecialPaste
07.08.2019 15:53:49
Milli
Hallo,
ich habe eigentlich eine einfache Aufgabe über ein Makro gelöst. Das Makro fragt nach einem Speicherort für Exceldateien, öffnet diese und kopiert die Daten aus einem bestimmten Bereich in einer „Hauptdatei“ zusammen. Anzahl der Excel-Dateien und Menge der Daten variiert.
Das Makro funktioniert so weit so gut.
************
Option Explicit
Private Sub CommandButton1_Click()
Dim oFolder As Object                   'Ordner für die Schleife
Dim oFile As Object                     'Datei für die Schleife
Dim wbQuelle As Workbook                'Die Dateien die durch die Schleife laufen, werden als  _
Datei definiert
Dim Zieldatei As Workbook               'Das ist Flächenbilanz, in welcher die Daten  _
verarbeitet werden
Dim sPath As String                     'Welcher Pfad soll ausgelesen werden
Dim oFSO As Object                      'Variable zum Öffnen der Auswahl Explorer
Dim letzte_zeile As Integer             'Die letzte Zeile in der Zieldatei für das Einfügen  _
neuer Daten
Dim Dateiname As String, i As Integer   'Auflistung der Dateinamen, welche ausgelesen werden
' Automatische Abfragen von Excel deaktivieren
Application.DisplayAlerts = False
'Falls bereits Daten eingelesen wurden, müssen diese vor dem erneuten Import gelöscht werden
Sheets("Rohdaten").Range("A3:BP100000").ClearContents
'Auswahl des Ordner, in welchem die Dateien liegen, die nacheinander geöffnet und ausgelesen  _
werden
'!Das ist spath!
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\"
.Title = "Ordnerauswahl"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewList
If .Show = -1 Then
sPath = .SelectedItems(1)
If Right(sPath, 1)  "\" Then sPath = sPath & "\"
Else
sPath = ""
End If
End With
If sPath = "" Then
'MsgBox ("Kein Ordner gewählt!")
Else
Range("AQ5").Value = sPath
End If
Range("AQ6").Select
'Auflistung der Dateinamen in einem bestimmten Ordner ab der aktiven Zelle
'!Das ist Dateiname!
Dateiname = Dir$(sPath) 'Alternativ: Hier Verzeichnis und Datei angeben (Dir$("c:\*.*"))
Do While Dateiname  ""
ActiveCell.Offset(i, 0) = Dateiname
i = i + 1
Dateiname = Dir$()
Loop
'Definitionen für die Schleife
Set Zieldatei = ActiveWorkbook
Set oFSO = CreateObject("scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sPath)
'Beginn der Schleife
For Each oFile In oFolder.Files                                         'Jede Datei im ausgewä _
hlten Ordner
Set wbQuelle = Workbooks.Open(oFile.Path)                               'Definiere die Quelle
With wbQuelle.Sheets("Raw data export for spaces (Roh")             'Tabelle in der Quelle
.Range("A3:BP3").Select                                     'Bereich in der Quelle
.Range(Selection, Selection.End(xlDown)).Copy               'Kopieren
wbQuelle.Close savechanges:=False                               'Datei schließen ohne  _
Speichern
End With
Zieldatei.Sheets("Rohdaten").Activate                                   'Zieldatei öffnen
With Zieldatei.Sheets("Rohdaten")                                   'Zieltabelle auswählen
letzte_zeile = ActiveSheet.Cells(1048576, 1).End(xlUp).Row      'letzte Zeile der  _
Tabelle
.Range("A" & letzte_zeile + 1).PasteSpecial                     'Einfügen
End With
'Ende der ersten Schleife bzw. Wiederholung der Schleife
Next oFile
' Automatische Abfragen von Excel aktivieren
Application.DisplayAlerts = True
Dim zelle As Range
With Zieldatei.Sheets("Rohdaten")                                   'Zieltabelle auswählen
.Range("AE3").Select
.Range(Selection, Selection.End(xlDown)).Select
On Error Resume Next
For Each zelle In Selection
zelle.Value = 1 * zelle.Value
Next
End With
Zieldatei.Sheets("Grunddaten").Activate
MsgBox ("Die Daten wurden eingelesen!")
End Sub
**********
Nun gibt es aber ein Problem: In den Exceldateien sind Spalten (z. B. AC bis AF) mit unterschiedlichen Nachkommastellen. Wenn die Daten importiert werden, werden die Nachkommastellen gekürzt. Das darf natürlich nicht passieren.
Kann mir jemand helfen?
Viele Grüße
Janet
https://www.herber.de/bbs/user/131317.zip

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit SpecialPaste
07.08.2019 17:03:59
Nepumuk
Hallo Janet,
das Problem, du schließt die Datei aus der du kopiert hast vor dem Einfügen. Damit kommen die eingefügten Daten nicht aus dem Office-Clipboard sondern von Windows. Außerdem hast du viele Selects drin die es nicht braucht. Teste mal:
Option Explicit

Private Sub CommandButton1_Click()
    
    Dim wbQuelle As Workbook 'Die Dateien die durch die Schleife laufen, werden als Datei definiert
    Dim Zieldatei As Workbook 'Das ist Flächenbilanz, in welcher die Daten verarbeitet werden
    Dim sPath As String 'Welcher Pfad soll ausgelesen werden
    Dim letzte_zeile As Long 'Die letzte Zeile in der Zieldatei für das Einfügen neuer Daten
    Dim Dateiname As String, i As Long 'Auflistung der Dateinamen, welche ausgelesen werden
    
    'Falls bereits Daten eingelesen wurden, müssen diese vor dem erneuten Import gelöscht werden
    Worksheets("Rohdaten").Range("A3:BP100000").ClearContents
    
    'Auswahl des Ordner, in welchem die Dateien liegen, die nacheinander geöffnet und ausgelesen werden
    '!Das ist spath!
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = "C:\"
        .Title = "Ordnerauswahl"
        .ButtonName = "Auswahl..."
        .InitialView = msoFileDialogViewList
        If .Show Then sPath = .SelectedItems(1) & "\"
    End With
    
    If sPath = vbNullString Then
        'MsgBox ("Kein Ordner gewählt!")
    Else
        
        ' Automatische Abfragen von Excel deaktivieren
        Application.DisplayAlerts = False
        
        Range("AQ5").Value = sPath
        
        Dateiname = Dir$(sPath) 'Alternativ: Hier Verzeichnis und Datei angeben (Dir$("c:\*.*"))
        
        Do Until Dateiname = vbNullString
            
            Range("AQ6").Offset(i, 0).Value = Dateiname
            i = i + 1
            
            'Jede Datei im ausgewählten Ordner
            Set wbQuelle = Workbooks.Open(sPath & Dateiname) 'Definiere die Quelle
            
            With wbQuelle.Worksheets("Raw data export for spaces (Roh") 'Tabelle in der Quelle
                
                Call .Range(.Cells(3, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 68)).Copy( _
                    Destination:=ThisWorkbook.Worksheets("Rohdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)) 'Kopieren
                
                wbQuelle.Close SaveChanges:=False 'Datei schließen ohne Speichern
                
            End With
            
            Dateiname = Dir$()
            
        Loop
        
        Zieldatei.Worksheets("Grunddaten").Activate
        
        MsgBox "Die Daten wurden eingelesen!"
        
        ' Automatische Abfragen von Excel aktivieren
        Application.DisplayAlerts = True
        
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Problem mit SpecialPaste
07.08.2019 17:10:20
onur
PasteSpecial ohne Parameter bringt nix.
Versuch das:
.Range("A" & letzte_zeile + 1).PasteSpecial (PasteValues)

Und du solltest dir das blöde ".Select" abgewöhnen, ist völlig überflüssig und bremst den Code aus.
Das benutzt der Makrorecorder, weil er ja Cursor-gesteuert arbeiten kann, aber DU brauchst das nicht.
AW: Problem mit SpecialPaste
08.08.2019 09:36:23
Milli
Hallo Nepumuk, hallo Onur,
vielen Dank für die schnelle Antwort! Ich werde heute beides ausprobieren und melde mich, wenn es klappt.
Viele Grüße
Janet
AW: Problem mit SpecialPaste
08.08.2019 15:09:57
Milli
Hallo Onur,
leider hat dein Vorschlag nicht funktioniert, das Makro fragte immer die Variable für PasteValues ab. Habe ich nicht verstanden!? Aber …
Hallo Nepumuk,
dein Vorschlag funktioniert super !!!
Und für Euch beide … ja, ihr habt Recht, ich benutze zu viel Select und werde mich bemühen, das zu lassen.
Vielen Dank noch mal und
viele Grüße
Janet
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige