![](/img/trans.png)
[英]Excel VBA Copy from one sheet to other workbook given multiple criteria
[英]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.