复制并粘贴Excel工作表

时间:2015-11-04 19:32:38

标签: excel vba excel-vba

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无法将工作表插入目标工作簿,因为它包含的源工作簿包含的行和列更少。若要将数据移动或复制到目标工作簿,可以选择数据,然后使用“复制”和“粘贴”命令将其插入到另一个工作簿的工作表中。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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