Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Как открыть фаил?


Автор: ruslan_rx 14.12.2006, 08:37
Всем Привет!!

    Понимаю что эта тема рассмотренна уже со всех сторон, но везде говорится про фаил который имеет контретный путь!! 
У меня следующая проблема как открыть фаил который находится в тойже папки что и ЕХЕ программа (или в подпапке), без указания конкретного диска и без указания сколько папок было до этого ???

 smile 

Автор: boevik 14.12.2006, 08:49
App.Path - возвращает папку в которой находится exe.

Код

OpenFile (App.Path &"\myfile.dat")

Автор: ruslan_rx 14.12.2006, 09:00
boevik,  Спасибо! 

Автор: ruslan_rx 14.12.2006, 10:10
При написании OpenFile (App.Path &"\РК-1.xls") пишет ошибк: Sub or Function not defined!

Пишу тогда по другому Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE App.path РК-1.xls" ссылка выполняется но так же всплывают ошипки:

Цитата
Не удалость найти 'App.path'.Проверте задание имени и местоположения файла. 


и

Цитата
Не удалость найти '&.xls'.Проверте задание имени и местоположения файла. 


В чем дело???  smile 

Автор: Voldemar2004 14.12.2006, 10:22
ruslan_rx
Цитата(ruslan_rx @  14.12.2006,  11:10 Найти цитируемый пост)
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE App.path РК-1.xls"
А ты так попробуй:
Код
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" & App.path & "\РК-1.xls"


Добавлено @ 10:24 
А лучше так:
Код
Option Explicit

Private Sub Command1_Click()

CommonDialog1.ShowOpen

Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE " & CommonDialog1.FileName

End Sub

Автор: ruslan_rx 14.12.2006, 10:52
Цитата
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" & App.path & "\РК-1.xls" 

Вообще не открывает, ОШИБКА!

а при 
Цитата

Option Explicit
Private Sub Command1_Click()
CommonDialog1.ShowOpen
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE " & CommonDialog1.FileName
End Sub

Ругается на CommonDialog1

 smile

Добавлено @ 11:03 
Все я ее все таки добил!!!

Цитата
Private Sub РК1_Click()

Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE " + App.Path & "\РК-1.xls"

End Sub

Автор: Voldemar2004 14.12.2006, 11:07
В Project->Components->Controls - поставь галочку напротив Microsoft Common Dialog Control и нажми Ok.

Автор: antiQuark 30.12.2006, 21:21
извините за офтоп , но у меня Visual Studio 2005 и я не могу найти Microsoft Common Dialog Control - очень нужно, и кстати как сделать exe'шник в VS 2005, в отличии от Бэйсик  6.0 там нет Маке .exe , или я не нашел! smile Помогите плз!

Автор: ruslan_rx 10.1.2007, 15:18
У меня еще вопрос! если в пути к файлу имеются пробелы то фаил не запускается!!! т.е. он разбивает путь как на два пути  smile !!!! Как сделать что бы фаил запустился т.к. в пути есть пробелы??

 smile 

Автор: boevik 10.1.2007, 15:33
взять имя файла в кавычки

Автор: ruslan_rx 10.1.2007, 15:57
Неа, этот вариант не годится, у меня путь не конкретный!!!

Цитата
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE " + App.Path & "\T_File\name.xls"


так вот в пути до файла есть пробелы, допустим "Program Files" но не обезательно!

и по данной команде (приведенной выше) он не находит файл!


Автор: Akina 10.1.2007, 19:08
Код

Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE """ + App.Path & "\T_File\name.xls"""

Автор: Тутанхамец 10.1.2007, 20:04
Есть еще один момент насчет App.Path. На нем редко когда, но все-таки можно лохануться. 
Обычно путь App.Path НЕ оканчивается на "\". Но если прога лежит прямо в корневухе (C:\), то путь оканчивается на слэш. 

Поэтому я в начале проги делаю так:

