0

我正在尝试在 VB.net 中编写一个应用程序,该应用程序通过明智地处理另一个打开的工作簿中的单元格来组装 Excel 工作簿。[注意:就目前而言,这两个工作簿是在同一个 Excel 应用程序中打开的 - 最初我使用的是两个不同的 Excel 实例,但直到后来我才意识到两个实例之间的 PasteSpecial 行为不同]

我正在使用 Visual Studio 2012、Excel 2007,并且在项目引用中包含 Microsoft Excel 12.0 对象库

代码是这样的:

Dim appXL As Excel.Application
Dim wbXLsource As Excel.Workbook
Dim wbXLtarget As Excel.Workbook

''with two different buttonclick event handlers 
''I assign wbXLsource and wbXLtarget
''the full code is omitted
...
wbXLsource = appXL.Workbooks.Open(strFileNameAndPath)
...
...
wbXLtarget = appXL.Workbooks.Add
...


''I use a third button handler for the 
''Copy and PasteSpecial Operations
    Private Sub btnAppendWorksheet_Click(sender As Object, e As EventArgs) _
    Handles btnAppendWorksheet.Click

    Dim shXLtar As Excel.Worksheet
    Dim shXLsou As Excel.Worksheet

    shXLtar = wbXLtarget.ActiveSheet
    shXLtar.Cells.Clear()
    shXLsou = wbXLsource.ActiveSheet

    shXLsou.Range("A1:H433").Copy()
    Try
        shXLtar.Range("A1:H433").PasteSpecial(Excel.XlPasteType.xlPasteAll, False, False) ''Paste special Format:=
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

End Sub

PasteSpecial 方法抛出异常“Range 类的PasteSpecial 方法失败”。

奇怪的是,相同的代码最初在两个运行在不同 Excel 实例中的工作簿中工作 [当时我有 appXLtarget 和 appXLsource]。不用说,我在代码的任何部分都尝试了“选择”、“激活”的所有可能组合:例如在 Copy 和 PasteSpecial 等之间。可能有一些非常粗糙的东西我错过了 <- 我是新人VB.net 的

感谢您的帮助和最诚挚的问候!

4

1 回答 1

1

如果你是 VB.Net 的新手,你应该首先研究一下 OptionStrict。将 optionStrict 设置为 ON,VS 不会编译您的代码...

代替 shXLtar.Range("A1:H433").PasteSpecial(Excel.XlPasteType.xlPasteAll, False, False)

shXLtar.Range("A1:H433").PasteSpecial(Excel.XlPasteType.xlPasteAll,Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,False, False)

或者

shXLtar.Range("A1:H433").PasteSpecial(Excel.XlPasteType.xlPasteAll)

希望这可以帮助。

于 2013-05-22T18:42:37.470 回答