Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Повторное открытие Excel вызывает ошибку 
:(
    Опции темы
Masterolya
Дата 23.3.2015, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 4.3.2015

Репутация: нет
Всего: нет



На форме есть панель и 2 кнопки. Одна кнопка открывает Excel и записывает туда данные, вторая закрывает. Подскажите, почему первый раз срабатывает все нормально (т.е. я открываю и закрываю книгу), но если я пытаюсь открыть книгу снова после закрытия, возникает ошибка "Ссылка на объект не указывает на экземпляр объекта."

Код

Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Imports System
 
Public Class Form1
    Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
    Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Private Const WM_SYSCOMMAND As Integer = 274
    Private Const SC_MAXIMIZE As Integer = 61488
    Dim oExcel As New Application
    
 
    Private Sub btnShowExcel_Click(sender As Object, e As EventArgs) Handles btnShowExcel.Click
        Dim Книга As Workbook = oExcel.Workbooks.Open("C:\Users\Olya\Desktop\пример1.xlsx")
        Dim Лист As Worksheet = CType(Книга.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet)
        'oExcel.DisplayAlerts = True
        Try
            Лист.Range("C15").Value = "запись1"
            Лист.Range("C16").Value = "запись2"
            Лист.Range("C17").Value = "запись3"
 
            oExcel.Application.WindowState = Excel.XlWindowState.xlMaximized
          
 
            oExcel.ExecuteExcel4Macro("SHOW.TOOLBAR(""Ribbon"", False)")
            SetParent(oExcel.Hwnd, pnlExcel.Handle)
            oExcel.Visible = True
            SendMessage(oExcel.Hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
        Catch ex As Exception ' обработка ошибок
            MsgBox(ex.ToString, MsgBoxStyle.Critical, "В программе произошла ошибка") '
        End Try
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        oExcel.ActiveWorkbook.Close(False)
 
        oExcel.Quit()
 
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
            oExcel = Nothing
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            GC.Collect()
        End Try
 
    End Sub
End Class

PM MAIL   Вверх
diadiavova
Дата 23.3.2015, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Masterolya, Ну ты ведь закрываешь приложение, мало того, собственноручно присваиваешь переменной Nothing и после этого ждешь, что она будет продолжать ссылаться на объект приложения.
В десятой строке просто объяви переменную, а инициируй ее в методе, где ты открываешь приложение. Ну как-то так вот что ли
Код

    Dim oExcel As Application
    
 
    Private Sub btnShowExcel_Click(sender As Object, e As EventArgs) Handles btnShowExcel.Click
        oExcel = New Application()



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.