Код

progpath=app.path 'progpath - глобальная переменная
if right$(progpath,1)<>"\" then progpath=progpath+"\"

 

Автор: Akina 10.1.2007, 22:57
а вообще почему бы не плясать от текущего каталога?

Код

chdir app.path
shell "EXCEL .\T_File\name.xls"

Автор: ruslan_rx 11.1.2007, 06:53
Akina,  Спасибо!!
 вариант с
Цитата
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE """ + App.Path & "\T_File\name.xls"""

Работает!!!

А вот последний нехочет!!!

Автор: Тутанхамец 11.1.2007, 18:35
А текущий каталог может быть не тем, из которого запустилась прога?

Автор: ruslan_rx 16.1.2007, 07:50
Возник новый вопрос!
при прописании адреса на объект

Цитата
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE """ + App.Path & "\T_File\name.xls"""


у меня все нормально открывается!!! у меня стоит Офис 2003!!!!
после того когда я попробывал запустить на другой машине с Офисом 2000, то объект не запустился, и написал Фаил не найден!

может можно как то обойтись без конкретной привязки место нахождения Excel'я??

 smile 

Автор: Akina 16.1.2007, 08:39
Цитата(ruslan_rx @  16.1.2007,  08:50 Найти цитируемый пост)
может можно как то обойтись без конкретной привязки место нахождения Excel'я??

Конечно... вместо
C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE 
использовать
start EXCEL.EXE 

Автор: ruslan_rx 16.1.2007, 09:43
Цитата
start EXCEL.EXE 
 не идет! 

Ошибка 53! Фаил не найден!

Автор: bom 16.1.2007, 15:37
API "ShellExecute" заюзать - религия не позволяет?

Код

Call ShellExecute(0, "open", "T_File\name.xls", vbNullString, vbNullString, 0)


Для VB 2005:
Код

System.Diagnostics.Process.Start("T_File\name.xls")

Автор: ruslan_rx 17.1.2007, 07:44
bom,  если ввести так как ты написал, 

Цитата
Call ShellExecute(0, "open", "T_File\name.xls", vbNullString, vbNullString, 0)


то пишет что Sab или Funtion не определена!!!
может подскажешь!!! что еще надо написать??? я в VB пока новичек, и еще почти ничего не знаю!

Автор: mihanik 17.1.2007, 11:24
Терзают меня смутные сомнения...


Уважаемый ruslan_rx!!!

Ты пишешь программу на VB или на VBA?

Если это макрос Excel, то из самого макроса можно узнать место размещения файла EXCEL.EXE через Application.Path...

Если же ты из программы на VB6 хочешь это узнать, то кто мешает создать экземпляр Excel и у него спросить тот же самый Path?


Или я опять что-то не так понял...

Автор: ruslan_rx 17.1.2007, 11:42
mihanik, пишу на VB, в окне Form1 есть кнопка корорая ссылается на на фаил Excel'я!! И для того что бы открыть этот фаил я испльзовал команду:

Код
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE """ + App.Path & "\T_File\name.xls"""


и у меня все работало!!! Но когда я запустил этот фаил на другой машине (где стоит MS Office 2000) то он не запустился, а на других машинах с MS Office 2003 все прекрасно работает!!!

так как мне исправить что все запускалось не зависимо какой стоит ОФИС на машине?

Автор: Naghual 17.1.2007, 12:09
Код

Option Explicit

Private Const SW_SHOWNORMAL = 1
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Command1_Click()
    ShellExecute Me.hwnd, vbNullString, "C:\Temp\Взаиморасчеты.xls", vbNullString, "C:\Temp", SW_SHOWNORMAL
End Sub

Автор: ruslan_rx 17.1.2007, 12:46
все отличие между 2000 и 2003 в пути !!!
если стоит 2000 то...
Код
Shell "C:\Program Files\Microsoft Office\OFFICE\EXCEL.EXE """ + App.Path & "\T_File\name.xls"""


