Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 08.09.2009
Сообщений: 5

Макрос автосохранения работает по-разному на разных машинах

29.04.2012, 09:31. Показов 3322. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброе время суток.Написал макрос автосохранения определенной excel книги.
На одном компе все вроде работает нормально.Неважно какая книга активна на данный момент, нужная сохраняется в хайд-режиме, видет только статус бар сохранения внизу.
На другой машине все совсем иначе, при автосохранение активируется нужная книга, сохраняется и сама по себе закрывается и открывается предыдущая, и так всегда пока крутится макрос.
и иногда создаются непонятные файлы типа AOE33300 , в той же папке ,куда идет автосохранение.

В чем может быть причина такой не понятной ситуации или ошибка?


Вот код.

Visual Basic
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
Private Sub Workbook_Open()
module1
End Sub
 
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Application.DisplayAlerts = False
    If Not ThisWorkbook.Saved Then ThisWorkbook.Save
    Application.DisplayAlerts = True
End Sub
 
Sub module1()
Application.OnTime Now + TimeValue("00:00:10"), "module2"
End Sub
 
 
Sub module2()
iFullName$ = "C:\Documents and Settings\User\Рабочий стол\ХЗУ,16,01,2012\данные по ниткам.xls"
iFileName$ = Dir(iFileName$)
 
 
If iFileName$ <> "" Then
   ThisWorkbook.Save
Else
   MsgBox "Указанная книга изволит отсутствовать", , ""
End If
module1
End Sub
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2012, 09:31
Ответы с готовыми решениями:

