我正在尝试在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的新手
感谢您的帮助和最诚挚的问候!
答案 0 :(得分: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)
希望这有帮助。