а для 2003...
Код
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE """ + App.Path & "\T_File\name.xls"""



может тогда сначала определить версию офиса, или что выручайте!!!!

Автор: Naghual 17.1.2007, 12:47
См. выше.

Автор: ruslan_rx 17.1.2007, 12:51
Naghual, Куда именно?? говори конкретно!!

Автор: mihanik 17.1.2007, 13:01
ruslan_rx, извини тупого....

Я так понимаю, что необходимо сделать так, чтобы открылся ехель с каким-то открытым документом?

Автор: ruslan_rx 17.1.2007, 13:17
mihanik,  нет! 

на ФОРМЕ есть кнопка....

Код

Private Sub E_Click()
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE """ + App.Path & "\E_File\Electric_file.xls"""
End Sub



и при ее нажатии соответственно нужно что бы фаил открылся, в данном случае команда рабочая! но только если установлен ОФИС 2003. при другом скажем при 2000 путь к ЕКСЕЛЮ меняется! и фаил не открывается вообще!

Автор: mihanik 17.1.2007, 13:36
Код

Option Explicit

Private Sub Command1_Click()
Dim AppExcel As Excel.Application
Dim wBook As Workbook
Dim FileName As String

    ' Задаю имя файла с книгой Excel, где лежит рисунок
    FileName = "C:\Documents and Settings\Mihanik\Desktop\Книга1.xls"
    
    ' Запускаю Excel, открываю файл
    Screen.MousePointer = vbHourglass
    Set AppExcel = CreateObject("Excel.Application")
    Set wBook = AppExcel.Workbooks.Open(FileName)
    Screen.MousePointer = vbDefault

    AppExcel.Visible = True
    
    ' Место расположения Excel узнаём AppExcel.Path
    ' Например так MyPath = AppExcel.Path
    
    ' Закрываю книгу, выгружаю Excel
    ' wBook.Close
    Set wBook = Nothing
    Set AppExcel = Nothing
End Sub


Добавлено @ 13:39 
Я никак не могу понять, где лежит файл, который надо открыть?
Общие правила (не путь, а общий принцип) его расположения известны?

Добавлено @ 13:49 
Мой фрагмент будет работать, если в референсах  проекта подключить Microsoft Excel N Object Library

Автор: ruslan_rx 17.1.2007, 13:56
mihanik, есть ЕХЕ програмка, которая по сути и состоит из одних кнопок к которым прикреплены ЭКСЕЛЕВСКИЕ файлы. файлы которые необходимо запустить лежат в подкаталогах где находится ЕХЕ фаил. 

что то типа такого С:/[...]/[В этой папке програмка]/[...]/[а вот сдесь уже фаилы которые надо запустить].xls

но суть то не в этом!

Автор: mihanik 17.1.2007, 14:09
Итак....

Подвожу итог.
У тебя есть программа, которая находится в некоем каталоге (папке).
В том же каталоге (папке) есть какая-то папка с именем MyFolder.
Нужно чтобы при нажатии на кнопку в программе происходило следующее:
1. Запускался ехель
2. При запуске ехель открывал бы какой-то файл из папки с именем MyFolder.

Так?

Относительный путь к файлу .xls известен?
Имя файла известно?

Если всё так, как я предполагаю, то всё решается очень просто!!!

Автор: ruslan_rx 17.1.2007, 14:21
mihanik,  ТОЧНО, а как это сделать? я делал так (MS Excel 2003).... (уже достал наверное всех smile )

Код

Private Sub E_Click()
Shell "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE """ + App.Path & "\E_File\Electric_file.xls"""
End Sub

но этот способ не уневерсален, сделешь на 2003, тогда с 2000 не онкроешь (MS Excel 2000 находится в C:\Program Files\Microsoft Office\OFFICE\EXCEL.EXE)


