Добрый день!!! Прошу Вас помощи... Проблема заключается в том что на сервере имеются файлы которыми пользуются. Но иной раз по своей нерасторопности не закрывают его после использования. И приходиться производить обзвон в поисках КТО НЕ ЗАКРЫЛ ГУГЛ помог My WebPage Применил аналогично данный макрос, в ходе возникли проблемы. Теперь на сервере не могу открыть два файла экселя одновременно (в которых содержатся аналогичные макросы) да даже если и нет вообще макросов в файлах Как можно это избежать!? Хотя данный макрос с решением задумки справляется на ура!!!
А может ли замена этой строки в макросе повлиять на работоспособность [vba]
Код
Private Declare Function GetCursorPos Lib "user32.dll" (IpPOINT As POINTAPI) As Long
[/vba] на [vba]
Код
Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" (IpPOINT As POINTAPI) As Long
[/vba] Просто на рабочем столе у меня стоит 2007 эксель и первая строка работает А если я переношу данный макрос на сервер (а там установлен 2010 эксель) то я вынужден заменить на вторую строку потому как ругается. Но тогда и возникают проблемы с работоспособностью двух файлов одновременно (хотя попробовал открыть на рабочем столе 2007 экселя два файла тоже самое ) ПЕЧАЛЬКА
Добрый день!!! Прошу Вас помощи... Проблема заключается в том что на сервере имеются файлы которыми пользуются. Но иной раз по своей нерасторопности не закрывают его после использования. И приходиться производить обзвон в поисках КТО НЕ ЗАКРЫЛ ГУГЛ помог My WebPage Применил аналогично данный макрос, в ходе возникли проблемы. Теперь на сервере не могу открыть два файла экселя одновременно (в которых содержатся аналогичные макросы) да даже если и нет вообще макросов в файлах Как можно это избежать!? Хотя данный макрос с решением задумки справляется на ура!!!
А может ли замена этой строки в макросе повлиять на работоспособность [vba]
Код
Private Declare Function GetCursorPos Lib "user32.dll" (IpPOINT As POINTAPI) As Long
[/vba] на [vba]
Код
Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" (IpPOINT As POINTAPI) As Long
[/vba] Просто на рабочем столе у меня стоит 2007 эксель и первая строка работает А если я переношу данный макрос на сервер (а там установлен 2010 эксель) то я вынужден заменить на вторую строку потому как ругается. Но тогда и возникают проблемы с работоспособностью двух файлов одновременно (хотя попробовал открыть на рабочем столе 2007 экселя два файла тоже самое ) ПЕЧАЛЬКАlebensvoll
lebensvoll, воть так декларируют под разные версии Excel [vba]
Код
#If VBA7 Then ' Code is running in the new VBA7 editor(Office 2010-2016) Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" (IpPOINT As POINTAPI) As Long #Else ' Code is running in VBA version 6 or earlier(Office 2003-2007) Private Declare Function GetCursorPos Lib "user32.dll" (IpPOINT As POINTAPI) As Long #End If
[/vba]
lebensvoll, воть так декларируют под разные версии Excel [vba]
Код
#If VBA7 Then ' Code is running in the new VBA7 editor(Office 2010-2016) Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" (IpPOINT As POINTAPI) As Long #Else ' Code is running in VBA version 6 or earlier(Office 2003-2007) Private Declare Function GetCursorPos Lib "user32.dll" (IpPOINT As POINTAPI) As Long #End If
boa, спасибо за ответ... Я просто еще не пробовал Ваше предложение а решил сразу ответить. Как я понимаю макрос получается если он выявляет что установлен офис 2003 то срабатывает предпоследняя строка макроса и соответственно наоборот!? Но как быть с тем что если открыть файл а потом на рабочем столе открыть другой файл. И он не открывается (((( И я теперь вообще не могу в этом макросе что то изменить что за ........
boa, спасибо за ответ... Я просто еще не пробовал Ваше предложение а решил сразу ответить. Как я понимаю макрос получается если он выявляет что установлен офис 2003 то срабатывает предпоследняя строка макроса и соответственно наоборот!? Но как быть с тем что если открыть файл а потом на рабочем столе открыть другой файл. И он не открывается (((( И я теперь вообще не могу в этом макросе что то изменить что за ........lebensvoll
Теперь на сервере не могу открыть два файла экселя одновременно
Уберите строку закрытия Excel [vba]
Код
Application.Quit
[/vba] А то у вас файл как эгоист "уходя сжигает мосты". Можно включить мультидоступ, тогда одновременно могут вносить изменения несколько человек Или, если я правильно понял вашу мысль, то я вообще по другому бы сделал.
в модуль книги: [vba]
Код
Private Sub Workbook_Open() MyTime = Time 'присваиваем паблик переменной MyTime значение текущего времени Call CheckInactivity End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) MyTime = Time ' и при внесении изменений на листе обновляем его End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MyTime = Time End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnTime EarliestTime:=CheckTime, _ Procedure:="CheckInactivity", _ Schedule:=False ' отключаем перезапуск макроса End Sub
[/vba] в стандартный модуль: [vba]
Код
Option Explicit Public MyTime As Date Public CheckTime As Date
Sub CheckInactivity() Dim MyTimer As Date: MyTimer = TimeValue("00:10:00") ' тут задайте время, через которое производятся проверки активности With Application If Time > MyTime + MyTimer Then If Not .ThisWorkbook.ReadOnly Then 'если файл в чтении, то пусть читают .DisplayAlerts = 0 .ThisWorkbook.Close True .DisplayAlerts = 1 End If Else ' зацикливаем запуск макроса CheckTime = Time + MyTimer Debug.Print CheckTime .OnTime EarliestTime:=CheckTime, _ Procedure:="CheckInactivity", _ Schedule:=True End If End With End Sub
Теперь на сервере не могу открыть два файла экселя одновременно
Уберите строку закрытия Excel [vba]
Код
Application.Quit
[/vba] А то у вас файл как эгоист "уходя сжигает мосты". Можно включить мультидоступ, тогда одновременно могут вносить изменения несколько человек Или, если я правильно понял вашу мысль, то я вообще по другому бы сделал.
в модуль книги: [vba]
Код
Private Sub Workbook_Open() MyTime = Time 'присваиваем паблик переменной MyTime значение текущего времени Call CheckInactivity End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) MyTime = Time ' и при внесении изменений на листе обновляем его End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MyTime = Time End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnTime EarliestTime:=CheckTime, _ Procedure:="CheckInactivity", _ Schedule:=False ' отключаем перезапуск макроса End Sub
[/vba] в стандартный модуль: [vba]
Код
Option Explicit Public MyTime As Date Public CheckTime As Date
Sub CheckInactivity() Dim MyTimer As Date: MyTimer = TimeValue("00:10:00") ' тут задайте время, через которое производятся проверки активности With Application If Time > MyTime + MyTimer Then If Not .ThisWorkbook.ReadOnly Then 'если файл в чтении, то пусть читают .DisplayAlerts = 0 .ThisWorkbook.Close True .DisplayAlerts = 1 End If Else ' зацикливаем запуск макроса CheckTime = Time + MyTimer Debug.Print CheckTime .OnTime EarliestTime:=CheckTime, _ Procedure:="CheckInactivity", _ Schedule:=True End If End With End Sub
[/vba]
Внимание, приложенный файл с автозапуском макросаboa