Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как открыть 2 книги одновременно - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как открыть 2 книги одновременно
evgenyforever Дата: Вторник, 26.09.2023, 19:08 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Можно ли в экселе сделать такое:
Есть два экселевских файла (2 книги), в одной книге открыт и работает непрерывно макрос, в другой нет.

Я бы хотел работать в той книге, где нет макроса, но чтобы была открыта книга с макросом и она также продолжала беспрерывно работать.

Но при запуске книги с макросом, и одновременно, при открытии другой книги возникает ошибка:



На всякий случай приложу код макроса, который отвечает за подключение и обновление внешнего источника

[vba]
Код
Private Sub ОбновлениеПодключений()

    ' Макрос "Обновить подключения".

    Dim i As Long
    
     On Error Resume Next
    Do
    Обновление подключений.
    Worksheets("Лист 1").Range("A500").QueryTable.Refresh BackgroundQuery:=False
    
     i = i + 1
        DoEvents
    Loop While Err.Number <> 0 And i < 10
        
    
    If Err.Number <> 0 Then
        MsgBox "Не удалось обновить подключение!"
        Exit Sub
    End If
       
    Установка таймера.
    Application.OnTime Now + TimeValue("00:00:02"), "ОбновлениеПодключений"

End Sub
[/vba]


Сообщение отредактировал evgenyforever - Вторник, 26.09.2023, 19:43
 
Ответить
СообщениеМожно ли в экселе сделать такое:
Есть два экселевских файла (2 книги), в одной книге открыт и работает непрерывно макрос, в другой нет.

Я бы хотел работать в той книге, где нет макроса, но чтобы была открыта книга с макросом и она также продолжала беспрерывно работать.

Но при запуске книги с макросом, и одновременно, при открытии другой книги возникает ошибка:



На всякий случай приложу код макроса, который отвечает за подключение и обновление внешнего источника

[vba]
Код
Private Sub ОбновлениеПодключений()

    ' Макрос "Обновить подключения".

    Dim i As Long
    
     On Error Resume Next
    Do
    Обновление подключений.
    Worksheets("Лист 1").Range("A500").QueryTable.Refresh BackgroundQuery:=False
    
     i = i + 1
        DoEvents
    Loop While Err.Number <> 0 And i < 10
        
    
    If Err.Number <> 0 Then
        MsgBox "Не удалось обновить подключение!"
        Exit Sub
    End If
       
    Установка таймера.
    Application.OnTime Now + TimeValue("00:00:02"), "ОбновлениеПодключений"

End Sub
[/vba]

Автор - evgenyforever
Дата добавления - 26.09.2023 в 19:08
bmv98rus Дата: Вторник, 26.09.2023, 20:22 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4112
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
ну немного странно что цикл сделан так что минимум 10 раз обновляет подключения и потом делает паузу в 2 секунды.
Далее, естесвенно так как не указана книга, то при открытии второй код пытается что-то сделать с активной.

[vba]
Код
Private Sub ОбновлениеПодключений()

    ' Макрос "Обновить подключения".

    Dim i As Long
    
    On Error Resume Next
    Do
    Обновление подключений.
    ThisWorkbook.Worksheets("Лист 1").Range("A500").QueryTable.Refresh BackgroundQuery:=False
    
    i = i + 1
        DoEvents
    Loop While Err.Number <> 0 And i < 10
        
    
    If Err.Number <> 0 Then
        MsgBox "Не удалось обновить подключение!"
        Exit Sub
    End If
    
    Установка таймера.
    Application.OnTime Now + TimeValue("00:00:02"), ThisWorkbook.name & "!ОбновлениеПодключений"

End Sub
[/vba]


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 26.09.2023, 20:23
 
Ответить
Сообщениену немного странно что цикл сделан так что минимум 10 раз обновляет подключения и потом делает паузу в 2 секунды.
Далее, естесвенно так как не указана книга, то при открытии второй код пытается что-то сделать с активной.

