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
Молодой специалист
Offline
|
|
« Ответ #1 : 14-06-2006 06:10 » |
|
1)создавать временную папку Temp 2)копировать в эту папку нужные файлы, считывая построчно их путь из обычного текстового файла (*.txt) в цикле 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
|
|
« Ответ #3 : 19-06-2006 12:30 » |
|
echo %TEMP%
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #4 : 20-06-2006 10:22 » |
|
Большое спасибо! Еще один небольшой вопросик: Как можно по другому записать путь к папке Temp ("C:\WINDOWS\Temp\"). Должно быть что-то типа "%sytmp%\", т. е. вместо sytmp должно быть что-то другое. (Мне нужно, что-бы прога сама находила эту папку, и не зависела от пути, куда установлен Windows.)
|
|
|
Записан
|
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
|
|
« Ответ #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
Молодой специалист
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
Молодой специалист
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
Молодой специалист
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
Молодой специалист
Offline
|
|
« Ответ #14 : 30-06-2006 05:30 » |
|
После исправления кода, необходимо сделать ехе-к, например Проект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!
|
|
|
|