1

最初の 5 行に画像を含む Excel ファイルがあり、データが開始されます。私の仕事は、ファイルをそのまま別のExcelファイルにコピーすることです。まず、ファイルを開いて使用範囲をコピーします。次に、内容を別の Excel ファイルに貼り付けます。

 lobjCurrentWorkSheet.UsedRange.Copy()

 lobjTargetExcelWorkSheet.PasteSpecial(XlPasteType.xlPasteAll)

上記を実行すると、データのみをコピーでき、画像はコピーできませんか? ファイルをそのまま別のファイルにコピーするにはどうすればよいですか?

オプションを使用SaveAsし、ソース ファイルがパスワードで暗号化されている場合、ターゲット ファイルもパスワードで暗号化されますが、これは望ましくありません。

4

1 に答える 1

2

私は決して使用をお勧めしませんUsedRange

理由:

データはセルA1からB4までのものであり、画像はたとえばD1にあります。このUsedRange場合、常にそうでA1:B4はありませんA1:F6

ここに画像の説明を入力してください

写真をコピーしたい場合は、ワークシートの「実際の範囲」を見つけるか、範囲を指定してください

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()
于 2012-06-11T05:56:40.823 に答える