Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: После использования макроса не закрывается EXCEL Добавлено: 12.08.15 06:54  

Автор вопроса:  anatoliy-2
Добрый день(вечер)!
Помогите пожалуйста решить следующую проблему.
При запуске Excel с использованием VBA из приложения WORD или любого другого приложения открывается Excel, выполняется всё что задумано и как бы всё хорошо.
Привожу пример: часть макроса WORD. При запуске макроса один раз всё происходит как и задумано. При запуске следующий раз вылетает по ошибке. Как удалось выяснить проблема возникает при использовании свойства Cells которое задаёт регион ячеек, при этом создаётся ещё один экземпляр Excel который не закрывается при выходе из приложения VBA. При замене выражения на
'Set xRange = MySheet.Range("A1:J10")
всё работает нормально. Но надо именно вариант
Set xRange = MySheet.Range(Cells(1, 1), Cells(10, 10))
так как только в нём есть возможность управлять ячейками программно.
Используется Office 2003, проверял в 2010 тоже самое.
Кто знает как решить данную проблему пожалуйста помогите.

12.08.2015 С уважением Анатолий.

Перед использованием макроса не забываем подключить в References библиотеки
WORD и EXCEL. Лишнюю копию которая не закрывается смотрим в Диспетчере задач.

Sub HelpMe()
Dim CountColumns As Integer
Dim objExcel As Excel.Application
Dim excelApp As Workbook
Dim MySheet As Worksheet
Dim xRange As Excel.Range
Set objExcel = New Excel.Application
Set excelApp = objExcel.Workbooks.Add
Set MySheet = excelApp.ActiveSheet
'===============ПРОБЛЕМНЫЙ КОД===========================
'Для тестирования всех троих вариантов вышестоящую строку
'с кодом закоментируйте,а нижестоящую розкоментируйте
'*******************************************************
'Так создается лишняя копия EXCEL
Set xRange = MySheet.Range(Cells(1, 1), Cells(10, 10))
'И так тоже создается лишняя копия EXCEL
'Set xRange = Range("A1:J10")
'Так работает нормально
'Set xRange = MySheet.Range("A1:J10")
'===============ПРОБЛЕМНЫЙ КОД===========================
xRange.NumberFormat = "@"
For CountColumns = 1 To 10
    objExcel.ActiveSheet.Cells(CountColumns, CountColumns).Value = CountColumns
Next CountColumns
objExcel.Visible = True
objExcel.ScreenUpdating = True
'Нижерасположенные строки не оказывают
'влияния на уничтожение лишней копии Excel
Set xRange = Nothing
Set MySheet = Nothing
Set excelApp = Nothing
Set objExcel = Nothing
End Sub

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #1 Добавлено: 17.08.15 03:06
Добрый день!
Измените строку
  1. Set xRange = MySheet.Range(Cells(1, 1), Cells(10, 10))

на строку
  1. Set xRange = MySheet.Range(MySheet.Cells(1, 1), MySheet.Cells(10, 10))

Информация: https://support.microsoft.com/ru-ru/kb/178510

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам