将工作表内容从所选文件复制到当前文件

时间:2018-11-12 07:41:32

标签: excel vba excel-vba import

我已经搜索了一段时间,发现了一些无法正常工作的解决方案。我希望你们能帮助我。 我需要一个可以打开“选择文件”对话框的Makro。从选定的文件中,一张工作表(总是相同的名称,总是相同的位置)需要被复制到当前excel文件的第二个工作表中。 到目前为止,“选择文件”功能非常有效,我可以选择正确的文件,然后将其打开。不幸的是,这就是停止的地方。我看到打开的文件,仅此而已。什么也没有复制,剪贴板也没有任何内容。

这里是到目前为止使用的代码:

Public Sub Import()

Dim VarDateiPfad As Variant
Dim Source As Workbook
Dim FilterDestination As Workbook

'You choose the starting Folder for the "Select File" Dialog
ChDrive ("X:\") 'hier Laufwerk angeben
ChDir ("X:\X....") ' hier exakten Pfad angeben

'Starts the dialog and saves the link to the file
VarDateiPfad = Application.GetOpenFilename("Exceldateien,*.xls*", 1)

Workbooks.Open Filename:=VarDateiPfad, ReadOnly:=False

'Here seems to be where the problems occur
ActiveWorkbook.Sheets("X").UsedRange.Copy
ThisWorkbook.Sheets("Import").PasteSpecial xlValues
ActiveWorkbook.Close

整体代码看起来是否正确?也许有更好的方法吗?请帮我。 最好的祝福 乔治

3 个答案:

答案 0 :(得分:0)

避免使用ActiveWorkbook。而是将打开的工作簿设置为变量:

Dim WbToImport As Workbook 
Set WbToImport = Workbooks.Open(Filename:=VarDateiPfad, ReadOnly:=False)

然后使用该变量直接访问工作簿。

WbToImport.Worksheets("X").UsedRange.Copy
ThisWorkbook.Worksheets("Import").Range("A1").PasteSpecial xlPasteValues
WbToImport.Close

使用此技术可以更可靠地复制正确的工作簿,因为ActiveWorkbook可以是当前处于活动状态的任何工作簿。但这不一定是您刚刚打开的工作簿。


示例:

Option Explicit

Public Sub Import()    
    Dim FilterDestination As Workbook  
    Set FilterDestination = ThisWorkbook

    'Legt Standard Verzeichnis des "Datei öffnen" Dialogs fest.
    ChDrive ("X") 'hier Laufwerk angeben
    ChDir ("X") ' hier exakten Pfad angeben

    'Startet "Import" Dialog und legt ausgewählte Datei in "VarDateiPfad" ab
    Dim VarDateiPfad As String
    VarDateiPfad = Application.GetOpenFilename("Exceldateien,*.xls*", 1, "X")

    Dim FilterSource As Workbook
    Set FilterSource = Workbooks.Open(Filename:=VarDateiPfad, ReadOnly:=False)

    FilterSource.Worksheets("X").UsedRange.Copy
    FilterDestination.Worksheets("Import").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    FilterSource.Close

答案 1 :(得分:0)

你快到了。

Public Sub Import()

    Dim VarDateiPfad As Variant
    Dim Source As Workbook
    Dim FilterDestination As Workbook

    Set Source = ActiveWorkbook

    'You choose the starting Folder for the "Select File" Dialog
    ChDrive ("X:\") 'hier Laufwerk angeben
    ChDir ("X:\X....") ' hier exakten Pfad angeben

    'Starts the dialog and saves the link to the file
    VarDateiPfad = Application.GetOpenFilename("Exceldateien,*.xls*", 1)

    Workbooks.Open Filename:=VarDateiPfad, ReadOnly:=False

    'Here seems to be where the problems occur

    Sheets("X").Cells.Copy

    Source.Activate
    Sheets("Import").Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False



End Sub

答案 2 :(得分:0)

会发表评论,但没有足够的代表这样做,所以我会发表评论

FilterSource.Worksheets("X").UsedRange.Copy
FilterDestination.Worksheets("Import").Range("A1").PasteSpecial

您已经复制了一个选择范围,但没有告诉宏粘贴位置,所以这似乎是一个问题