将图片和数据从一个excel文件复制到另一个excel文件

时间:2012-06-11 05:20:26

标签: excel excel-vba vb.net-2010 vba

我有一个excel文件,其中包含前五行的图片,然后数据开始。我的工作是将文件原样复制到另一个excel文件中。首先,我打开文件并复制使用的范围。接下来,我将内容粘贴到另一个excel文件中。

 lobjCurrentWorkSheet.UsedRange.Copy()

 lobjTargetExcelWorkSheet.PasteSpecial(XlPasteType.xlPasteAll)

通过以上操作,我只能复制数据而不能复制图片?我如何将文件原样复制到另一个文件?

如果我使用SaveAs选项,并且源文件是密码加密的,那么我的目标文件也将被密码加密,这是我不想要的。

1 个答案:

答案 0 :(得分:2)

我绝不会建议使用UsedRange

原因:

您的数据可能是从单元格A1到B4,图像是D1。在这种情况下,UsedRange始终为A1:B4而不是A1:F6

enter image description here

如果您希望复制图片,请找出工作表的“实际范围”或指定范围

lobjCurrentWorkSheet.Range("A1:F6").Copy()
lobjTargetExcelWorkSheet.Paste()

编辑:我试图把手放在VB.Net上,这样我就可以给你一个确切的示例代码。我终于做到了:))

看到这个(这将复制实际范围,而无需指定它。

    Dim shp As Excel.Shape
    Dim lCol As Integer = 0

    '~~> Loop through all shapes and find the last col of the shape
    For Each shp In lobjCurrentWorkSheet.Shapes
        If shp.BottomRightCell.Column > lCol Then _
        lCol = shp.BottomRightCell.Column
    Next

    With lobjCurrentWorkSheet
        '~~> Find actual last Row
        Dim LastRow As Integer = .Cells.Find(What:="*", _
                     After:=.Range("A1"), _
                     LookAt:=Excel.XlLookAt.xlPart, _
                     LookIn:=Excel.XlFindLookIn.xlFormulas, _
                     SearchOrder:=Excel.XlSearchOrder.xlByRows, _
                     SearchDirection:=Excel.XlSearchDirection.xlPrevious, _
                     MatchCase:=False).Row
        '~~> Find actual last column
        Dim LastColumn As Integer = .Cells.Find(What:="*", _
                    After:=.Range("A1"), _
                    LookAt:=Excel.XlLookAt.xlPart, _
                    LookIn:=Excel.XlFindLookIn.xlFormulas, _
                    SearchOrder:=Excel.XlSearchOrder.xlByColumns, _
                    SearchDirection:=Excel.XlSearchDirection.xlPrevious, _
                    MatchCase:=False).Column

        '~~> Check if we have the correct last columnm
        If LastColumn < lCol Then LastColumn = lCol

        .Range("A1:" & Split(.Cells(, LastColumn).Address,
        "$")(1) & LastRow).Copy()
    End With

    '~~> Copies to the current active cell in lobjTargetExcelWorkSheet
    lobjTargetExcelWorkSheet.Paste()
相关问题