Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: HELP ME! Как открыть нужные файлы через VBA?  (Прочитано 33354 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Stork
Гость
« : 13-06-2006 10:53 » 

Помогите с кодом для макроса!
Нужен макрос на VBA, позволющий открывать по пути, необходимые файлы. А именно: 1)создавать временную папку Temp 2)копировать в эту папку нужные файлы, считывая построчно их путь из обычного текстового файла (*.txt), например:
D:\Documents\_MyDocum\_Net\адреса.doc
D:\Text\_Library\2001_01_062.pdf
D:\Text\_Library\2001_01_063.pdf и т. п.
3)Переименовать эти файлы при копировании (1.doc; 1.pdf; 2.pdf). Перемещение файлов необходимо для того, чтобы уменьшить путь к файлу, т. к. Windows не может открыть путь состоящий более чем из 256 символов!
4)Открывать ВСЕ эти файлы(даже с одинаковым расширением) для просмотра нужным приложением. Приложение должно выбираться по возможности автоматически.
5)Удалять все эти файлы из папки Temp после закрытия приложения.
Причем прога догжна все это делать автоматически, без всплывающих окон типа "Удалить этот файл?"
Заранее СПАСИБО!
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #1 : 14-06-2006 06:10 » 

Цитата
1)создавать временную папку Temp
Код:
MkDir path

Цитата
2)копировать в эту папку нужные файлы, считывая построчно их путь из обычного текстового файла (*.txt)
в цикле
Код:
Line Input

Цитата
3)Переименовать эти файлы при копировании
Код:
object.Copy destination[, overwrite]

Цитата
Открывать ВСЕ эти файлы
вероятно что-то типа SHELL

Цитата
5)Удалять все эти файлы из папки Temp после закрытия приложения.
Код:
RmDir path (для удаления директории) или Kill (для удаления тьолько файлов)
Записан

I Have Nine Lives You Have One Only
THINK!
Stork
Гость
« Ответ #2 : 19-06-2006 11:54 » 

Большое спасибо!
Еще один небольшой вопросик: Как можно по другому записать путь к папке Temp ("C:\WINDOWS\Temp\"). Должно быть что-то типа "%sytmp%\", т. е. вместо sytmp должно быть что-то другое. (Мне нужно, что-бы прога сама находила эту папку, и не зависела от пути, куда установлен Windows.)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 19-06-2006 12:30 » 

echo %TEMP%
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #4 : 20-06-2006 10:22 » 

Большое спасибо!
Еще один небольшой вопросик: Как можно по другому записать путь к папке Temp ("C:\WINDOWS\Temp\"). Должно быть что-то типа "%sytmp%\", т. е. вместо sytmp должно быть что-то другое. (Мне нужно, что-бы прога сама находила эту папку, и не зависела от пути, куда установлен Windows.)

Код:
tmpdir=Environ("TEMP")
Записан

I Have Nine Lives You Have One Only
THINK!
Stork
Гость
« Ответ #5 : 20-06-2006 13:56 » 

Функция работает, только не в тот Temp находит... Вместо "C:\WINXP\Temp\.." находит
"C:\Documents and Settings\Александр\Local Settings\Temp\.." Интересно, а из этого темпа Windows удаляет файлы?
И еще, написал прогу на VBA, а кроме как через макрос ничем открыть нельзя. Можно ли эту программу как-нибудь скомпилировать, чтобу был просто *.exe файл?
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 21-06-2006 05:41 » 

Функция работает, только не в тот Temp находит... Вместо "C:\WINXP\Temp\.." находит
"C:\Documents and Settings\Александр\Local Settings\Temp\.." Интересно, а из этого темпа Windows удаляет файлы?
И еще, написал прогу на VBA, а кроме как через макрос ничем открыть нельзя. Можно ли эту программу как-нибудь скомпилировать, чтобу был просто *.exe файл?
1) "C:\Documents and Settings\Александр\Local Settings\Temp\.." - это временная папка текущего юзера
2) Windows сама файлы из временных папок неудаляет, это дело программ создающих файлы (именно по этому в ентой дир-ии иногда можно лицезреть пару тысячь файлов)
3) Скомпилировать макрос в исполняемый (exe) файл нельзя.
Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #7 : 21-06-2006 05:43 » 

скорее всего да, т.к это темповая папка, а чтобы выдавало папку C:|WINDOW\TEMP
надо переменные окружения настраивать у пользователя: удалить указания на временные папки у локального пользователя и тогда он будет использовать системные папки
« Последнее редактирование: 21-06-2006 05:45 от HandKot » Записан

I Have Nine Lives You Have One Only
THINK!
Stork
Гость
« Ответ #8 : 21-06-2006 05:49 » 

Спасибо за помощь! Вот код рабочей программы:

Public 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

Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWDEFAULT = 10
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOWNORMAL = 1
Public mas(10000), kolf

Sub prog()

'----Копирование файла + перименование
  intfh = FreeFile()
  Open "C:\File1.askn" For Input As intfh
  s$ = "": kolf = 0: rash = "": pt = "": n% = 0
  While Not EOF(intfh)
    Line Input #intfh, s$
    If Mid(s$, Len(s$) - 3, 1) = "." Then n% = 3 Else n% = 4
    rash = Right(s$, n%)
    pt = Environ$("TEMP") + "\" + Str(kolf + 1) + "." + rash
    FileCopy s$, pt
    'intResult = ShellExecute(vbNull, "open", pt, 0, 0, SW_SHOWNORMAL)
    kolf = kolf + 1
    mas(kolf) = pt
  Wend
 
