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

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

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

Сообщение kminas » 30.03.2008 (Вс) 22:29

При открытии документа, содержащего в имени пробел, программа (во время активации) выдает ошибку 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
Константин

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.03.2008 (Вс) 23:39

Ну видимо надо указывать имя без пробелов?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ALev
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.08.2007 (Пт) 8:05

Сообщение ALev » 31.03.2008 (Пн) 7:38

Попробуй oapp.ChangeFileOpenDirectory """C:\...\..."""

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 31.03.2008 (Пн) 12:09

Попробуй

Documents.Open FileName:=chr(34) & dlg.Name & chr(34)

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 31.03.2008 (Пн) 20:54

Хакер писал(а):Ну видимо надо указывать имя без пробелов?

Согласен. А так же не нажимать, когда не надо Esc, не вводить текст вместо цифр и т.д.
Константин

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.03.2008 (Пн) 20:55

kminas
Ты не понял, видимо.

Это был призыва использовать short-формы записи путей. Т.е. конвертировать в неё путь, перед передачей.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 31.03.2008 (Пн) 21:49

Хакер писал(а):kminas
Ты не понял, видимо.

Это был призыва использовать short-формы записи путей. Т.е. конвертировать в неё путь, перед передачей.

Я еще с этим не встречался. Кстати, убрал эту строку
Код: Выделить всё
Documents(dlg.Name).Activate
и все прошло.
Если нетрудно, подскажи где почитать о
short-формы записи путей
Константин

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.03.2008 (Пн) 21:51

kminas
Мораль - если ты не встречался с чем-то, нефиг выпендриваться.

Прочитать об этом можно в любой книжке DOS->Windows переходных времён.

Создана для совместимости длинных windows-путей с форматом 8.3.

Папка Documents And Setting например приобретает имя Docume~1
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 31.03.2008 (Пн) 22:03

Спасибо, исправлюсь, а, если ты такой продвинутый, подскажи
почему, если я с помощью этого кода открываю документ все нормально. А, если уже есть открытые документы, появляется еще одна копия программы, но пустая, без документа.
Константин

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.03.2008 (Пн) 22:05

Потому что ты два раза таким кодом создаёшь объект класса Word.Application.

А надо единожды, а потом у него вызывать все методы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 31.03.2008 (Пн) 22:17

Да я в принципе это понимаю, но пробовал по-разному и пока не догоняю.
Константин

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 31.03.2008 (Пн) 22:44

При загрузке программы создаешь Word.Application, а потом его юзаешь.
Код: Выделить всё

Public WApp As Object
Private Sub Form_Load()
    Set WApp = CreateObject("Word.Application")
End Sub
Sub MySub()
    WApp.Visible = True
    ...
End Sub
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.03.2008 (Пн) 22:51

burik
Интересно, зачем у тебя WApp.Visible = True будет каждый раз делаться, а?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 31.03.2008 (Пн) 22:53

burik
Спасибо, идея понятна, Буду пробовать к моему случаю.
Константин

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 02.04.2008 (Ср) 23:31

Спасибо всем. Решил немного по другому. Если хотите посмотрите здесь http://www.sql.ru/forum/actualthread.aspx?tid=541808
Константин

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 03.04.2008 (Чт) 23:18

Извините. Этот вариант, как выяснился имел один недостаток. Копия все-ткаи образовывалась. Мне подсказали на другом форуме
Здесь http://forum.developing.ru/showthread.p ... #post53572
Код: Выделить всё
Public oapp As Object
Dim dlg As Object

Sub Макрос1()
    On Error Resume Next
    Set oapp = GetObject(, "Word.Application")
    If Err.Number <> 0 Then
        Err.Clear
        On Error GoTo 0
        Set oapp = CreateObject("Word.Application")
    End If
    oapp.Visible = True
    Set dlg = oapp.Dialogs(80) 'wdDialogFileOpen
    If dlg.Show = -1 Then
        oapp.Documents.Open Filename:=dlg.Name
    End If
End Sub
Константин

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 04.04.2008 (Пт) 1:55

kminas
Блин, я поражаюсь.

Код: Выделить всё
Dim pWord As Object

Sub Макрос1()
    Dim pDialog As Object
    If pWord Is Nothing Then Set pWord = CreateObject("Word.Application")
    pWord.Visible = True
    Set pDialog = pDialog.Dialogs(wdDialogFileOpen).Show
    If pDialog.Show = -1 Then pWord.Documents.Open Filename:=pDialog.Name
End Sub
Последний раз редактировалось Хакер 04.04.2008 (Пт) 18:57, всего редактировалось 1 раз.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 04.04.2008 (Пт) 15:51

Хакер
Спасибо, сегодня попробую!
Константин

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 04.04.2008 (Пт) 18:36

Хакер Проверил.
При запуске твоего кода. Ругается на
Код: Выделить всё
.Show.
Пишет: несовпадение типов. Если его убрать - работает, но прога лезет в ранее открытый файл
Константин

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 04.04.2008 (Пт) 18:58

Ну, логику то надо включать хоть иногда. Разве не видно что там пробелы лишние навставлялись?


Код исправлен.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 04.04.2008 (Пт) 20:30

Извини, но я запускал без пробелов.
Константин

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 04.04.2008 (Пт) 21:06

Хакер Запустил еще раз в новом варианте. Пишет нет объекта. Ошибка 91. Заменил
Код: Выделить всё
pDialog.Dialogs(wdDialogFileOpen).Show
на
Код: Выделить всё
pWord.Dialogs(wdDialogFileOpen)
и все заработало, за исключением одной мелочи с которой впрочем я и начинал эти долгие мучения - программа лезет в файл открытый первым, а в том коде, пока сбоев не обнаружил. Конечно, мне не нравится работать с On Error GoTo, но я еще мало что знаю и принимаю все, что проходит, а с открытием файлов пока у самого ничего не выходит :?
Константин


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32

    TopList  
cron