powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel. Потеря ActiveSheet
25 сообщений из 42, страница 1 из 2
Excel. Потеря ActiveSheet
    #36887135
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
доброго времени суток, уважаемые

Подскажите пожалуйста существуют ли приемы условно говоря всех объектов Excel и заполнения только конкретного экземпляра?

Ситуация следущая: Имеется приложение, которое по кнопке выводит пользователю отчет с форматированием не только шапки, но и всего объема данных (условно говоря секционирование строк + форматирование по центру в первом столбце каждой секции)
в зависимости от объема данных отчет может заполняться до 50 секунд

В это время пользователь хочет работать в другом (своем) экземпляре Excel, и как только он позиционирует курсор на своем экселевом файле, то теряется ссылка на ActiveSheet, ну и возникает ошибка "Application-defined or object-defined error"

выгружать данные через буфер - не вариант, потому как не понимаю как можно будет задать указанное форматирование.

собственно, может ли кто-нибудь помочь советом по вопросу блокировки всех экземпляров Excel или поделиться опытом в случае удачного решения описанной проблемы.


_________________________________
Не нужно бежать от снайпера, только умрешь уставшим(с)
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887138
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо так ваше ПО написано, надо было делать не через ActiveSheet, а через именнованный
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887147
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто не надо работать с ActiveSheet - работать со ссылкой на конкретный лист
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887148
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneвидимо так ваше ПО написано, надо было делать не через ActiveSheet, а через именнованный
Ну можно просто в начале макроса Set MySheet=ActiveSheet и дальше работать с MySheet
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887153
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProKonst_Oneвидимо так ваше ПО написано, надо было делать не через ActiveSheet, а через именнованный
Ну можно просто в начале макроса Set MySheet=ActiveSheet и дальше работать с MySheet

ну так и я об этом же или просто сделать уникальное имя и к нему обращаться при открытие объекта
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887167
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneвидимо так ваше ПО написано, надо было делать не через ActiveSheet, а через именнованный

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
hwnd = FindWindow2("XLMAIN",  0 )
If hwnd =  0  Then
    Set ExcelApp = CreateObject("excel.application")
    ourexcel = True
Else
    Set ExcelApp = GetObject(, "Excel.Application")
    ourexcel = False
End If

ExcelApp.Workbooks.Add
ExcelApp.Visible = True
Set exws = ExcelApp.ActiveWorkbook.ActiveSheet
...
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887171
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это я к тому, что вроде как ссылка именнованная ;)
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887173
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плохо это очень, через findwindow - это вообще жесть какая-то. может сразу createobject() попробуете?
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887178
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneплохо это очень, через findwindow - это вообще жесть какая-то. может сразу createobject() попробуете?а ты дальше второй строки смотришь?
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887181
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KallandorKonst_Oneплохо это очень, через findwindow - это вообще жесть какая-то. может сразу createobject() попробуете?а ты дальше второй строки смотришь?

смотрю, но это извращение, а не код. открывайте сразу нужный вам sheet
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887185
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kallandorэто я к тому, что вроде как ссылка именнованная ;)
Если дальнейшая работа идет ТОЛЬКО с exws, то проблем с уводом фокуса пользователем быть не должно
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887186
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneKallandorKonst_Oneплохо это очень, через findwindow - это вообще жесть какая-то. может сразу createobject() попробуете?а ты дальше второй строки смотришь?

смотрю, но это извращение, а не код. открывайте сразу нужный вам sheetсейчас о чем идет речь?
о макросе?
о приложении?
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887191
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProKallandorэто я к тому, что вроде как ссылка именнованная ;)
Если дальнейшая работа идет ТОЛЬКО с exws, то проблем с уводом фокуса пользователем быть не должнода, дальше работа идет только по exws и проблема возникает =)
парадокс
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887195
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KallandorShocker.ProЕсли дальнейшая работа идет ТОЛЬКО с exws, то проблем с уводом фокуса пользователем быть не должнода, дальше работа идет только по exws и проблема возникает =)
парадокс
Тогда приведенных вами данных недостаточно для локализации проблемы.
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887198
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KallandorShocker.ProKallandorэто я к тому, что вроде как ссылка именнованная ;)
Если дальнейшая работа идет ТОЛЬКО с exws, то проблем с уводом фокуса пользователем быть не должнода, дальше работа идет только по exws и проблема возникает =)
парадокс

я вообще не понимаю зачем вы окно excel-a пытаетесь искать, из-за этого у вас и проблемы. и объект workbook тоже можно получить при добавлении, а не юзать по ссылке ActiveWorkbook
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887218
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneKallandorShocker.ProKallandorэто я к тому, что вроде как ссылка именнованная ;)
Если дальнейшая работа идет ТОЛЬКО с exws, то проблем с уводом фокуса пользователем быть не должнода, дальше работа идет только по exws и проблема возникает =)
парадокс

я вообще не понимаю зачем вы окно excel-a пытаетесь искать, из-за этого у вас и проблемы. и объект workbook тоже можно получить при добавлении, а не юзать по ссылке ActiveWorkbook

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
...
'файд нужен только для определения принадлежности Excel, если Excel "наш",
' то ExcelApp.Quit и уничтожение ссылок, иначе просто уничтожение ссылок
hwnd = FindWindow2("XLMAIN",  0 )
If hwnd =  0  Then
    Set ExcelApp = CreateObject("excel.application")
    ourexcel = True
Else
    Set ExcelApp = GetObject(, "Excel.Application")
    ourexcel = False
End If

'внимательно смотрим сюда =)
ExcelApp.Workbooks.Add

ExcelApp.Visible = True
Set exws = ExcelApp.ActiveWorkbook.ActiveSheet
...

...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887227
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProKallandorShocker.ProЕсли дальнейшая работа идет ТОЛЬКО с exws, то проблем с уводом фокуса пользователем быть не должнода, дальше работа идет только по exws и проблема возникает =)
парадокс
Тогда приведенных вами данных недостаточно для локализации проблемы. то есть вы сомневаетесь в моей способности локализовать проблему?

=)

Ошибка происходит при попытке установки значения в ячейку

Код: plaintext
exws.Range(Chr(i +  65 ) & CStr(excounter)) = FormatNumber(rssubtot.Fields(i).Value,  2 , vbTrue, vbFalse, vbUseDefault)

строка на которой происходит ошибка =)
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887232
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё раз:
создавайте объект экселя сами на основе нужного вам sheet и не будет у вас проблем
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887239
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Kallandor

Привет, меч, который не меч и не меч вовсе :)

Перепиши код таким образом, чтобы исключить любое обращение с общим свойствам типа ActiveSheet, ActiveCell. Для этого
пообявляй переменные нужных типов и инициализируй их при начале работы макроса/программы.
Например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
Sub RollingData()
'
' Макрос1 Макрос
' Макрос записан 14.01.2009 (user)
'

'
Dim sCurrentFiltRange As String
Dim r As Range
Dim s As Worksheet, sh As Worksheet, shOut As Worksheet, w As Workbook, w1 As Workbook
Dim vPriznak As Variant
Dim vMonth As Variant
Dim vGroup As Variant

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Set w = Application.ActiveWorkbook
Set sh = Worksheets("филиал")
sCurrentFiltRange = sh.AutoFilter.Range.Address

Set w1 = Application.Workbooks.Add
Application.DisplayAlerts = False
w1.PrecisionAsDisplayed = True
w1.Worksheets("Лист1").Delete
w.Worksheets("Результат").Delete
Application.DisplayAlerts = True

Set s = w1.Worksheets.Add
s.Name = "Лист1"
Set s = Nothing

Set s = w.Worksheets.Add
s.Name = "Результат"

' Получаем список уникальных комбинаций из
' признак филиал-Укрнафта или ещё какой-то,
' месяца оплаты, номера платёжного поручения,
' группы, вида и суммы оплаты
Set r = Worksheets("Лист1").Range("a1")
sh.Range("P:U").AdvancedFilter xlFilterCopy, , r, True
Application.DisplayAlerts = False
w1.PrecisionAsDisplayed = False
DoEvents
w1.PrecisionAsDisplayed = True
vGroup = r.Range("a2:F" + CStr(r.SpecialCells(xlCellTypeLastCell).Row -  1 )).Value2
Application.DisplayAlerts = True

w.Activate
s.Select
Dim iPriz As Long, iMonth As Long, iGr As Long, i As Long, nCurrRow As Long, bFirst As Boolean
nCurrRow =  2 
Dim ar As Areas
For iGr = LBound(vGroup) To UBound(vGroup)
    With sh.Range(sCurrentFiltRange)

        .AutoFilter Field:= 16 , Criteria1:=CStr(vGroup(iGr,  1 )) '"январь"
        .AutoFilter Field:= 17 , Criteria1:=CStr(vGroup(iGr,  2 )) '"филиал"
        .AutoFilter Field:= 18 , Criteria1:=CStr(vGroup(iGr,  3 )) '№ платежки
        .AutoFilter Field:= 19 , Criteria1:=CStr(vGroup(iGr,  4 )) '"группа"
        .AutoFilter Field:= 20 , Criteria1:=CStr(vGroup(iGr,  5 )) '"статья"
        .AutoFilter Field:= 21 , Criteria1:=Replace(Trim(Format(vGroup(iGr,  6 ), "#,##0.00")), ",", ".") 
'w1.Worksheets("Лист1").Cells(iGr + 1, 5) 'Trim(Format(vGroup(iGr, 5), "#,##0.00"))   '"62,76"
        'DoEvents
        For Each r In sh.Range(sCurrentFiltRange).SpecialCells(xlCellTypeVisible).Areas
            i = i + r.Rows.Count ' .SpecialCells(xlCellTypeVisible).Rows.Count
        Next r
        If i >  1  Then
            bFirst = True
            For Each r In sh.Range(sCurrentFiltRange).SpecialCells(xlCellTypeVisible).Areas
                If r.Rows.Count >  1  Or Not bFirst Then
                    r.Rows( 1  + - 1  * CLng(bFirst)).Copy
                    s.Select
                    s.Rows(nCurrRow).Select
                    s.Paste
                    s.Cells(nCurrRow,  21 ).Value = "=" + Replace(CStr(s.Cells(nCurrRow,  21 ).Value), ",", ".") + "*" + 
CStr(i -  1 )
                    s.Cells(nCurrRow,  31 ).Value = CStr(i -  1 )
                    nCurrRow = nCurrRow +  1 
                    Exit For
                Else
                    bFirst = False
                End If
            Next r
        Else
            i = i
        End If
        Debug.Print i -  1 , Round(CDbl(vGroup(iGr,  6 )),  2 ), CStr(vGroup(iGr,  1 )), CStr(vGroup(iGr,  2 )), CStr(vGroup(iGr, 
 3 )), CStr(iGr)
        i =  0 
    End With
Next iGr
' Отключаем автофильтры
sh.ShowAllData
' Закрываем книгу с уникальным списком
sCurrentFiltRange = w1.Name
Set w1 = Nothing
Application.DisplayAlerts = False
Application.Workbooks(sCurrentFiltRange).Close (False)
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Закончили!"
End Sub

В примере на входе книга с листом данных, зачастую повторяющихся по многим столбцам, макрос "вытаскивает" уникальные
комбинации данных по нужным столбцам в новую книгу, и потом "перетряхивает" исходные данные для "ужатия", т.е.
отбрасывает ненужные столбцы, а сумму суммирует. При этом происходят постоянные обращения к разным книгам и никакой
проблемы нет.

