Excel VBA赢得';不要复制下一个表,而是继续粘贴第一个表

Excel VBA赢得';不要复制下一个表,而是继续粘贴第一个表,excel,vba,Excel,Vba,我有以下代码 Sub Workbook_Open() Dim x As Workbook Dim y As Workbook Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.DisplayAlerts = False Application.AlertBeforeOverwriting = False Set x = ThisWorkbook Set

我有以下代码

Sub Workbook_Open()

Dim x As Workbook
Dim y As Workbook


Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False

Set x = ThisWorkbook

Set y = Workbooks.Open("N:\\REAL PATH")

'Opens Data and Pastes Values

   x.Worksheets("Event Data").Range("Table1[#All]").Copy
   y.Worksheets("CoreData").Range("A1").PasteSpecial Paste:=xlPasteValues

   x.Worksheets("Comments").Range("Table2[#All]").Copy
   y.Worksheets("CommentsData").Range("A1").PasteSpecial Paste:=xlPasteValues


   x.Worksheets("Match Data").Range("Table3[#All]").Copy
   y.Worksheets("MatchDetails").Range("A1").PasteSpecial Paste:=xlPasteValues

   y.Close SaveChanges:=True



ActiveWorkbook.Save

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub


运行代码后,我转到名为y的工作簿,发现表1的数据已经粘贴了三次。因此,基本上,y.工作表行工作正常,但它不会复制表2或表3中的数据。如果我按ctrl+g并键入“Table2[#All]”,我将进入完整的表2,这样我就知道该范围存在,VBA应该能够找到它。表1包含相当多的数据(从131k行到DZ的列),但我不知道这是否相关

我发现创建和使用中间变量有助于解决数据传输中的任何问题。另外,您可以在调试时查看这些变量,以验证它们是否正确设置

试着做以下几点:

Option Explicit

Sub Example()
    Dim srcWB As Workbook
    Dim dstWB As Workbook
    Set srcWB = ThisWorkbook
    Set dstWB = Workbooks.Open("N:\\REAL PATH")

    Dim srcData As Range
    Dim dstData As Range
    Set srcData = srcWB.Sheets("Event Data").Range("Table1[#All]")
    Set dstData = dstWB.Sheets("CoreData").Range("A1").Resize(srcData.Rows.Count, _
                                                              srcData.Columns.Count)
    dstData.Value = srcData.Value

    Set srcData = srcWB.Sheets("Comments").Range("Table2[#All]")
    Set dstData = dstWB.Sheets("CommentsData").Range("A1").Resize(srcData.Rows.Count, _
                                                                  srcData.Columns.Count)
    dstData.Value = srcData.Value

    Set srcData = srcWB.Sheets("Match Data").Range("Table3[#All]")
    Set dstData = dstWB.Sheets("MatchDetails").Range("A1").Resize(srcData.Rows.Count, _
                                                                  srcData.Columns.Count)
    dstData.Value = srcData.Value

    dstWB.Close SaveChanges:=True
End Sub
您还混淆了使用
此工作簿
和以后使用
活动工作簿
。现在还不清楚你在存哪一块钱


这种类型的“仅值”数据拷贝速度非常快,您可能不需要禁用事件或屏幕更新。如果您还有捕获工作表更改的事件处理程序,则可能仍然需要禁用这些变量。

我发现,创建和使用中间变量可以极大地帮助解决数据传输中的任何问题。另外,您可以在调试时查看这些变量,以验证它们是否正确设置

试着做以下几点:

Option Explicit

Sub Example()
    Dim srcWB As Workbook
    Dim dstWB As Workbook
    Set srcWB = ThisWorkbook
    Set dstWB = Workbooks.Open("N:\\REAL PATH")

    Dim srcData As Range
    Dim dstData As Range
    Set srcData = srcWB.Sheets("Event Data").Range("Table1[#All]")
    Set dstData = dstWB.Sheets("CoreData").Range("A1").Resize(srcData.Rows.Count, _
                                                              srcData.Columns.Count)
    dstData.Value = srcData.Value

    Set srcData = srcWB.Sheets("Comments").Range("Table2[#All]")
    Set dstData = dstWB.Sheets("CommentsData").Range("A1").Resize(srcData.Rows.Count, _
                                                                  srcData.Columns.Count)
    dstData.Value = srcData.Value

    Set srcData = srcWB.Sheets("Match Data").Range("Table3[#All]")
    Set dstData = dstWB.Sheets("MatchDetails").Range("A1").Resize(srcData.Rows.Count, _
                                                                  srcData.Columns.Count)
    dstData.Value = srcData.Value

    dstWB.Close SaveChanges:=True
End Sub
您还混淆了使用
此工作簿
和以后使用
活动工作簿
。现在还不清楚你在存哪一块钱


这种类型的“仅值”数据拷贝速度非常快,您可能不需要禁用事件或屏幕更新。如果您还有捕获工作表更改的事件处理程序,则可能仍需要禁用这些功能。

有趣。您可能只需要使用值传输,就可以避免使用剪贴板。值传输基本上就像粘贴为值一样工作?我听说使用较小的数据集速度更快,但我实际上不知道如何编写。很有趣。您可能只需要使用值传输,就可以避免使用剪贴板。值传输基本上就像粘贴为值一样工作?我听说更小的数据集更快,但我实际上不知道如何编写。工作起来非常有魅力!看起来我可以访问剪贴板,而这段代码正在运行,这是一个巨大的加号m1。工作像一个绝对的魅力!看起来我可以在代码运行时访问剪贴板,这对m1来说是一个巨大的优势。