Автор: mihanik 17.1.2007, 14:28
Вот тебе мой проект с исходником, скомпилированным проектом и вложенной папкой с документом...

Автор: ruslan_rx 17.1.2007, 14:39
mihanik, ПРОБЛЕМА!!!

почему с твоего запускается проекта, а когда я делаю в своем проекте ругается!

Цитата

Ошибка компиляции:
Неописан определяемый пользователем тип.


и выделяет AppExcel As Excel.Application

Автор: mihanik 17.1.2007, 14:45
Я же говорил, что в референсах надо всё подключить!!!!


Project / References / Microsoft Excel N Object Library

Добавлено @ 14:51 
Не забудь проверить, будет ли это всё работать в других офисах...

Автор: ruslan_rx 17.1.2007, 14:54
УРААА ВСЕ ЗАРАБОТАЛО!!!!!!



mihanik,  спасибо!!!!

 smile 

Автор: mihanik 17.1.2007, 15:09
Рад!!! smile 

Автор: ruslan_rx 17.1.2007, 15:14
mihanik, а еще сможешь помочь?

У меня на компьтере все идет просто на ура!
А вот на компе где стоит 2000 офис при нажатии на кнопку, получается критическая ошибка, и прога закрывается!!!!

Автор: mihanik 17.1.2007, 15:24
Надо подумать...

Автор: ruslan_rx 18.1.2007, 07:42
mihanik,  я тут все рыскал.... думал что еще придумать.... и вот кое что заметил, может в этом все дело! То что ты мне написал подключить...
Цитата
Project / References / Microsoft Excel N Object Library

но у меня была не совсем такая строчка, а вот такая 
Цитата
Project / References / Microsoft Excel 11 Object Library
, може все таки в этом дело? ведь 2003ий он и идет как 11ый !!!!

Автор: ruslan_rx 18.1.2007, 08:07
Все проблема решена, все работает и на 2003 и на 2000 офисе, я просто повзаимствовал библиотеку из 2000 офиса.

и вместо строки...
Цитата
Project / References / Microsoft Excel 11 Object Library
 теперь ...
Цитата
Project / References / Microsoft Excel 5.0 Object Library
Проверил работает!!

УРААА!!!

Автор: mihanik 18.1.2007, 08:20
ruslan_rx, молодец!!!

А то я уже копать хотел сегодня в сторону реестра.

Дело в том, что в реестре прописано ГДЕ стоит Word и Excel

Цитата

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\НОМЕР_ОФИСА\Excel\InstallRoot]
"Path"="C:\\Program Files\\Microsoft Office\\OFFICE11\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\НОМЕР_ОФИСА\Word\InstallRoot]
"Path"="C:\\Program Files\\Microsoft Office\\OFFICE11\\"


У меня, например значения такие

Цитата

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Excel\InstallRoot]
"Path"="C:\\Program Files\\Microsoft Office\\OFFICE11\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Word\InstallRoot]
"Path"="C:\\Program Files\\Microsoft Office\\OFFICE11\\"


Перебираешь пару ключей реестра и находишь место установки excel...  smile 

Молодец, что сам нашёл решение...

Автор: mihanik 22.1.2007, 10:40
Ещё вот так можно...

Код

Option Explicit

Private Sub Command1_Click()
    Dim ws As Object
    Dim s As String
    Dim MyPath As String
    Dim MyDocName As String
    Dim MyApp As Variant
    
    ' Создаём объект для работы с  оболочкой...
    Set ws = CreateObject("WScript.Shell")
    
    ' Создаём строку для запуска...
    MyPath = App.Path + "\Proba\"
    MyDocName = "Лист Microsoft Excel.xls"
    s = "excel.exe " & """" & MyPath & MyDocName & """"

    ' запускаем Ехель
    MyApp = ws.run(s, 1, False)
    
    ' уничтожаем экземпляр объекта...
    Set ws = Nothing
End Sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)