繁体   English   中英

Excel VBA将内容从一个工作表复制到另一个工作簿工作表

[英]Excel VBA copy content from one Sheet into other Workbook sheet

我希望能够选择一个工作簿,然后将内容从该工作簿(工作表1)复制到运行宏的当前活动工作簿中。 我一直在这里寻找关于类似问题的StackOverflow上的一些答案,并获得了以下代码(请参见下文)。

文件的选择当前工作正常,但是当我运行宏时会引发错误

运行时错误“ 438”:对象不支持该方法或属性`

(请注意,错误来自我的母语,由我翻译)

遗憾的是,没有标记出与他有关的任何对象,因此我无法真正确定他有什么问题。 但是,我想这是函数GetTemplateData的最后一行中的PasteSpecial存在问题,但是该代码应该没问题(应该怎么做?将数据保存到给定工作簿activeWorkbook的第一张表中)并传递引用回去GeneratedValues例程。

Option Explicit

Private Sub GenerateValues()
    'Application.ScreenUpdating = False
    'Application.DisplayAlerts = False
    Dim activeWorkbook As Workbook
    Dim activeWorksheet As Worksheet

    Set activeWorkbook = Application.activeWorkbook
    Set activeWorksheet = GetTemplateData(activeWorkbook)

    activeWorkbook.Save
End Sub


'Get The Template Data
Private Function GetTemplateData(activeWorkbook As Workbook) As Worksheet

    Dim templateWorkbook As Workbook

    'Grab the Template Worksheet
    Set templateWorkbook = UseFileDialogOpen

    'Select all Content
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Copy

    'activeWorkbook.Sheets(activeWorkbook.Sheets.Count).Range("A1", Cells.End(xlDown) & Cells.End(xlRight)).PasteSpecial xlPasteValues
    activeWorkbook.Sheets(1).Range("A1", Cells.End(xlDown) & Cells.End(xlRight)).PasteSpecial xlPasteValues

End Function

'From https://docs.microsoft.com/de-de/office/vba/api/excel.application.filedialog
'Select the Workbook containing the Exported Template-Stories by User Selection
Function UseFileDialogOpen() As Workbook

    Dim lngCount As Long
    Dim filePath As String

    Dim templateBook As Workbook

    ' Open the file dialog
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .Show

        Set templateBook = Workbooks.Open(.SelectedItems(1))

        ' Display paths of each file selected
        'For lngCount = 1 To .SelectedItems.Count
        '    MsgBox .SelectedItems(lngCount)
        'Next lngCount

    End With

    templateBook
End Function

我相信您所有的问题都源于此:

Private Sub GenerateValues()
    'Application.ScreenUpdating = False
    'Application.DisplayAlerts = False
    Dim activeWorkbook As Workbook
    Dim activeWorksheet As Worksheet

    Set activeWorkbook = Application.activeWorkbook
    Set activeWorksheet = GetTemplateData(activeWorkbook)

    activeWorkbook.Save
End Sub

ActiveWorkbook是VBA中定义的“变量”,因此对于您为何尝试重新分配它感到困惑。 尝试改用其他变量名。

注意:尽管ActiveWorksheet不是VBA中定义的变量,但它的名称与ActiveSheet十分接近,因此我也将该变量名称更改为其他名称,以免在编写以后的代码时造成混淆。

您可以尝试类似以下操作:

Sub CopyContentsFromOtherWorkbook()

    Dim wb As Workbook
    Dim twb As Workbook

    filePath = "C:\File.xlsx"

    Set wb = Workbooks.Open(filePath)
    wb.Sheets(1).Range("A1:Z10000").Copy

    Set twb = ThisWorkbook
    twb.Sheets(1).Range("C1").PasteSpecial xlPasteValues

    wb.Close
    twb.Save

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM