Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос в Excel / 15 сообщений из 15, страница 1 из 1
20.02.2020, 15:13
    #39928964
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
Добрый день!
У меня есть макрос, который при открытии на основном листе сначала фильтрует информацию а потом копирует содержимое на другой лист. И вот если открывать Excel с макросом на соей локальной машине, все хорошо. Но если этот файл Excel отправляется на почту адресату в виде ссылки на документ. И потом попробовать этот файл открыть по этой ссылке, то возникает ошибка
Run-time error '91'
object variable or with variable not set

Подскажите пожалуйста что эта за ошибка???

Код макроса
Код: vbnet
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.
Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    On Error GoTo macro
macro:
    Call Module1.macros1
    Application.ScreenUpdating = True
End Sub

Sub macros1()

Dim LastRow As Long

Set WS1 = ActiveWorkbook.Sheets("Параметры")
Set WS2 = ActiveWorkbook.Sheets("Лист1")

k = WS1.Cells(2, 3).Value2

LastRow = WS2.Cells(Rows.Count, 1).End(xlUp).Row

If k = 1 Then
    
    If LastRow <= 1 Or IsNull(LastRow) Then
        GoTo err
    End If
    
    Call macros2
       
    WS1.Cells(2, 3) = 0
    WS2.Visible = False
End If

err:

End Sub

Sub macros2()

'Объявляем переменные
Dim DSheet As Worksheet
Dim LastRow As Long
Dim LastCol As Long

On Error Resume Next

Application.DisplayAlerts = False
Set DSheet = Worksheets("Лист1")

'Диапазон
LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column

ActiveSheet.Range("A1:AB" & LastRow).AutoFilter Field:=1, Criteria1:="1"

Range("B1:H" & LastRow).Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("Лист2").Select
Sheets("Лист2").Name = "Выгрузка1"

Sheets("Лист1").Select
ActiveSheet.Range("A1:AB" & LastRow).AutoFilter Field:=1, Criteria1:="2"
Range("I1:R" & LastRow).Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("Лист3").Select
Sheets("Лист3").Name = "Выгрузка2"

Sheets("Лист1").Select
ActiveSheet.Range("A1:AB" & LastRow).AutoFilter Field:=1, Criteria1:="3"
Range("S1:AB" & LastRow).Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("Лист4").Select
Sheets("Лист4").Name = "Выгрузка3"
Sheets("Лист1").Select
Application.DisplayAlerts = True

End Sub
...
Рейтинг: 0 / 0
20.02.2020, 16:01
    #39928991
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
начать надо с этого
https://www.sql.ru/faq/faq_topic.aspx?fid=4344

но вообще, не очень понятно, что значит
hum_i
отправляется на почту адресату в виде ссылки на документ
...
Рейтинг: 0 / 0
21.02.2020, 09:19
    #39929287
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
hum_i
Подскажите пожалуйста что эта за ошибка?
А Вы не проверяли, открываемый файл не в режиме защищенного просмотра? Т.к. по умолчанию все файлы, скачанные из почты или интернета открываются в зищищенном режиме. И как следствие выполнить макрос невозможно, как и получить любое свойство,объект открытой книги(хоть лист, хоть ячейку, хоть ссылку на саму книгу).
Если запустить надо "по любому" - придется делать костыль внутри кода автозапуска, чтобы дождаться, когда книгу "разрешат". Можно сделать что-то вроде:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Workbook_Open()
    'цикл до тех пор, пока ссылка на книгу не станет доступной
    on error resume next
    dim wb as workbook
    do while wb is nothing
        set wb = me
        doevents
    loop
    on error goto 0

    Application.ScreenUpdating = False
    On Error GoTo macro
macro:
    Call Module1.macros1
    Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
26.02.2020, 09:12
    #39930897
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
В режиме защищенного просмотра
Попробовала этот код, все равно выходит эта ошибка
...
Рейтинг: 0 / 0
26.02.2020, 10:11
    #39930914
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
hum_i
Попробовала этот код
вопрос в том - как именно попробовали? Куда код поместили, на какой строке ошибка?
...
Рейтинг: 0 / 0
26.02.2020, 10:20
    #39930921
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
The_Prist,
...
Рейтинг: 0 / 0
26.02.2020, 10:24
    #39930926
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
Вложила скриншот, чтобы показать где код
Если скрин не откроется, то код поместила в раздел "ЭтаКнига" Workbook
И отловить ошибку не удается, макрос просто не запускается
...
Рейтинг: 0 / 0
26.02.2020, 10:34
    #39930932
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
Вот еще скрин последовательности действий
Кода на ошибке нажимаешь End то макрос просто не запускается
...
Рейтинг: 0 / 0
26.02.2020, 11:00
    #39930947
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
hum_i
Кода на ошибке нажимаешь End то макрос просто не запускается
Это логично - End - это завершение. Надо жать Debug.
hum_i
макрос просто не запускается
не совсем понял. А откуда ошибка тогда берется?
...
Рейтинг: 0 / 0
26.02.2020, 11:14
    #39930952
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
hum_i,

Для начала в коде надо убрать вот это:

Код: vbnet
1.
On Error Resume Next
...
Рейтинг: 0 / 0
26.02.2020, 11:17
    #39930953
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
Eolt
в коде надо убрать вот это
в том-то и дело, что в моем коде это необходимо - иначе ошибка появится сразу же. А если ошибка появляется в коде в том виде, в котором сейчас - значит она появляется в другой процедуре, скорее всего. Уже после того, как защищенный просмотр был снят.
...
Рейтинг: 0 / 0
26.02.2020, 11:52
    #39930973
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
The_Prist,

Я писал hum_i в ответ на первый пост. Там On Error Resume Next в самом начале отключает обработку ошибок.
...
Рейтинг: 0 / 0
26.02.2020, 12:00
    #39930981
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
Eolt,

да, но ошибка-то появляется явно раньше, исходя из 1-го сообщения. И там же описание: ошибка появляется только если файл открывается по ссылке. Вот и хочется понять где именно в текущей реализации кода она вообще возникает. Видимо там, где On Error еще не установлен, раз ошибка есть.
Но в любом случае, надо ожидать ответа автора темы, чтобы понять на какой это вообще строке все происходит.

Причина скорее всего та, что я описал. Но так же нет уверенности, что в активной книге есть все листы, указанные в коде. И так же непонятно, зачем ActiveWorkbook, если обращаемся к самой книге с кодом. В общем, вопросов больше, чем ответов :)

Может вообще на самой первой строке при обращении к Application возникает ошибка(т.к. опять же - защищенный режим). Хотя это обращение там вообще не нужно.
...
Рейтинг: 0 / 0
27.02.2020, 11:28
    #39931542
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
The_Prist
hum_i
Кода на ошибке нажимаешь End то макрос просто не запускается
Это логично - End - это завершение. Надо жать Debug.
hum_i
макрос просто не запускается
не совсем понял. А откуда ошибка тогда берется?

Кнопка Debug не активна. Поэтому и не получается отловить ошибку
...
Рейтинг: 0 / 0
27.02.2020, 13:03
    #39931643
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос в Excel
hum_i
Кнопка Debug не активна
Значит ошибка возникает в проекте, защищенным паролем. Или если этот проект не доступен(например, в книге с общим доступом). Других вариантов просто нет.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос в Excel / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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