Excel 将图纸内容从选定文件复制到当前文件

Excel 将图纸内容从选定文件复制到当前文件,excel,vba,Excel,Vba,我需要打开“选择文件”对话框,然后将所选文件中的一张工作表(始终相同的名称、相同的位置)复制到当前Excel文件中的第二张工作表中 到目前为止,我可以选择并打开该文件。这就是它停止的地方。没有复制任何内容,我的剪贴板中也没有任何内容 我搜索并找到了一些不起作用的解决方案 代码如下: Public Sub Import() Dim VarDateiPfad As Variant Dim Source As Workbook Dim FilterDestination As Workbook '

我需要打开“选择文件”对话框,然后将所选文件中的一张工作表(始终相同的名称、相同的位置)复制到当前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
这是我修复问题之前的最后一个版本:

Public Sub Import()

Dim VarDateiPfad As String
Dim FilterSource As Workbook
Dim FilterDestination As Workbook

Set FilterDestination = ActiveWorkbook

'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
VarDateiPfad = Application.GetOpenFilename("Exceldateien,*.xls*", 1, "X")

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

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

避免使用
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

避免使用
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
你就快到了

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
你就快到了

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

将留下评论,但没有足够的代表这样做,所以我会留下一个答复

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

您复制了一个选择范围,但没有告诉宏要粘贴到哪里,因此这似乎是问题所在

会留下评论,但没有足够的代表这样做,因此我将留下回复

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

您已经复制了一个选择范围,但没有告诉宏要粘贴到哪里,因此这似乎是问题所在

注意:使用
是一种不好的做法。激活
,如果应用,则不需要它。另请参阅我的答案,以避免使用
ActiveWorkbook
.Activate
,后者更可靠、更快。此外,OP已经很好地使用了此工作簿。您完全正确。这是一项拙劣的技术,受到嘲笑。另一方面,它又快又实用,初学者更容易理解。干杯,但这种方式初学者学习做它是一个糟糕的方式。最好向初学者传授好方法,否则很难改变他们的行为。非常感谢你们两位,我添加了一篇关于当前戏剧状态的帖子^^^注:使用
。激活
是一种不好的做法,如果你申请,你不需要它。另请参阅我的答案,以避免使用
ActiveWorkbook
.Activate
,后者更可靠、更快。此外,OP已经很好地使用了此工作簿。您完全正确。这是一项拙劣的技术,受到嘲笑。另一方面,它又快又实用,初学者更容易理解。干杯,但这种方式初学者学习做它是一个糟糕的方式。最好向初学者传授好的方法,否则很难改变他们的行为。非常感谢你们,我添加了一篇关于当前戏剧状态的帖子^^@G.M添加了一个example@G.M增加了一个例子