[vba]
Код
Private Sub ОбновлениеПодключений()

    ' Макрос "Обновить подключения".

    Dim i As Long
    
    On Error Resume Next
    Do
    Обновление подключений.
    ThisWorkbook.Worksheets("Лист 1").Range("A500").QueryTable.Refresh BackgroundQuery:=False
    
    i = i + 1
        DoEvents
    Loop While Err.Number <> 0 And i < 10
        
    
    If Err.Number <> 0 Then
        MsgBox "Не удалось обновить подключение!"
        Exit Sub
    End If
    
    Установка таймера.
    Application.OnTime Now + TimeValue("00:00:02"), ThisWorkbook.name & "!ОбновлениеПодключений"

End Sub
[/vba]

Автор - bmv98rus
Дата добавления - 26.09.2023 в 20:22
evgenyforever Дата: Вторник, 26.09.2023, 21:27 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
bmv98rus, Спасибо, что приняли участие в обсуждении!
ну немного странно что цикл сделан так что минимум 10 раз обновляет подключения и потом делает паузу в 2 секунды.


Это нужно было для того, чтобы ушла ошибка с обновлением данных внешнего источника в ветке Обновление данных

Application.OnTime Now + TimeValue("00:00:02"), ThisWorkbook.name & "!ОбновлениеПодключений"


Данное решение не помогло, а может быть можно прописать в коде что весь макрос относится только к одной книге (той, которая с макросом, или лучше по имени книги).
Приложу весь лист с макросом, видимо, когда я написал часть макроса, это недостаточная информация для решения вопроса. Или нужно создать топик в "Вопросы по VBA"?
К сообщению приложен файл: kniga.xlsb (46.8 Kb)


Сообщение отредактировал evgenyforever - Вторник, 26.09.2023, 21:28
 
Ответить
Сообщениеbmv98rus, Спасибо, что приняли участие в обсуждении!
ну немного странно что цикл сделан так что минимум 10 раз обновляет подключения и потом делает паузу в 2 секунды.


Это нужно было для того, чтобы ушла ошибка с обновлением данных внешнего источника в ветке Обновление данных

Application.OnTime Now + TimeValue("00:00:02"), ThisWorkbook.name & "!ОбновлениеПодключений"


Данное решение не помогло, а может быть можно прописать в коде что весь макрос относится только к одной книге (той, которая с макросом, или лучше по имени книги).
Приложу весь лист с макросом, видимо, когда я написал часть макроса, это недостаточная информация для решения вопроса. Или нужно создать топик в "Вопросы по VBA"?

Автор - evgenyforever
Дата добавления - 26.09.2023 в 21:27
bmv98rus Дата: Вторник, 26.09.2023, 22:08 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4112
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
а запрос не идет ли во вторую книгу, открывая которую вы блокируете к ней доступ?


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщениеа запрос не идет ли во вторую книгу, открывая которую вы блокируете к ней доступ?

Автор - bmv98rus
Дата добавления - 26.09.2023 в 22:08
evgenyforever Дата: Вторник, 26.09.2023, 22:34 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Как проверить? Вполне может быть)


Сообщение отредактировал evgenyforever - Вторник, 26.09.2023, 22:38
 
Ответить
СообщениеКак проверить? Вполне может быть)

Автор - evgenyforever
Дата добавления - 26.09.2023 в 22:34
bmv98rus Дата: Среда, 27.09.2023, 07:17 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4112
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
Цитата evgenyforever, 26.09.2023 в 22:34, в сообщении № 5 ()
Как проверить?
так посомтреть в подключениях куда идут запросы.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
Цитата evgenyforever, 26.09.2023 в 22:34, в сообщении № 5 ()
Как проверить?
так посомтреть в подключениях куда идут запросы.

Автор - bmv98rus
Дата добавления - 27.09.2023 в 07:17
evgenyforever Дата: Среда, 27.09.2023, 13:48 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Если я Вас правильно понял, найдено два запроса на подключение:




Оба запроса обращаются к адресу C:\Users\evgen\AppData\Roaming\....


Сообщение отредактировал evgenyforever - Среда, 27.09.2023, 14:04
 
Ответить
СообщениеЕсли я Вас правильно понял, найдено два запроса на подключение:




Оба запроса обращаются к адресу C:\Users\evgen\AppData\Roaming\....

Автор - evgenyforever
Дата добавления - 27.09.2023 в 13:48
mgt Дата: Четверг, 28.09.2023, 11:54 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
А если так попробовать?
[vba]
Код
Private Sub ОбновлениеПодключений()

    ' Макрос "Обновить подключения".

    Dim i As Long
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    On Error Resume Next
    Do
    Обновление подключений.
    wb.Worksheets("Лист 1").Range("A500").QueryTable.Refresh BackgroundQuery:=False
    
    i = i + 1
        DoEvents
    Loop While Err.Number <> 0 And i < 10
        
    
    If Err.Number <> 0 Then
        MsgBox "Не удалось обновить подключение!"
        Exit Sub
    End If
    
    Установка таймера.
    Application.OnTime Now + TimeValue("00:00:02"), wb.name & "!ОбновлениеПодключений"

End Sub
[/vba]
 
Ответить
СообщениеА если так попробовать?
[vba]
Код
Private Sub ОбновлениеПодключений()

    ' Макрос "Обновить подключения".

    Dim i As Long
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    On Error Resume Next
    Do
    Обновление подключений.
    wb.Worksheets("Лист 1").Range("A500").QueryTable.Refresh BackgroundQuery:=False
    
    i = i + 1
        DoEvents
    Loop While Err.Number <> 0 And i < 10
        
    
    If Err.Number <> 0 Then
        MsgBox "Не удалось обновить подключение!"
        Exit Sub
    End If
    
    Установка таймера.
    Application.OnTime Now + TimeValue("00:00:02"), wb.name & "!ОбновлениеПодключений"

End Sub
[/vba]

Автор - mgt
Дата добавления - 28.09.2023 в 11:54
evgenyforever Дата: Четверг, 28.09.2023, 13:56 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
mgt, Как и в первом случае возникает ошибка:


Сообщение отредактировал evgenyforever - Четверг, 28.09.2023, 14:06
 
Ответить
Сообщениеmgt, Как и в первом случае возникает ошибка:

Автор - evgenyforever
Дата добавления - 28.09.2023 в 13:56
mgt Дата: Четверг, 28.09.2023, 15:00 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Обновление подключений.
[/vba]
Это в коде вообще откуда взялось? Закоментируйте эту строку.
 
Ответить
Сообщение[vba]
Код
Обновление подключений.
[/vba]
Это в коде вообще откуда взялось? Закоментируйте эту строку.

Автор - mgt
Дата добавления - 28.09.2023 в 15:00
evgenyforever Дата: Четверг, 28.09.2023, 15:30 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Application.OnTime Now + TimeValue("00:00:02"), wb.name & "!ОбновлениеПодключений"

При добавлении переменной
Цитата
wb.name & "!ОбновлениеПодключений"
возникает данная ошибка.

А если вот так: Application.OnTime Now + TimeValue("00:00:02"), "ОбновлениеПодключений", то ошибка не появляется, но и работать в двух книгах не получится - книга с макросом выдаст ошибку "Не удалось обновить подключение".

К сообщению приложен файл: kniga.xlsb (46.8 Kb)
Здесь находится весь макрос


Сообщение отредактировал evgenyforever - Четверг, 28.09.2023, 15:31
 
Ответить
Сообщение
Application.OnTime Now + TimeValue("00:00:02"), wb.name & "!ОбновлениеПодключений"

При добавлении переменной
Цитата
wb.name & "!ОбновлениеПодключений"
возникает данная ошибка.