Дальше, тебе сказали что глупо искать окно ексела, если можно обойтись несколькими строчками кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Try
 XLApp = Getobject(,'excel.application') && Пытаемся получить инстанс открытого ексела
Catch To oErr
 Try
  XLApp = Createobject('excel.application') && Если попали сюда, значит открытого ексела не оказалось
 Catch To oErr1
  Messagebox("Не возможно обработать данные! Нет установленного Excel!",  0 + 48 + 4096 , "Внимание!",  30000 )
  m_w = .F.
  Exit
 Endtry
Endtry
Это не VB, а FoxPro, но смысл, я думаю понятен

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887240
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneещё раз:
создавайте объект экселя сами на основе нужного вам sheet и не будет у вас проблем звучит также как: ешьте чеснок три раза в день и будет вам счастье
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887244
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KallandorKonst_Oneещё раз:
создавайте объект экселя сами на основе нужного вам sheet и не будет у вас проблем звучит также как: ешьте чеснок три раза в день и будет вам счастье

что вам пытаются объяснить:
метод ExcelApp.Workbooks.Add
возвращает Workbook
использовать ActiveWorkbook НЕ НАДО
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887267
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Kallandor

Привет, меч, который не меч и не меч вовсе :)

Перепиши код таким образом, чтобы исключить любое обращение с общим свойствам типа ActiveSheet, ActiveCell. Для этого
пообявляй переменные нужных типов и инициализируй их при начале работы макроса/программы.

Дальше, тебе сказали что глупо искать окно ексела, если можно обойтись несколькими строчками кода.

привет =)

обращение к ActiveSheet у меня идет всего лишь один раз. Обращения к ActiveCells нет.
данные берутся из RecordSet, и обрабатываются не макросом, а приложением (приложение написано на VB6)
выделенное не поняла к чему относится =)

Shocker.Pro что вам пытаются объяснить:
метод ExcelApp.Workbooks.Add
возвращает Workbook
использовать ActiveWorkbook НЕ НАДО а как мне тогда достучаться до листа?
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887271
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kallandorа как мне тогда достучаться до листа?
Чистого? WorkSheets(1)
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887276
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.
Kallandor то есть вы сомневаетесь в моей способности локализовать проблему?
2.
Kallandorто теряется ссылка на ActiveSheet, ну и возникает ошибка
3.
Kallandorда, дальше работа идет только по exws и проблема возникает
Если 3., то причем здесь 2.?

Либо проблема в другом, либо ActiveЧтоТо все же используется.
...
Рейтинг: 0 / 0
Excel. Потеря ActiveSheet
    #36887344
Фотография Kallandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro1.
Kallandor то есть вы сомневаетесь в моей способности локализовать проблему?
2.
Kallandorто теряется ссылка на ActiveSheet, ну и возникает ошибка
3.
Kallandorда, дальше работа идет только по exws и проблема возникает
Если 3., то причем здесь 2.?

Либо проблема в другом, либо ActiveЧтоТо все же используется. Коллега, при всем уважении к вашему искреннему желанию помочь мне в решении проблемы и ради исключения флуда и офтопа давайте сравним словари.
1. Есть ли у вас приложения написанные на VB6, которые долго и упорно что-либо пишут в Excel, с форматированием из приложения (не по макросу)?
2. Если подобные приложения имеются не могли бы вы провести эксперимент: а) открыть новый файл экселя.. что-нибудь туда записать (не закрывать) б) запустить приложение которое бы наполняло Excel в) переключиться на созданный вами файл Excel и что-либо в нем отредактировать?

3. Сообщить о результатах эксперимента. В случае возникновения ошибки (отлов ошибки в приложении должен быть предусмотрен) написать ее текс, или отловить ошибку в RunTime
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel. Потеря ActiveSheet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]