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

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

Если ты кликнешь на сам документ (в режиме F8) непосредственно до исполнения строки SaveAs (чтобы убрать курсор из окна Find and Replace), то должно пройти без ошибки. Постарайся это телодвижение записать в коде и тогда в принципе ты ошибку должен обойти.
...
Рейтинг: 0 / 0
ошибка 4605
    #37832130
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ошибка 4605
    #37832873
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофа,

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

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

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

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

Код: 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
ошибка 4605
    #37832931
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофа...

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

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

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

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


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

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

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

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


это почему?

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


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

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

Код: vbnet
1.
Dim ObjectWord As Object




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

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

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




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

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

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

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



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

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

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

Set ObjectWord = Nothing
Set ObjectOpenWord = Nothing

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

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

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

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

Set ObjectWord = Nothing
Set ObjectOpenWord = Nothing

это почему?

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

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

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

Set ObjectWord = Nothing
Set ObjectOpenWord = Nothing

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


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

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

Станешь.

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

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

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

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

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


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