А если вот так: Application.OnTime Now + TimeValue("00:00:02"), "ОбновлениеПодключений", то ошибка не появляется, но и работать в двух книгах не получится - книга с макросом выдаст ошибку "Не удалось обновить подключение".

К сообщению приложен файл: kniga.xlsb (46.8 Kb)
Здесь находится весь макрос

Автор - evgenyforever
Дата добавления - 28.09.2023 в 15:30
mgt Дата: Четверг, 28.09.2023, 16:20 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 101
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Private Sub ОбновлениеПодключений()

    Dim i As Long
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    On Error Resume Next
    Do

    wb.Worksheets("Лист 1").Range("A1:A501").QueryTable.Refresh BackgroundQuery:=False
    
    i = i + 1
        DoEvents
    Loop While Err.Number <> 0 And i < 10
        
    
    If Err.Number <> 0 Then
        MsgBox "Не удалось обновить подключение!"
        Exit Sub
    End If

    Application.OnTime Now + TimeValue("00:00:02"), Run(wb.Name & "!Module1.ОбновлениеПодключений") 'впишите вместо Module1 правильное название модуля

End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Private Sub ОбновлениеПодключений()

    Dim i As Long
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    On Error Resume Next
    Do

    wb.Worksheets("Лист 1").Range("A1:A501").QueryTable.Refresh BackgroundQuery:=False
    
    i = i + 1
        DoEvents
    Loop While Err.Number <> 0 And i < 10
        
    
    If Err.Number <> 0 Then
        MsgBox "Не удалось обновить подключение!"
        Exit Sub
    End If

    Application.OnTime Now + TimeValue("00:00:02"), Run(wb.Name & "!Module1.ОбновлениеПодключений") 'впишите вместо Module1 правильное название модуля

End Sub
[/vba]

Автор - mgt
Дата добавления - 28.09.2023 в 16:20
evgenyforever Дата: Понедельник, 02.10.2023, 20:45 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
mgt, Спасибо!
'впишите вместо Module1 правильное название модуля

Переименовал на [vba]
Код
Run(wb.Name & "!Module2.ОбновлениеПодключений")
[/vba] и при открытии другой книги одновременно с запуском макроса ошибка ушла, действительно, данное решение работает, но макрос перестал обновлять ячейку A501 каждые 2 секунды, как это было задумано вот этим макросом:

Цитата evgenyforever, 26.09.2023 в 19:08, в сообщении № 1 ()
Worksheets("Лист 1").Range("A500").QueryTable.Refresh BackgroundQuery:=False

и
 Установка таймера.
Application.OnTime Now + TimeValue("00:00:02")


Т.е. макрос запускается один раз и все, а должен чтобы обновление (Refresh) ячейки A501 происходило каждые 2 сек. Возможно дополнить до нужного решения?


Сообщение отредактировал evgenyforever - Понедельник, 02.10.2023, 20:45
 
Ответить
Сообщениеmgt, Спасибо!
'впишите вместо Module1 правильное название модуля

Переименовал на [vba]
Код
Run(wb.Name & "!Module2.ОбновлениеПодключений")
[/vba] и при открытии другой книги одновременно с запуском макроса ошибка ушла, действительно, данное решение работает, но макрос перестал обновлять ячейку A501 каждые 2 секунды, как это было задумано вот этим макросом:

Цитата evgenyforever, 26.09.2023 в 19:08, в сообщении № 1 ()
Worksheets("Лист 1").Range("A500").QueryTable.Refresh BackgroundQuery:=False

и
 Установка таймера.
Application.OnTime Now + TimeValue("00:00:02")


Т.е. макрос запускается один раз и все, а должен чтобы обновление (Refresh) ячейки A501 происходило каждые 2 сек. Возможно дополнить до нужного решения?

Автор - evgenyforever
Дата добавления - 02.10.2023 в 20:45
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!