Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ошибка 4605 / 25 сообщений из 30, страница 1 из 2
08.06.2012, 21:00
    #37831863
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
здравствуйте, отчего происходит ошибка 4605
Метод или свойство SaveAs недоступны, потому что диалоговое окно "Найти" или "Заменить" открыто
происходит на строке
Код: vbnet
1.
 ObjectOpenWord.SaveAs (ObjectOpenWordPath & "\" & "w109.doc")

в свете того, что Окно Найти и Заменить не модальное
Спасибо
...
Рейтинг: 0 / 0
08.06.2012, 21:40
    #37831910
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофаотчегопо моему причина изложена достаточно ясно
...
Рейтинг: 0 / 0
08.06.2012, 21:43
    #37831916
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
Shocker.Pro, соль то здесь
>в свете того, что Окно Найти и Заменить не модальное
если следующей строкой будет
MsgBox Err.Number
что мессага покажет?
...
Рейтинг: 0 / 0
08.06.2012, 22:06
    #37831939
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа,

Если ты кликнешь на сам документ (в режиме F8) непосредственно до исполнения строки SaveAs (чтобы убрать курсор из окна Find and Replace), то должно пройти без ошибки. Постарайся это телодвижение записать в коде и тогда в принципе ты ошибку должен обойти.
...
Рейтинг: 0 / 0
09.06.2012, 05:00
    #37832130
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
VladConn, разобрался смысл такой, то что я делаю по нажатию Эф8 не повторится никогда потому, что запуская код фокус с этого окна Найти и заменить уйдёт
2
сейчас хотел создать тему, мне отлуп-"Тема содержит недопустимые символы", главное не название, а вся тема, и как их вычленить эти символы?
Вот тогда ложу здесь
здравствуйте, скажу сразу, что очень много много раз надо запустить код чтобы получить ошибку
Run-time error 70
Permission denied

Вот сам код на ВБ6, запускаю этот код в открытом документе Ворда, смысл этого кода переименовать открытый документ Ворда:

Код: 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.
Sub Main()

    'переименовать открытый файл Ворда
    Dim ObjectWord As Object
    Set ObjectWord = GetObject(, "Word.Application")
    
    Dim ObjectOpenWord As Object
    Set ObjectOpenWord = ObjectWord.ActiveDocument
              
    Dim ObjectOpenWordPath As String
    ObjectOpenWordPath = ObjectOpenWord.Path
    
    Dim ObjectOpenWordName As String
    ObjectOpenWordName = ObjectOpenWord.Name
    
    Dim ObjectOpenWordFullName As String
    ObjectOpenWordFullName = ObjectOpenWord.FullName
         
    'оператор для отлова ошибок, указывает, что при возникновении ошибки нужно переходить к следующей строке кода
    'On Error Resume Next
     
    'ошибка 4605
    '"Метод или свойство SaveAs недоступны, потому что диалоговое окно "Найти" или "Заменить" открыто"
    ObjectOpenWord.SaveAs (ObjectOpenWordPath & "\" & Replace$(Now, ":", "") & ".doc")
    'MsgBox$ Err.Number
    'удалить файл ...
    Kill (ObjectOpenWordPath & "\" & ObjectOpenWordName)
    
    'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
    Set ObjectWord = Nothing
    Set ObjectOpenWord = Nothing
 
End Sub



Но как от этой ошибки избавиться раз и на всегда??
...
Рейтинг: 0 / 0
09.06.2012, 15:44
    #37832873
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа,

Не совсем понял, какой смысл уйдет. Попробуй ThisDocument.Activate (пишу по памяти) перед SaveAs. Может поможет. F8 тебе было для иллюстрации твоей проблемы. SaveAs видимо работает с активным окном документа. Вот когда ты это делаешь руками при висящем окне Find and Replace, то непроизвольно делаешь окно самого документа активным, при этом убирая курсор из окна Find and Replace. Ну так и воспроизведи нечто похожее в коде.
...
Рейтинг: 0 / 0
09.06.2012, 15:46
    #37832876
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа,

Эти строки не нужны:

Код: vbnet
1.
2.
    Set ObjectWord = Nothing
    Set ObjectOpenWord = Nothing
...
Рейтинг: 0 / 0
09.06.2012, 15:55
    #37832887
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа,

Заведи правило во все процедуры вставлять стандартную поддержку ошибок. Вот тебе простейший пример:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub MySub()

    
    On Error GoTo MethodExhit

    
    Const METHOD_NAME As String = "MySub"

        
    'Code lines...

        
MethodExhit:

    If Err.Number <> 0 Then
        MsgBox "Error " & Err.Number & " in " & METHOD_NAME & vbCrLf & Err.Description
    End If

End Sub
...
Рейтинг: 0 / 0
09.06.2012, 16:22
    #37832931
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа...

Вот сам код на ВБ6, запускаю этот код в открытом документе Ворда, смысл этого кода переименовать открытый документ Ворда :
...

Активный документ Ворда (по-крайней мере в експлорере) переименовать нельзя. Забудь об этом чудачестве. Можно создать копию документа с новым именем.
...
Рейтинг: 0 / 0
09.06.2012, 16:29
    #37832953
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа,

катастрофа..Вот тогда ложу здесь.

И никогда не говори и не пиши "ложу". Это оправдывается только отсутствием начального образования.
...
Рейтинг: 0 / 0
09.06.2012, 16:42
    #37832981
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
VladConnкатастрофа,
Заведи правило во все процедуры вставлять стандартную поддержку ошибок. Вот тебе простейший пример:
[/src]
мне не надо знать её номер и как называется, мне надо чтобы её не было
ошибка видимо на этой строке
Код: vbnet
1.
Kill (ObjectOpenWordPath & "\" & ObjectOpenWordName)


а для этого как я понимаю есть не отвеченная тема
программно закрыть дескриптор открытого файла Ворд
делать задержки ОК, но нужна жесть сколько точно ждать - отмашка когда можно Киллить файл

VladConnкатастрофа,

Эти строки не нужны:

Код: vbnet
1.
2.
    Set ObjectWord = Nothing
    Set ObjectOpenWord = Nothing


это почему?

VladConnАктивный документ Ворда (по-крайней мере в експлорере) переименовать нельзя.


Честно сказать не совсем понимаю термин в експлоере, в чём он ещё бывает?

VladConnМожно создать копию документа с новым именем.
Задача века, не можем обуздать 70 ошибку
Permission denied Доступ запрещен
не можем высчитать и в кусты?
назовите это по другому если к словосочатиям придираетесь, но смысл не меняйте
...
Рейтинг: 0 / 0
09.06.2012, 16:51
    #37833002
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа,

Код: vbnet
1.
Dim ObjectWord As Object




И когда ты используешь Object вместо строгого декларирования, ты теряешь возможность использования IntelliSense.

И вот эта строка работать, вообще говоря, не будет (6/9/2012):

Код: vbnet
1.
ObjectOpenWordPath & "\" & Replace$(Now, ":", "") & ".doc"




Permission denied у тебя скорее всего из-за того, что код слишком быстро повторялся, и система не успевала, в принципе можно поставить DoEvents
...
Рейтинг: 0 / 0
09.06.2012, 16:57
    #37833011
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
[quot катастрофа]

VladConnкатастрофа,

Эти строки не нужны:

Код: vbnet
1.
2.
    Set ObjectWord = Nothing
    Set ObjectOpenWord = Nothing



катастрофаэто почему?

А ты попробуй описать ситуацию, когда это нужно в твоем коде. Как это можeт быть, что они станут не Nothing?
...
Рейтинг: 0 / 0
09.06.2012, 16:58
    #37833016
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
VladConn,
>6/9/2012
не надо бояться, если у Вас так дата
Now, ":", ""
меняем на Now, "/", ""
вопрос то не в том был
>И когда ты используешь Object вместо строгого декларирования, ты теряешь возможность использования IntelliSense.
не похоже я кодером не стану никогда - а как строго декларировать? и что такое IntelliSense?
>Permission denied у тебя скорее всего из-за того, что код слишком быстро повторялся, и система не успевала, в принципе можно поставить DoEvents
как??

не ответили
Эти строки не нужны:

Set ObjectWord = Nothing
Set ObjectOpenWord = Nothing

это почему?
...
Рейтинг: 0 / 0
09.06.2012, 17:00
    #37833017
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа..мне не надо знать её номер и как называется, мне надо чтобы её не было

Не важно, что тебе надо или не надо, важно то, как надо оформлять процедуры, чтобы они не были любительскими.

:0)
...
Рейтинг: 0 / 0
09.06.2012, 17:03
    #37833027
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофаVladConn,
>6/9/2012
не надо бояться, если у Вас так дата
Now, ":", ""
меняем на Now, "/", ""
вопрос то не в том был
>И когда ты используешь Object вместо строгого декларирования, ты теряешь возможность использования IntelliSense.
не похоже я кодером не стану никогда - а как строго декларировать? и что такое IntelliSense?
>Permission denied у тебя скорее всего из-за того, что код слишком быстро повторялся, и система не успевала, в принципе можно поставить DoEvents
как??

не ответили
Эти строки не нужны:

Set ObjectWord = Nothing
Set ObjectOpenWord = Nothing

это почему?

Да, бояться не надо, надо сразу писать надежный код, смысл был в этом.

Потому что они и так будут Nothing. VB6 это сделает для тебя. Почитай про области декларирования и время жизни объектных переменных.
...
Рейтинг: 0 / 0
09.06.2012, 17:04
    #37833029
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
а остальное?
катастрофа>И когда ты используешь Object вместо строгого декларирования, ты теряешь возможность использования IntelliSense.
не похоже я кодером не стану никогда - а как строго декларировать? и что такое IntelliSense?
>Permission denied у тебя скорее всего из-за того, что код слишком быстро повторялся, и система не успевала, в принципе можно поставить DoEvents
как??

не ответили
Эти строки не нужны:

Set ObjectWord = Nothing
Set ObjectOpenWord = Nothing

это почему?
...
Рейтинг: 0 / 0
09.06.2012, 17:05
    #37833030
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
ну и одно осталось
>Permission denied у тебя скорее всего из-за того, что код слишком быстро повторялся, и система не успевала, в принципе можно поставить DoEvents
как??
...
Рейтинг: 0 / 0
09.06.2012, 17:09
    #37833041
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофачто такое IntelliSense?
>Permission denied у тебя скорее всего из-за того, что код слишком быстро повторялся, и система не успевала, в принципе можно поставить DoEvents
как??


Попробуй поставить DoEvents перед Kill.

IntelliSense
...
Рейтинг: 0 / 0
09.06.2012, 17:22
    #37833069
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа...не похоже я кодером не стану никогда ...

Станешь.

:0)
...
Рейтинг: 0 / 0
09.06.2012, 17:30
    #37833082
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
VladConn, ОК - пока ошибки нет, но как я говорил раньше надо потрудится чтобы она была
если что напишу, я правильно понял, что
'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
в конце процедуры нафиг не нужно?
а когда нужно?
...
Рейтинг: 0 / 0
09.06.2012, 17:36
    #37833089
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа,

Ну например, если бы эти объекты были задекларированы на уровне модуля, а не внутри процедуры и если бы они были уже тебе не нужны, то тогда имело бы смысл. В твоем примере они умрут и так, причем обязательно.
...
Рейтинг: 0 / 0
09.06.2012, 17:49
    #37833109
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
катастрофа,

Влад и прав и нет.
В общем-то при выходе из процедуры в данном конкретном случае переменные очистятся.

Но обнулять объекты принудительно - правило хорошего тона. Это повышает читабельность и наглядность программы для других, да и для себя тоже. Когда у тебя сложная большая программа сбольшим уровнем вложенности процедур, много переменных, объявленных на разных уровнях и т.п., так проще понимать код. Кроме того, в других языках сборщики мусора ведут себя иначе и лучше дать им прямое указание.

В общем, отступы в коде ведь тоже необязательны внутри циклов и IF-ов. Но никто не говорит "убери их, они не нужны"
...
Рейтинг: 0 / 0
09.06.2012, 17:59
    #37833120
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
Shocker.Pro, короче кто как хочет так и делает и спору тут может быть много, Option Explicit надо усовершенствовать, чтобы за всем следил
я могу и сам проверить, но когда в процедуре сказано сначала
On Error GoTo MethodExhit
а позже из процедуры код уходит в функцию, это правило распостранится?, думаю что да
...
Рейтинг: 0 / 0
09.06.2012, 18:00
    #37833121
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 4605
нет
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ошибка 4605 / 25 сообщений из 30, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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