簡體   English   中英

將單元格范圍從一個工作簿復制到另一個工作簿會產生400錯誤

[英]Copying range of cells from one workbook to another yields 400 error

好的,所以我對Excel VBA相對較新。 我正在嘗試做一些對我來說似乎很簡單的事情,並且有很多關於如何做到這一點的例子,我已經詳盡地閱讀了這些例子,但是我似乎無法克服這個問題。

我試圖將一個工作表中的一系列單元格粘貼到Excel Microsoft Office Professional Plus 2010中。我認為我已將問題簡化為可能的絕對簡單形式來說明問題。 這只是一個片段。 VictimResults和TempWorksheet變量設置得更高。 我沒有包含代碼,因為我認為它可能會使問題的表達變得混亂。

Dim SourceWorksheet As Worksheet
Dim TargetWorksheet As Worksheet
Dim SourceRange As Range
Dim TargetRange As Range    

Set SourceWorksheet = VictimResults
Set TargetWorksheet = TempWorksheet
Set SourceRange = Cells(1, 1)
Set TargetRange = Cells(1, 1)    

TargetWorksheet.Range(TargetRange)= SourceWorksheet.Range(SourceRange)我將變量SourceWorksheet,TargetWorksheet,SourceRange和TargetRange放置在手表中,並在最后一行設置斷點,它們都是有效對象(不為null)。 當我越過斷點時,會出現一個對話框,上面簡單地顯示“ 400”。

任何幫助深表感謝。

---編輯---我創建了一個完整的VBA文件,該文件復制了該問題。 以為可以幫助某人回答。

Option Explicit

Sub Main()
    GetFirstWorksheetContainsName("Sheet1").Range(Cells(1, 1)).Value = GetFirstWorksheetContainsName("Sheet2").Range(Cells(1, 1)).Value
End Sub

Function GetFirstWorksheetContainsName(worksheetNameContains) As Worksheet
    Dim m As Long
    Dim result As Worksheet

    m = 1

    Do
        If InStr(1, Sheets(m).Name, worksheetNameContains) Then
            Set result = Sheets(m)
            Exit Do
        End If

        m = m + 1
    Loop Until m > ThisWorkbook.Worksheets.Count

    Set GetFirstWorksheetContainsName = result
End Function

這是我嘗試過的其他方法,可以使工作變得更冗長。

Option Explicit

Sub Main()
    Sheets("Sheet1").Select
    Range(Cells(1, 1)).Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range(Cells(1, 1)).Select
    ActiveSheet.Paste
End Sub

當執行第一個Range(Cells(1,1))。Select行時,它給我一個“對象'_Global'的方法'Range'失敗”錯誤。

如果您要復制和粘貼,為什么不使用.copy.pastespecial 它們可能會稍微降低您的代碼的速度,但是只要您不復制和粘貼成千上萬的東西就可以了。

我不確定400的來源,但是拋出的異常與您的詳細示例相同(1004-“對象'_Worksheet'的方法'范圍'失敗”,並且由於相同的原因而拋出。

問題是您如何處理范圍。 Cells(1, 1)隱式設置為活動工作表 ,而不是將其作為參數傳遞給的范圍。 由於只需要一個單元格,因此可以只使用.Cells屬性:

Sub Main()

    GetFirstWorksheetContainsName("Sheet1").Cells(1, 1).Value = _
        GetFirstWorksheetContainsName("Sheet2").Cells(1, 1).Value

End Sub

如果您需要復制多個單元格,那么在使用動態范圍時,您必須獲取對工作表的引用,而不是內聯對GetFirstWorksheetContainsName的調用:

Sub Main()

    Dim source As Worksheet
    Dim data As Range

    Set source = GetFirstWorksheetContainsName("Sheet2")
    Set data = source.Range("A1:B2")

    GetFirstWorksheetContainsName("Sheet1").Range(data.Address).Value = data.Value

End Sub

或對其進行硬編碼:

Sub Main()

    GetFirstWorksheetContainsName("Sheet1").Range("A1:B2").Value = _
        GetFirstWorksheetContainsName("Sheet2").Range("A1:B2").Value

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM