Этот код работает VB, но дает исключение в VB.NET, почему? - PullRequest
1 голос
/ 08 августа 2011

Цель достижения: Я хочу изменить исходные данные сводной таблицы.

Я хочу изменить его с '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 ]

3 голосов
/ 08 августа 2011

По предложению Марка Гравелла я поменяю свой комментарий на ответ:

Я могу вспомнить две причины, по которым ваш код ломается в VB.NET:

  • Если в VB вы используете где-то в своем коде On Error Resume Next (о ужас), то вы не увидите его в VB, но увидите его в VB.NET (потому что он не допускает ошибокигнорировать).

  • Вы отметили Excel.Я предполагаю, что вы перешли от более старой версии Excel к более новой версии, или вы переместили свой код из Excel в автономную VB.NET.Целый ряд изменений, не связанных с VB, может вызвать появление ошибки.

Почему вы получаете сообщение об отсутствии принтера (или о любом другом указателе, который дал вам Джон), я не знаю, но вы можете попробовать этот конкретный вопрос на http://superuser.com.

1 голос
/ 08 августа 2011

Возможно, эта ошибка связана с принтер недоступен .Я не знаю, почему вы получаете его в VB.NET, но не в VB ... но вы можете посмотреть на разрешения вашего принтера и т. Д.

РЕДАКТИРОВАТЬ: Это сообщение также может быть полезным, показывая изменения службы DCOM в отношении идентификации.

РЕДАКТИРОВАТЬ: Ооо, похоже, ошибка может означать несколько вещей. Эта страница MSDN упоминает ее в контексте региональных настроек ...

0 голосов
/ 08 августа 2011

Interop отстой в принципе.Проверьте ваши процессы (диспетчер задач) ... должен быть хотя бы один процесс excel.exe, который не отображается на рабочем столе.Убейте их, так как они могут использовать файл.Это приводит к вашей ошибке «Не удается открыть исходный файл C: \ file.xlsx».И кто знает, что это может также исправить вашу другую ошибку.

Если это не так, проверьте, установили ли вы последние сборки взаимодействия и используйте их.Это помогает, когда вы имеете дело с продуктами Office.http://msdn.microsoft.com/en-us/library/15s06t57(v=VS.100).aspx

0 голосов
/ 08 августа 2011

Это версия 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
...