【问题标题】:Copy and paste Excel sheets复制和粘贴 Excel 工作表
【发布时间】:2015-11-04 19:32:37
【问题描述】:
Private Sub CommandButton1_Click()
Dim ws As Worksheet
    With Application.FileDialog(msoFileDialogFilePicker)
       .Show
       If .SelectedItems.Count <> 0 Then
       fldr = .SelectedItems(1)
       End If
    End With
    Sheets.link.Value = fldr
    For i = 1 To Worksheets.Count
        Set ws = Worksheets(i)
        If ws.Cells(2, 1) = "X" Then
            Sheets.ComboBox1.AddItem (ws.Name)
        End If
    Next i
    Workbooks.Open (fldr)
    Sheets.Show
End Sub

Private Sub Add_Click()

Dim x As String
Dim ws As Workbook

x = Right(link.Value, (Len(link.Value) - InStrRev(link.Value, "ild") - 3))

Workbooks("Test.xlsm").Activate

Worksheets(ComboBox1.Value).Copy Before:=Workbooks(x).Worksheets("Contract")

End Sub

所以基本想法是,您单击 Excel 工作表上的一个按钮。然后用户找到他们想要将工作表复制到的文件。它将找到所有特定类型的工作表,将其放入表单组合框中并打开选定的 Excel 文件。 然后从组合框中选择一张工作表并将其从一个工作簿复制到另一个工作簿。这一切都有效,直到复制部分。我收到一个很长的错误:

Excel 无法将工作表插入到目标工作簿中,因为它包含的行和列少于源工作簿。要将数据移动或复制到目标工作簿,您可以选择数据,然后使用复制和粘贴命令将其插入到另一个工作簿的工作表中。

【问题讨论】:

  • 首先想到的是,源工作表可能太大,而目标工作簿来自旧版本的 Excel。对吗?
  • 在答案部分写一些东西,这样我也可以接受,因为你是对的。我使用的是.xlsm,而我要复制到的是.xls。当我将它保存为 .xlsm 时,它起作用了。
  • 我很高兴它有所帮助。好吧,别担心,重要的是问题解决了。无论如何,谢谢你的好意;)
  • @A.S.H 我建议您将其作为答案,以便将来寻找类似帖子的用户可以轻松找到解决方案。问候,
  • @nbayly 好的,事实上,我测试过它,有趣的是,即使使用的范围很小,它似乎也会发生。这是一个兼容性问题,因此我认为它值得一个全面的答案。谢谢你的建议:)

标签: vba excel


【解决方案1】:

如果目标工作簿来自旧版本的 Excel(扩展名为 .xls,例如 Excel 97 或 Excel 2003),则旧工作表中的行数限制为 2^16-1,因为行号已编码在 16 位上。在较新的版本中,此数字以 32 位编码。

因此,将工作表“作为一个整体”从较新版本复制到较旧版本的工作簿中会引发此错误。根据我的测试,即使复制的工作表中实际使用的范围很小,也会出现此错误。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。 关注@A.S.G。建议,我用新的文件格式(xlsx)保存了旧工作簿,关闭并重新打开它,之后一切正常。 希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多