На разных машинах код работает по разному
Здравствуйте. Есть вот такой фрагмент кода, который должен из строки делать число: double dRes; if ( double.TryParse (...

Приложение по разному работает на разных пк
Всем доброго времени суток, нужна ваша помощь. Написал программу в которой одна из функций по таймеру(1000мс) фокусируется на приложение,...

По-разному работает на разных телефонах
Делаю программу на Android Studio. И вот такая проблема, что на моём телефоне часть программы не работает, а на другом - работает. В чём...

17
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
22.10.2015, 13:27
Здравствуйте. Удалось разобраться с этой напастью? Если д, поделитесь решением, у меня такая же проблема. макрос работает корректно в excel 2010, и некорректно в 2007 (сам открывает книгу). только код у меня проще:
Visual Basic
1
2
3
4
5
6
7
Sub myMacro()
Application.OnTime Now() + TimeSerial(0, 0, 5), "myMacro"
Application.DisplayAlerts = False
On Error GoTo label_
ThisWorkbook.Save
label_:
End Sub
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
26.10.2015, 13:54
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Maklaut, много ненужного в вашей программе!
1. BeforeSave работает только тогда, когда прошла уже команда Save string 22. В этой процедуре вы можете что-то ещё делать, но запись всё равно пройдет.
2 Если речь идет о сохранении себя, то просто надо убрать из текста программы строки 5-9, а вместо 22 поставить 7 и всё будет хорошо на любом офисе.
3 В операторе 18 описка dir от самого себя, видимо в скобках должно стоят ifullname. Хотя эти операторы (17,18,21,23,24)тоже не нужны, когда речь идет о самосохранении.
4 Если нужно сохранить другую книгу, которая должна быть открыта в ексел (а может и нет), то поиск ее нужно осуществлять в семействе WorkBooks:
TF=true
for each Wb in WorkBooks
if Wb.name=ifilename then
TF=false
сохранение книги ifilename, если не сохранена
end if
next
if TF then Нет такой книги
0
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
26.10.2015, 14:09
А что по поводу моего кода скажете? там-то ничего нет лишнего?
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
27.10.2015, 10:28
А у вас обратная ситуация, маленечко чего-то не хватает
Общая идея у вашего коллеги правильная - при открытии надо запустить таймер и определить макрос, который будет выполняться, это делается в WorkBook_Open. По истечение времени работает макрос проверки необходимости сохранения и таймер перезаряжается. А у вас получается рекурсивное обращения на себя (на ваш макрос) и как реагируют разные офисы на такие непонятки, а господь знает. А вот Beforesave совсем не нужна, если только не надо сделать, что-то, не относящееся к записи файла т.к. она уже сработает неминуемо (запись)
Мой мэйл вырезано, если хотите, то вышлю xls-file с переделанной задачей МАКЛАУТа.
1
0 / 0 / 0
Регистрация: 26.06.2011
Сообщений: 3
19.04.2019, 13:01
Цитата Сообщение от Burk Посмотреть сообщение
А у вас обратная ситуация, маленечко чего-то не хватает
Общая идея у вашего коллеги правильная - при открытии надо запустить таймер и определить макрос, который будет выполняться, это делается в WorkBook_Open. По истечение времени работает макрос проверки необходимости сохранения и таймер перезаряжается. А у вас получается рекурсивное обращения на себя (на ваш макрос) и как реагируют разные офисы на такие непонятки, а господь знает. А вот Beforesave совсем не нужна, если только не надо сделать, что-то, не относящееся к записи файла т.к. она уже сработает неминуемо (запись)
Мой мэйл вырезано, если хотите, то вышлю xls-file с переделанной задачей МАКЛАУТа.
Не могли бы Вы запостить итоговый код пожалуйста
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
19.04.2019, 15:30
Shkur, вы не обратили внимание, что мое последнее сообщение по этой теме датируется 27.10.2015 в 19:58 И вы думаете, что я до сих пор помню куда положил файл с задачей МАКЛАУТА? Проще вам создать тему с проблемой и кто-то, почти наверняка, поможет, может и я успею вклиниться.
0
 Аватар для rediffusion
5 / 5 / 0
Регистрация: 13.11.2016
Сообщений: 90
26.06.2019, 01:31
Как сделать так чтоб сохранялись и закрывались все книги после клика на крестик в правом верхнем углу?
0
198 / 132 / 67
Регистрация: 27.03.2019
Сообщений: 288
26.06.2019, 07:36
rediffusion, В модуль книги вставьте этот код, будут закрываться все открытые эксельки с сохранением.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim wb As Workbook
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    For Each wb In Workbooks
        If wb.Name <> ThisWorkbook.Name Then
            wb.Close SaveChanges:=True
        End If
    Next wb
    Application.DisplayAlerts = True
    Application.EnableEvents = True
End Sub
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
26.06.2019, 07:52
rediffusion, если в одной "главной книге" прописать в обработчике событий
Private Sub Workbook_BeforeClose(Cancel As Boolean)
закрытие всех остальных книг с проверкой необходимости сохранения каждой. Начинать Закрытие с этой главной.
Если она находится в окне, то можно закрыть через красный крест. Пока ничего другого на ум не приходит.

Добавлено через 7 минут
Kate_27, тогда ваш код надо будет вставить во все открываемые книги.
0
198 / 132 / 67
Регистрация: 27.03.2019
Сообщений: 288
26.06.2019, 07:59
Burk, нет, достаточно только одной книги, с этим кодом, остальные закроются, потом закроется она. Крестик естественно надо нажать на книге, содержащей код.
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
26.06.2019, 08:11
Kate_27, так я про это и писал, только у меня термин Главная книга

Добавлено через 8 минут
Думаю, что rediffusion хотел чтобы при нажатии на красную всё закрывалось при любых книгах. Если бы был обработчик события закрытия Application, тогда бы это было выполнимо, но я такого не знаю.
1
198 / 132 / 67
Регистрация: 27.03.2019
Сообщений: 288
26.06.2019, 08:16
Burk, нет, достаточно только одной книги, с этим кодом, остальные закроются, потом закроется она. Крестик естественно надо нажать на книге, содержащей код.
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
26.06.2019, 08:27
Мне что, тоже повторить мою фразу про Главную?
1
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
26.06.2019, 08:45
Если сохранить нижеопубликованный код строго в модуле ThisWorkbook(ЭтаКнига) личной книги макросов "Personal.xls(b)" , то при следующем запуске приложения (или выполнении события Open), можно будет кликать на крестик в любой книге. Правда новые+не сохранённые книги также будут закрыты, что приведёт к потере всех данных, но это уже мелочи

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private WithEvents xlApp As Application
 
Private Sub Workbook_Open()
    Set xlApp = Application
End Sub
 
Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
    xlApp.ScreenUpdating = False
    xlApp.DisplayAlerts = False
    xlApp.EnableEvents = False
    For Each Wb In xlApp.Workbooks
        Wb.Save 'Wb.Close True
    Next
    xlApp.Quit
End Sub
1
198 / 132 / 67
Регистрация: 27.03.2019
Сообщений: 288
26.06.2019, 08:49
Burk, очевидно же, что у меня интернет залагал, поэтому 2 сообщения отправилось.
Обработчик уровня application можно прописать, только нужно создавать дополнительный класс для этого.

Добавлено через 30 секунд
Burk, очевидно же, что у меня интернет залагал, поэтому 2 сообщения отправилось.
Обработчик уровня application можно прописать, только нужно создавать дополнительный класс для этого.
0
Заблокирован
26.06.2019, 09:57
Kate_27, в следующий раз отправьте ... (три точки, или ёёё), потом можете править дубли до умопомрачения.
0
 Аватар для rediffusion
5 / 5 / 0
Регистрация: 13.11.2016
Сообщений: 90
26.06.2019, 10:36
Kate_27,

Извините но это не то. Похожие коды я находил в `Youtube` и на `StackOverflow`. Не робит!
Цитата Сообщение от Burk Посмотреть сообщение
Думаю, что rediffusion хотел чтобы при нажатии на красную всё закрывалось при любых книгах.
Именно так!

pashulka,
Это именно то что мне и было нужно. 1000 раз спасибо! 1 месяц поисков наконец подошли к концу!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2019, 10:36
Помогаю со студенческими работами здесь

почему в разных ОС по разному работает IntelliJ
Привет всем! собственно сабж, далее вкладываю два скриншота: 1) ОС Линукс Дебиан 8 2) ОС Винда 10 обоих случаях IDE была скачана...

Компьютер работает по разному в разных квартирах
Я знаю, что тема странная, но попробую описать свою проблему. Мой пк: Процессор: i7-8700 Кулер: Deepcool Gammaxx 400 Материнская...

Ssd работает по разному на разных материнках?
всем хаюшки преобрел ssd SanDisk Ultra II на 120 до этого стоял Kingston v300 на 120 по тестам должен был заметно дать разницу но...

Программа работает по-разному на разных компах
Дали задание на написание небольшой программы в С++, работа с массивами. На домашнем компе работает правильно, всё выполняется. ...

Макрос в файле ексель, который находится на сервере, у 2 пользователей работает по-разному
Файл ексель находится на сервере. К нему имеют доступ 2 пользователя. В нем имеется несколько макросов. Один из этих макросов должен с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru