Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Корректный доступ к файлу Добавлено: 18.06.08 16:38  

Автор вопроса:  Дмитрий | ICQ: 421607787 
Подскажите, пожалуйста, как в Exeleвском макросе сделать так, что если при обращении к какому-нибудь файлу, если этот файл уже открыт, то пока он не закроется, запросы на открытие(т.е. проверка закрылся или нет) повторялись бы.
Например Workbooks.Open "Лог.xls"
После этого если "Лог.xls" уже был открыт, он все равно открывается в режиме для чтения, и ошибки при этом никакой не возникает. Она появляется позже, когда идет попытка внести изменения в файл. А мне нужно что бы он в режиме для чтения сразу не открывался, а открывался в нормальном режиме(как только появится возможность)

Ответить

  Ответы Всего ответов: 28  

Номер ответа: 1
Автор ответа:
 Дмитрий



ICQ: 421607787 

Вопросов: 1
Ответов: 13
 Профиль | | #1 Добавлено: 19.06.08 08:23
Ну подскажите хоть что-нибудь...

Если проще, то нужно что бы при открытии файла явно указывалось только открытие "чтение и запись". Тогда будет возникать ошибка которую можно будет обработать.
Может вобще нельзя так явно задать открытие файла? в справке не нашел...

Ответить

Номер ответа: 2
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #2 Добавлено: 19.06.08 09:10
Попробуй поиграться с параметрами Workbooks.Open. Может найдешь то, что нужно. Правда сама их не часто использую и не все. :-)

Ответить

Номер ответа: 3
Автор ответа:
 Дмитрий



ICQ: 421607787 

Вопросов: 1
Ответов: 13
 Профиль | | #3 Добавлено: 19.06.08 10:24
Так игрался я уже... Именно вот у Workbooks.Open нет больше параметров. Отдельно Open это для текстового файла. И кроме чисто VBA для Excel ничего не предлагать :) потому что больше я ничего не знаю

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

Ответить

Номер ответа: 4
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #4 Добавлено: 19.06.08 10:35
Учись :)

А придумаешь как обходится одним ВБА, напиши ...

Ответить

Номер ответа: 5
Автор ответа:
 Дмитрий



ICQ: 421607787 

Вопросов: 1
Ответов: 13
 Профиль | | #5 Добавлено: 19.06.08 11:01
А придумаешь как обходится одним ВБА, напиши ...

Значит вариантов нет :(

Вобще есть мысли, но очень криво это будет выглядеть...
Я думал может как-то попроще и надежней

А в 2007 офисе случайно не реализовали встроенное что-то?
Ведь всего то нужно лишний параметр на открытие файла в определенном режиме...

Ответить

Номер ответа: 6
Автор ответа:
 LonerWanderer



Вопросов: 18
Ответов: 66
 Профиль | | #6 Добавлено: 19.06.08 11:05
Попробуй так.
Открываешь книгу, делаешь ее visible=false, проверяешь в каком режиме открыта и если read-only, то закрываешь ее, а если в полном доступе, то делаешь ее видимой.

Ответить

Номер ответа: 7
Автор ответа:
 Дмитрий



ICQ: 421607787 

Вопросов: 1
Ответов: 13
 Профиль | | #7 Добавлено: 19.06.08 11:15
проверяешь в каком режиме открыта

Так вот, как проверить?

Ответить

Номер ответа: 8
Автор ответа:
 LonerWanderer



Вопросов: 18
Ответов: 66
 Профиль | | #8 Добавлено: 19.06.08 11:21
Я у себя делал так.

'открываем файл
Workbooks.Open Filename:=Spisok_Spec_For_Full
Application.DisplayAlerts = False
On Error GoTo FileBuzy:  'Ставим обработку ошибки
ActiveWorkbook.Save Filename:=Path & Ima_spec & ".xls", FileFormat:=xlNormal
On Error GoTo 0 'Сбрасываем обработку ошибки
....
FileBuzy:
ActiveWorkbook.Close savechanges:=False


Ну и + еще в твоем случае по таймеру каждые N секунд проверять книгу.

Ответить

Номер ответа: 9
Автор ответа:
 LonerWanderer



Вопросов: 18
Ответов: 66
 Профиль | | #9 Добавлено: 19.06.08 11:23
Сорри. вместо

ActiveWorkbook.Save Filename:=Path & Ima_spec & ".xls", FileFormat:=xlNormal

надо

ActiveWorkbook.Save

(не все свое почистил)

Ответить

Номер ответа: 10
Автор ответа:
 Дмитрий



ICQ: 421607787 

Вопросов: 1
Ответов: 13
 Профиль | | #10 Добавлено: 19.06.08 11:38
Ну вобщем примерно так я и думал, но получается что после того как файл освободился, мы его закрываем, и тут же открываем снова, но в этот промежуток все равно кто-то может вклиниться и открыть файл раньше... А мне нужна 100% гарантия отсутствия возможности возникновения ошибки.
Собственно можно попробовать цикл с внесением изменений в файл, должна возникать какая-то ошибка, тогда закрывать без изменения, если нет ошибки - все нормально.
Ладно, направление понятно, буду думать :)

Ответить

Номер ответа: 11
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #11 Добавлено: 19.06.08 12:03
Именно вот у Workbooks.Open нет больше параметров


Ммм... Как нет параметров
Workbooks.Open Filename:="C:\Test.xls", UpdateLinks:=False, [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], [;Delimiter], [Editable], [Notify], [Converter], [AddToMru], [Local], [CorruptLoad]
?
Или я чего-то не поняла.

Ответить

Номер ответа: 12
Автор ответа:
 Дмитрий



ICQ: 421607787 

Вопросов: 1
Ответов: 13
 Профиль | | #12 Добавлено: 19.06.08 12:19
Во, а в справке что-то нет этого

спасибо, буду разбираться(чуть позже сейчас занят)

а вобще офис не 2007й случайно?

Ответить

Номер ответа: 13
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #13 Добавлено: 19.06.08 12:34
Когда будешь набирать Workbooks.Open после Open нажми пробел и увидишь все свойства. Только их, к сожалению, нужно вручную прописывать. Подсказки нет.

Есть 2003 и 2007.

Ответить

Номер ответа: 14
Автор ответа:
 Дмитрий



ICQ: 421607787 

Вопросов: 1
Ответов: 13
 Профиль | | #14 Добавлено: 19.06.08 16:42
Ура! Получилось!

Sub ОткрытиеЛога()
    On Error GoTo Ошибка2
Workbooks.Open "\\Zed\Лог.xls", , , , , , , , , , False
    Exit Sub
Ошибка2:
    Resume
End Sub

Правда открывается окно с запросом открыть для чтения или отмена... Придется всем пользователям объяснять, что если они в таком окне нажмут на "ОК" то когда узнают кто это сделал - расстрел на месте:) А так все корректно, отмену можно нажимать бесконечно, пока не освободится файл.
Вобщем если бы и окно с запросом не появлялось, совсем было бы чудесно. А нельзя как нибудь сразу отвечать на появляющийся запрос?

Jasmin, спасибо! С параметрами действительно пришлось играться:) нашел я в справке их описание, но на английском, со второй попытки вычислил, что нужный параметр notify

Ответить

Номер ответа: 15
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #15 Добавлено: 20.06.08 12:23
Пожалуйста!

По поводу окна с запросом. Попробуй Application.SendKeys("Кнопка";). В Help есть. Подбери нужные тебе параметры. :-)))

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам