簡體   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