'---Открытие
 Dim intResult As Integer
 For i = 1 To kolf
   intResult = ShellExecute(vbNull, "open", mas(i), 0, 0, SW_SHOWMAXIMIZED)
 Next i
 If intResult = 31 Then
    MsgBox "Незарегестрированный тип файла"
 End If
End Sub

Function StartOfFile(strNameFile As String)
Dim intResult As Integer

intResult = ShellExecute(Application.hWndAccessApp, "open", strNameFile, 0, 0, SW_SHOWNORMAL)
If intResult = 31 Then
    MsgBox "Незарегестрированный тип файла"
End If
End Function
« Последнее редактирование: 19-12-2007 18:19 от Алексей1153++ » Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #9 : 21-06-2006 08:52 » 

И еще, написал прогу на VBA, а кроме как через макрос ничем открыть нельзя. Можно ли эту программу как-нибудь скомпилировать, чтобу был просто *.exe файл?

Переделай на VBScript (обычные текстовый файл с расширением VBS) и будет исполняемый файл

P.S.: правда может где-то надо будет код подредактировать
Записан

I Have Nine Lives You Have One Only
THINK!
Stork
Гость
« Ответ #10 : 29-06-2006 13:13 » 

Переписал прогу под VB, все работает...но как теперь сделать, чтобы при обращении к текстовым файлам (*.askn) запускался мой скомпилированный ехе-к ? Первый раз нужно будет указывать "Файл-> Открыть с помощью". Так вот, каким образом изменить строчку "Open "C:\File1.askn" For Input As intfh", чтобы на были жестко заданы путь и имя файла .askn? В Delphi это команда "ParamStr()"...
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #11 : 29-06-2006 13:52 » 

не совсем понял, но если параметры запуска программы, то
Код:
Command - возвращает аргументы с командной строки
и разбираешь полученную строку параметров
Записан

I Have Nine Lives You Have One Only
THINK!
Stork
Гость
« Ответ #12 : 29-06-2006 15:43 » 

После исправления кода, необходимо сделать ехе-к, например Проект1.exe
В текстовых файлах *.askn (аналог обычного .txt) по строчкам указаны пути к нужным файлам. Текстовые файлы мне необходимо открывать с помощью ехе-ка (без использования языка программирования!).
Т. е. при обращении к текстовым файлам, нужно чтобы сработала моя программа (копирование и открытие нужных файлов по пути).
Может нужно чтобы этот путь считывался как бы через командную строку?
Какие будут идеи?
Записан
Stork
Гость
« Ответ #13 : 29-06-2006 15:47 » 

Код программы на VB:

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

Dim mas(10000), kolf
Dim intResult As Integer
Const SW_SHOWMAXIMIZED = 3
Const SW_SHOWDEFAULT = 10
Const SW_SHOWNOACTIVATE = 4
Const SW_SHOWNORMAL = 1
Private Sub Form_Load()
'---------копирование и переименование
  Dim intfh As Integer
    'Dim Attrs As Integer
  intfh = FreeFile()
  Open ("C:\File1.askn") For Input As intfh
 'ParamStr(1) = "C:\File1.askn"
 'For Attrs = 1 To 255
  ' MsgBox ParamStr(Attrs)
  'Next Attrs
  s$ = "": kolf = 0: rash = "": pt = "": n% = 0
 While Not EOF(intfh)
    Line Input #intfh, s$
    If Mid(s$, Len(s$) - 3, 1) = "." Then n% = 3 Else n% = 4
    rash = Right(s$, n%)
    'tmpdir=Environ("TEMP")
    pt = Environ("TEMP") + "\" + Str(kolf + 1) + "." + rash
    FileCopy s$, pt
    'intResult = ShellExecute(vbNull, "open", pt, 0, 0, SW_SHOWNORMAL)
    kolf = kolf + 1
    mas(kolf) = pt
  Wend

'---открытие
 For i = 1 To kolf
   intResult = ShellExecute(vbNull, "open", mas(i), 0, 0, SW_SHOWMAXIMIZED)
 Next i
 If intResult = 31 Then
    MsgBox "Не зарегистрированный тип файла"
 End If

'------Закрытие программы
Unload Me
End Sub
« Последнее редактирование: 19-12-2007 18:22 от Алексей1153++ » Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #14 : 30-06-2006 05:30 » new

После исправления кода, необходимо сделать ехе-к, например Проект1.exe
В текстовых файлах *.askn (аналог обычного .txt) по строчкам указаны пути к нужным файлам. Текстовые файлы мне необходимо открывать с помощью ехе-ка (без использования языка программирования!).
Т. е. при обращении к текстовым файлам, нужно чтобы сработала моя программа (копирование и открытие нужных файлов по пути).
Может нужно чтобы этот путь считывался как бы через командную строку?
Какие будут идеи?


используй Command$

Код:
Command Function

Returns the argument portion of the command line used to launch Microsoft Visual Basic or an executable program developed with Visual Basic.

и тогда у тебя получится Проект1.exe test.askn
Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines