Не открывается документ с пробелом в имени файла

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

kminas
Сообщения: 108
Зарегистрирован: 06 янв 2006, 00:06
Откуда: Ростов-на-Дону

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

Public oapp As Object
Dim dlg As Object

Set oapp = CreateObject("Word.Application")
oapp.Visible = True
Set dlg = Dialogs(wdDialogFileOpen)
oapp.ChangeFileOpenDirectory "C:\...\..."

If dlg.Show = -1 Then
Documents.Open FileName:=dlg.Name
Documents(dlg.Name).Activate
End If
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Как - то где - то прочел: "Программисты_пробелов_не_применяют". Я думаю это и есть ответ на Ваш вопрос.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

У меня вот так работает (из под Excel)

Код: Выделить всё

Public oapp As Object
Dim dlg As Object

Sub Macro1()
    Set oapp = CreateObject("Word.Application")
    oapp.Visible = True
    Set dlg = oapp.Dialogs(80) 'wdDialogFileOpen
    'oapp.ChangeFileOpenDirectory "C:\...\..."
    If dlg.Show = -1 Then
        oapp.Documents.Open Filename:=dlg.Name
        'oapp.Documents(dlg.Name).Activate
    End If
End Sub
P.S. строку oapp.Documents(dlg.Name).Activate закомментировал, т.к. когда открываете документ он сразу автоматом становится активным и поэтому делать его ещё раз активным не надо
kminas
Сообщения: 108
Зарегистрирован: 06 янв 2006, 00:06
Откуда: Ростов-на-Дону

Pavel55 писал(а):У меня вот так работает (из под Excel)

Код: Выделить всё

Public oapp As Object
Dim dlg As Object

Sub Macro1()
    Set oapp = CreateObject("Word.Application")
    oapp.Visible = True
    Set dlg = oapp.Dialogs(80) 'wdDialogFileOpen
    'oapp.ChangeFileOpenDirectory "C:\...\..."
    If dlg.Show = -1 Then
        oapp.Documents.Open Filename:=dlg.Name
        'oapp.Documents(dlg.Name).Activate
    End If
End Sub
P.S. строку oapp.Documents(dlg.Name).Activate закомментировал, т.к. когда открываете документ он сразу автоматом становится активным и поэтому делать его ещё раз активным не надо
http://www.progz.ru/forum/index.php?sho ... t&p=163003
kminas
Сообщения: 108
Зарегистрирован: 06 янв 2006, 00:06
Откуда: Ростов-на-Дону

VictorM писал(а):Как - то где - то прочел: "Программисты_пробелов_не_применяют". Я думаю это и есть ответ на Ваш вопрос.
Открою маленький секрет. Я не буду работать на этой программе. А будут работать люди в той или иной степени с ним дружащие или наоборот.
kminas
Сообщения: 108
Зарегистрирован: 06 янв 2006, 00:06
Откуда: Ростов-на-Дону

Pavel55 писал(а):У меня вот так работает (из под Excel)

Код: Выделить всё

Public oapp As Object
Dim dlg As Object

Sub Macro1()
    Set oapp = CreateObject("Word.Application")
    oapp.Visible = True
    Set dlg = oapp.Dialogs(80) 'wdDialogFileOpen
    'oapp.ChangeFileOpenDirectory "C:\...\..."
    If dlg.Show = -1 Then
        oapp.Documents.Open Filename:=dlg.Name
        'oapp.Documents(dlg.Name).Activate
    End If
End Sub
P.S. строку oapp.Documents(dlg.Name).Activate закомментировал, т.к. когда открываете документ он сразу автоматом становится активным и поэтому делать его ещё раз активным не надо
Вы знаете, как ни странно, помогло. Еще бы Вы подсказали, как мне избежать открытия второй копии Word. Если я с помощью этого кода открываю файл при уже открытых документах, появляется еще одно копия программы, но без документа. Если токрытый файл первый - все нормально.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте kminas.
Вы же создаете объект и одновременно хотите избежать "открытия второй копии" :)
GetObject(,"Word.Application") избавит от создиния копии, но если объекта нет сгенерируется ошибка, "поймав" которую, создавайте новый - CreateObject.

Евгений.
kminas
Сообщения: 108
Зарегистрирован: 06 янв 2006, 00:06
Откуда: Ростов-на-Дону

Teslenko_EA писал(а):Здравствуйте kminas.
Вы же создаете объект и одновременно хотите избежать "открытия второй копии" :)
GetObject(,"Word.Application") избавит от создиния копии, но если объекта нет сгенерируется ошибка, "поймав" которую, создавайте новый - CreateObject.

Евгений.
Спасибо Евгений. Но у меня ничего не получается с GetObject(,"Word.Application"). Не подскажите, как с его помощью открыть файл по выбору пользователя?
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

VictorM, когдато имена файлов не могли содержать символы за пределами 437 кодовой страницы, и длиной не более восьми символов (это было время DOS).
Кажется только законы физики на Земле не меняются.

Евгений.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

kminas, пример который выслал Pavel55, уже опробован?
Ответить