这个代码工作VB但在VB.NET中给出异常,为什么?

时间:2011-08-08 12:30:27

标签: .net vb.net excel excel-vba vb6-migration vba

旨在实现: 我想更改数据透视表的SourceData。

我想将其从'C:\[file.xlsx]SheetName'!RangeName更改为'SheetName'!RangeName

我有以下实现:

For Each table In sheet.PivotTables
    Dim str = "'" + Split(table.SourceData, "]")(1)
    table.SourceData = str   // Gives Exception here
Next table

// Exception: Exception from HRESULT: 0x800A03EC

发生错误时str的值为'SheetName'!RangeName(这很好..)

我也在异常之前收到一个消息框: Can not open the source file C:\file.xlsx(不是很明显,因为它正在使用中)

请帮助..这在VB中作为宏工作。

4 个答案:

答案 0 :(得分:3)

根据Marc Gravell的建议,我将评论改为答案:

我可以想到你的代码在VB.NET中断的两个原因:

  • 如果在VB中使用代码中的某处On Error Resume Next(哦恐怖),那么你在VB中看不到它,但会在VB.NET中看到它(因为它不允许出错)被忽略)。

  • 您已标记Excel。我假设您从较旧版本的Excel转到较新版本,或者您将代码从Excel移动到独立的VB.NET。大量非VB相关的更改可能会导致弹出错误。

为什么你得到一个关于打印机不可用的错误(或Jon给你的任何其他指示),我不知道,但你可以在http://superuser.com上尝试这个特定的问题。

答案 1 :(得分:1)

据说,此错误与no printer being available有关。我不知道你为什么要在VB.NET中使用它而不是在VB中...但是你可能想查看你的打印机权限等。

编辑:This post也可能有用,显示DCOM服务在身份方面的变化。

编辑:噢,看起来错误可能意味着多件事。 This MSDN page在区域设置环境中提到它......

答案 2 :(得分:0)

这是VB.Net版本,就像你在vb.net-exe中使用它一样。它在EXCEL.VBA中不起作用,但据我所知,你想要一个VB.Net版本?

Imports Microsoft.Office.Interop

Sub ChangePivotTableSourceData()
    Dim e As New Excel.Application
    e.Workbooks.Open("c:\testdoc.xlsx", , True) 'Open the doc readonly
    Dim sheet As Excel.Worksheet = e.ActiveSheet

    For Each table As Excel.PivotTable In sheet.PivotTables
        table.SourceData = "'" + Split(table.SourceData, "]")(1)
    Next

    e.ActiveWorkbook.SaveAs("c:\testdoc_changed.xlsx") 'Save under another name
    e.ActiveWorkbook.Close()
    e.Quit()
    sheet = Nothing
    e = Nothing
End Sub

答案 3 :(得分:0)

Interop基本上很糟糕。检查您的进程(任务管理器)......应该至少有一个在桌面上看不到的excel.exe进程。杀死他们,因为他们可能正在使用该文件。这导致您的'无法打开源文件C:\ file.xlsx'错误。谁知道它也可以解决你的其他错误。

如果没有,请检查是否安装了最新的互操作程序集并使用它们。当您处理Office产品时,它会有所帮助。 http://msdn.microsoft.com/en-us/library/15s06t57(v=VS.100).aspx