mol2751 10 / 10 / 3 Регистрация: 08.07.2015 Сообщений: 179 |
||||
1 |
||||
«Ошибка при открытии файла макроса…»07.04.2016, 10:51. Показов 3229. Ответов 7 Метки нет (Все метки)
У меня батник настроенный на работу с FTP. На машине с WINXP он работает отлично. Сам батник
ну и в папке с батником лежит send.txt
0 |
4332 / 2122 / 661 Регистрация: 26.04.2015 Сообщений: 6,823 |
|
07.04.2016, 14:19 |
2 |
ну и в папке с батником лежит send.txt — не верю, проверил только что: нет файла, сразу пишет Ошибка открытия файла макросаsend.txt, есть — открывает. Добавлено через 47 секунд
0 |
10 / 10 / 3 Регистрация: 08.07.2015 Сообщений: 179 |
|
08.04.2016, 08:28 [ТС] |
3 |
Скопировал батник и файл на вторую машину с Вин8.1, там работает…. а на первой, так и не заводится….что за чудеса. Добавлено через 16 минут
0 |
4332 / 2122 / 661 Регистрация: 26.04.2015 Сообщений: 6,823 |
|
08.04.2016, 12:17 |
4 |
mol2751, Видимо запуск где-то под админом, а где-то нет и поиск рядом с собой в папке запуска у админа (cmd из system32) пляшет от корня, а иначе достаточно папки в которой батник. Добавлено через 1 минуту
0 |
10 / 10 / 3 Регистрация: 08.07.2015 Сообщений: 179 |
|
08.04.2016, 12:20 [ТС] |
5 |
Полный путь пытался и так и сяк. Не кушает(
0 |
ComSpec 3455 / 1993 / 635 Регистрация: 26.02.2014 Сообщений: 1,457 |
||||
08.04.2016, 18:14 |
6 |
|||
Решение
ну и в папке с батником лежит send.txt Ну и пусть там и остаётся лежать. Только код, выполнение которого не зависит от способа запуска пакетного файла, должен быть таким:
.
1 |
alpap |
08.04.2016, 19:05
|
Не по теме:
«%~dp0send.txt» — ага, значит путь можно все-таки задать, только правильно.
0 |
10 / 10 / 3 Регистрация: 08.07.2015 Сообщений: 179 |
|
11.04.2016, 08:38 [ТС] |
8 |
-s:»%~dp0send.txt» Помогло! Спасибо!
0 |
Представляю вашему вниманию инструментарий для работы с файлами по FTP
Как известно, отправить файл на FTP сервер (или загрузить файл с FTP, создать папку на FTP сервере, и т.д.) можно при помощи таких API-функций из библиотеки wininet.dll, как FtpPutFile, FtpGetFile, FtpRenameFile, FtpDeleteFile, FtpRemoveDirectory, FtpCreateDirectory, FtpFindFirstFile и т.д.
Как именно использовать эти функции — можете посмотреть в коде надстройки для отправки файлов Excel на FTP сервер
В чем недостаток этого способа — так это в необходимости обеспечения совместимости кода с различными платформами.
В частности, чтобы код с функциями API работал и в Office 2010, и в 64-битной Windows, необходимо заметно увеличить объём кода. А, поскольку описание этих функций из wininet.dll и без того занимает много места (а универсальный код вообще займёт сотню строк), да и надо ещё и разбираться во всех этих функциях, т.к. в разных версиях Windows возможны различия в способе вызова функций из wininet.dll, и были созданы аналоги этих функций для работы с FTP, не использующие WinAPI
Сподвигла меня на это решение необходимость реализации средств обновления надстроек Excel, где необходимо было реализовать функционал отправки файлов Excel на FTP сервер, причем так, чтобы это стабильно работало на всех компьютерах. Попутно, кстати, родилась и функция загрузки файла с сервера без использования WinAPI, которая тоже вошла в состав данного инструментария.
Основу предлагаемого мной решения составляет модуль класса FTPcommander, который предоставляет вам следующие функции:
- Function DownloadFile(ByVal FtpFolder$, ByVal FtpFilename$, ByVal LocalPath$) As Boolean
(Функция скачивает файл с FTP-сервера с именем FtpFilename$ из папки FtpFolder$. Скачанный файл сохраняется на компьютере под именем (и по пути) LocalPath$. Функция возвращает TRUE, если загрузка файла завершилась успешно) - Function UploadFile(ByVal LocalPath$, Optional ByVal FtpFolder$, Optional ByVal FtpFilename$ = «») As String
(Функция загружает файл LocalPath$ по FTP на сервер в папку FtpFolder$. Если задан параметр FtpFilename$, отправленный файл получает имя FtpFilename$. Функция возвращает ссылку на файл, если закачка файла завершилась успешно) - Function CreateNewFolder(ByVal FtpFolder$) As Boolean
(Функция создаёт папку FtpFolder$ на FTP сервере. Возвращает TRUE, если папка была успешно создана, или существовала ранее) - Function DeleteFile(ByVal FtpFolder$, ByVal FtpFilename$) As Boolean
(Функция создаёт папку FtpFolder$ на FTP сервере. Возвращает TRUE, если папка была успешно создана, или существовала ранее) - Function DownloadFileFromURL(ByVal URL$, ByVal LocalPath$) As Boolean
(Функция скачивает файл по ссылке URL$, и сохраняет его по пути LocalPath$. Возвращает TRUE, если файл был успешно загружен) - Функция GetLastError возвращает информацию об ошибке, если некая функция была завершена некорректно (возвратила FALSE)
Дополнительно в составе модуля класса есть функции чтения и записи текстовых файлов ReadTXTfile и SaveTXTfile, а также функции перекодировки файлов и текста ChangeFileCharset и ChangeTextCharset
Как использовать модуль класса FTPcommander для работы с файлами по FTP:
1) Откройте прикреплённый к статье файл Excel, и мышом перетащите модуль класса FTPcommander в свой файл
2) Пропишите настройки FTP аккаунта в специальной функции, или сохраните их в реестре Windows
(подробнее об этом — ниже)
3) В своём макросе создаёте экземпляр класса FTPcommander, и используете его методы для работы с файлами
Создать экземпляр класса вам поможет следующий код: Dim FTP As New FTPcommander
Примеры макросов отправки и скачивания файлов доступны в прикреплённом файле (в модуле mod_TestFTP):
Вот один из примеров использования класса FTPcommander:
Private Sub ЗагрузкаФайлаНаFTPсервер() ' Этот макрос загружает файл "C:ПЖиВ.jpg" в корневую папку FTP сервера, ' переименовывая файл в "ER" Dim FTP As New FTPcommander Link$ = FTP.UploadFile("C:ПЖиВ.jpg", , "ER") ' В переменную Link$ возвращается ссылка вида "http://u3661.seiko.vps-private.net/ER", ' по которой доступен загруженный через FTP файл End Sub
Как видите, всего 2 строки кода, — и ваш файл оказался загружен на FTP сервер.
Ещё один пример использования:
Private Sub ЗагрузкаСПоследующимСкачиваниемФайла() Dim FTP As New FTPcommander fn$ = "C:Documents and SettingsAdminРабочий столstamp.png" ' отправляем файл с рабочего стола на FTP сервер ' (на сервере файл получит имя "1 2 3.png") Link$ = FTP.UploadFile(fn$, , "1 2 3.png") If Len(Link$) Then Debug.Print "Загруженный файл доступен по ссылке: ", Link$ Else Debug.Print "Ошибка: ", FTP.GetLastError End If ' а теперь скачиваем с сервера ранее загруженный файл "1 2 3.png" ' Скачанный файл окажется в той же папке (Рабочий стол), ' и получит имя "stamp.png222" res = FTP.DownloadFile("", "1 2 3.png", fn$ & "222") If res Then Debug.Print "Файл успешно загружен с FTP" Else Debug.Print "Ошибка: ", FTP.GetLastError End If End Sub
Есть 2 способа задать настройки FTP аккаунта для использования объектом FTPcommander:
1 способ — один раз запустить макрос следующего вида:
Sub Save_FTP_Account_Information() ' достаточно запустить ОДИН РАЗ! ' Cохраняем в реестре Windows настройки FTP-аккаунта по-умолчанию SaveSetting Application.Name, "FTP", "Host", "Имя или IP адрес сервера FTP" SaveSetting Application.Name, "FTP", "Login", "Имя пользователя (логин)" SaveSetting Application.Name, "FTP", "Password", "Пароль к FTP серверу" SaveSetting Application.Name, "FTP", "BaseFolder", "путь к стартовой папке, например, /www/" SaveSetting Application.Name, "FTP", "BaseURL", "http://Адрес Вашего Сайта, куда будут закачиваться файлы/" End Sub
Этот макрос запишет все необходимые настройки в реестр Windows, и впоследствии будет брать их оттуда
Преимущество этого способа: один раз запустили макрос, потом удалили его, — и можно нигде в коде не прописывать секретные данные FTP аккаунта
Недостаток этого способа: при хранении настроек в реестре, возможен доступ только к одному FTP серверу
2 способ — для инициализации объекта FTPcommander использовать специальные функции с настройками:
Function MyFTPaccount() As FTPcommander ' возвращает объект типа FTPcommander, с нужными настройками Set MyFTPaccount = New FTPcommander With MyFTPaccount .Host = "Имя или IP адрес сервера FTP" .Login = "Имя пользователя (логин)" .Password = "Пароль к FTP серверу" .BaseFolder = "путь к стартовой папке, например, /www/" .BaseURL = "http://Адрес Вашего Сайта, куда будут закачиваться файлы/" End With End Function
Пример использования функции:
Sub test() Dim FTP As FTPcommander ' объявляем переменную Set FTP = MyFTPaccount ' создаём объект с нужными настройками FTP.UploadFile ("C:123.jpg") ' отправляем файл на сервер End Sub
Преимущества этого способа: возможно работать с несколькими FTP серверами одновременно, конфиденциальные данные (настройки FTP аккаунта) не хранятся в открытом виде в реестре
Недостаток этого способа: настройки FTP аккаунта хранятся в коде VBA — если файл попадёт постороннему человеку, он легко сможет добраться до этих настроек (как известно, любые пароли на VBA ломаются за секунду)
На клиентской машине установлена Win7.
На сервере Ubuntu 14.04 c VSFTPD.
Когда на клиентской машине запускаю консоль и пытаюсь подсоединиться через FTP — получается.
Но хотелось бы автоматизировать действия и для этого сделал небольшой батник
ftp -s:enter.txt -i 192.168.5.3
cd 1C
mput C:UserssyaDesktopDocuments.rar
В той же папке, откуда я запускаю *.bat-файл лежит enter.txt со списком команд:
MyLogIn
MyPassword
cd 1C
mput C:UserssyaDesktopDocuments.rar
Но при запуске *.bat-файла мне консоль пишет:
C:Userssya>ftp -s:enter.txt -i 192.168.5.3
ошибка открытия файла макросаenter.txt
Обмен файлами с компьютером, на котором запущена служба
сервера FTP. FTP может использоваться интерактивно.
FTP [-v] [-d] [-i] [-n] [-g] [-s:имя_файла] [-a] [-A] [-x:sendbuffer]
[-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [узел]
Если же я пропишу жесткий путь
ftp -s:C:UserssyaDesktopenter.txt -i 192.168.5.3
cd 1C
mput C:UserssyaDesktopDocuments.rar
, то:
C:Userssya>ftp -s:"C:UserssyaDesktopenter.txt" -i 192.168.5.3
Связь с 192.168.5.3.
220 (vsFTPd 3.0.2)
Пользователь (192.168.5.3:(none)):
331 Please specify the password.
530 Login incorrect.
Сбой входа.
ftp> cd 1C
530 Please login with USER and PASS.
ftp> mput C:UserssyaDesktopDocuments.rar
C:UserssyaDesktopDocuments.rar:
ftp>
Пытался сделать так, как написано на stackoverflow, но что-то тоже не получилось.
И никак не могу определить, где я ошибся.
Смотрите последний параметр функции Workbooks.Open
CorruptLoad | Optional | XlCorruptLoad | Can be one of the following constants: xlNormalLoad, xlRepairFile and xlExtractData. The default behavior if no value is specified is xlNormalLoad and does not attempt recovery when initiated through the OM. |
код будет выглядеть примерно так:
Код |
---|
On Error Resume Next : err.clear set wb = Workbooks.Open(filename$) ' попытка открыть файл «нормально» if err.number=1004 then ' если не получилось - пробуем восстановить файл при открытии err.clear set wb = Workbooks.Open(filename$, CorruptLoad:=xlRepairFile ) end if if err then msgbox "не удалось открыть файл": exit sub |
PS: перемудрили что-то с форумом, невозможно код писать, — приходится в режиме bb code постоянно исправлять глюки
Страница 1 из 2
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Указаны все настройки по подключению, которые работают в FTP клиенте.
При нажатии «Проверить соединение» следующая ошибка:Папки для загрузки менял и создавал для них разные доступы. Все равно ошибка. -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
Здравствуйте.
Какую рабочую папку указали? -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Папку: site.ru/public_html
Пробывал: site.ru/public_html/cd. Пробелов в конце адреса нет. -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
Попробуйте другой хостинг. У меня и у моих коллег работает хорошо. Тестировали много раз. В чем у вас проблема — непонятно. Судя по ошибке — не так указали рабочую папку…
-
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
Если хотите, напишите мне в Skype, посмотрим по TeamViewer, что у вас там такое…
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Хостинг работает на VPS может ли быть дело в этом?
Указывал конкретно:**Скрытое содержимое: доступно при наличии 1 постов.**
-
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
Так мы будем только гадать…
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Решение было найдено.
FTP доступ был на папку cd в public_html.
Был создан FTP доступ на уровень выше и в названии папки поставлено только cd.
Теперь работает! -
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
После установки соединения следующий вопрос:
Как сделать так чтобы генерируемые .csv файлы которые находятся в папке на компьютере автоматически загружались в нужную папку на ftp заменяя файлы с таким же названием там?
Сделать это при запуске программы.
Насколько я успел узнать нужно сделать .bat файл и загрузить в программу.
Как он должен выглядеть, что содержать? -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
Функции работы с FTP создавались для автозагрузки туда картинок и файлов, скачанных макросом DOWNLOADFILE.
Я могу лишь предложить дождаться нового макроса загрузки любых файлов с диска на FTP. По срокам ничего не могу сказать, но постараюсь сделать в ближайшие 1-2 недели… -
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Уже можно использовать результат работ по созданию макроса загрузки любых файлов на FTP?
-
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
Здравствуйте.
Каюсь, но пока, увы, нет.
-
Kreol
Модератор
Команда форума
Модератор- Регистрация:
- 6 янв 2013
- Сообщения:
- 2.645
Если вам нужно загружать очень много файлов и больших объемов, загрузка через любой клиент будет намного быстрее. (filezilla, WinSCP)
-
nail
Member
Пользователи- Регистрация:
- 15 сен 2014
- Сообщения:
- 60
Zel-Gr хочет наверное все-таки, чтобы автоматом после парсинга новый CSV на хост загружался поверх старого, либо в дополнение к существующему csv.
А в самой CMS для импорта уже подхватываем CSV на выбор.
Было бы замечательно. Меньше телодвижений filezilla, WinSCP.:blush: -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
А вот это уже поинтереснее! =)
Господин Zel-Gr, можно ли конкретизировать этот момент?
Спасибо! -
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Да, все верно насчет автоматом на хост с перезаписью.
Допустим имеется несколько поставщиков у магазина. После парсинга программой по каждому создается файл CSV с заданным названием и загружается на хост, перезаписывая старый. Далее скрипт, добавленный в CRON, берет в определенное заданное время поочереди все эти файлы и загружает в базу изменения.
Можно ли сделать так, чтобы после включения программы при нажатии одной кнопки парсилось по очереди несколько проектов?
Тогда весь процесс:
1. Включить программу
2. Запустить задание на парсинг нескольких проектов за небольшое время до времени заданного CRON -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
Большое спасибо за информацию!
Для запуска очереди проектов используйте планировщик программы (соответствующая кнопка на панели инструментов главного окна программы).
С уважением к вам, Сергей.
-
kagorec
Администратор
Команда форума
АдминистраторСсылки недоступны для гостей -Ура обновление вышло, теперь можно контент грузить в любой движек (при обработчике на стороне сервера)!
Страница 1 из 2
Поделиться этой страницей
I have VBA code that opens csv files which are located on an ftp server using the following syntax:
Workbooks.Open Filename:="ftp://username:password@'ftpaddress'"
Each day of the month has its own file, and I must open every file in the current month. My issue is that after opening and manipulating several files, I get a Run-time error 1004
: Microsoft Excel cannot access the file.
If I hit Debug, and then continue, the macro will continue working. Any help would be appreciated.
|
|||
Пух
15.06.05 — 14:16 |
Есть внешняя robot.ert; В ней: |
||
101
1 — 15.06.05 — 14:18 |
обработка ожидания |
||
АЛьФ
2 — 15.06.05 — 14:18 |
2(0) Установи текущий каталог. |
||
Пух
3 — 15.06.05 — 14:22 |
Как поправить то понятно, интересует сам факт: Почему один и тот же набор каманд, при разном запуске, отрабатывается в разных каталогах? |
||
АЛьФ
4 — 15.06.05 — 14:27 |
2(3) Потому что разный текущий каталог. |
||
Strawberry
5 — 15.06.05 — 14:30 |
Особенности …….. когда «(запускаю сам) » — то ты выбираешь папку в которой лежит отчет она становиться папкой по умолчанию. Когда «(запускаю из ГМ) » каталог по умолчанию каталог пользователя. |
||
user1C
6 — 15.06.05 — 14:37 |
(5)+ |
||
Пух 7 — 15.06.05 — 14:39 |
(5) Шпенькс |
TurboConf — расширение возможностей Конфигуратора 1С
0x00 фон
В последнее время из-за эпидемии было скучно сидеть дома, поэтому я сделал несколько макросов на Excel.
Excel использует язык vba для реализации макросов. Хотя я не изучил его, но общий код можно понять, я сделал небольшой скрипт для открытия Excel для автоматического запуска макросов и загрузки файлов на локальный ftp-сервер.
Конфигурация 0x01
Во-первых, вам нужно открыть макросы Excel, в начале excel- «параметры-» центр доверия- «настройки макросов» включить все макросы, как показано ниже.
После настройки макроса вы можете приступить к программированию макроса. Чтобы
В параметрах средства разработки выберите Visual Basic, чтобы войти в интерфейс программирования макросов.
После входа в интерфейс программирования дважды щелкните Thisbook слева, чтобы войти в модуль программирования текущего рабочего листа.
Наконец, установите автоматический запуск макроса и автоматически запускайте макрос при открытии Excel. Выберите открыть на вкладке справа
На этом настройка Excel завершена.
0x02 vba реализует загрузку по ftp
Я долго искал в Интернете, чтобы найти его. Вначале я собираюсь использовать способ доступа к dos, а затем постепенно передаю команду. Но обнаружено, что excel не просто передает строку в команду dos для запуска, а напрямую вызывает команду dos для выполнения, что делает невозможным передачу одного символа в команду dos. Если вы запустите команду aaa, она сразу вернет «недопустимую команду».
Но все же запишите метод вызова командной строки, на случай, если он пригодится в будущем =. знак равно
Sub main()
Shell "cmd /k ping 127.0.0.1", 1
End Sub
Код очень прост, просто вызовите встроенную функцию интерфейса напрямую. Передняя часть представляет собой строковую команду, а задняя 1 представляет собой черное окно запущенной команды dos. 0 означает, что она не выполняется (это хорошо!)
Однако этот метод не поддерживает использование команд 1 && в dos. Я не знаю почему.
Ниже приведен метод, который я нашел.
Sub main()
Dim env_addr, env_user, env_passwd, localftp, ftpfile, cfgfile As String
env_addr = "192.168.230.129"
env_user = "Имя пользователя"
env_passwd = "Пароль"
localftp = "D:"
ftpfile = "/123.txt"
cfgfile = "D:1123.txt"
If Dir(ftpfile) <> Empty Then
MsgBox «Файл успешно загружен»
Exit Sub
End If
Open cfgfile For Output As #1
Print #1, "open " & env_addr
Print #1, env_user
Print #1, env_passwd
Print #1, "lcd " & localftp
Print #1, "bin"
Print #1, "prompt"
Print #1, "get " & ftpfile
Print #1, "bye"
Close #1
Shell "ftp -s:" & cfgfile, 1
End Sub
Излишне говорить, что первые три параметра
localftp — это каталог локального хранилища
ftpfile — это путь и имя файла на ftp-сервере, который нужно получить
cfgfile — текущий файл конфигурации, серия наборов команд, которые необходимо выполнить
Следующее открытое — это процесс создания набора команд.
Наконец, запустите команду в виде Shell.
Я пытаюсь использовать макрос teraterm в vxworks
как это. имя файла = test-mbedtls.ttl
sendln 'cmd'
wait '[vxWorks]#'
sendln 'ftp x.x.x.x'
wait UsernamePrompt
(xxxx это мой ip)
но результат
Ошибка открытия: (подключение: errno = 0x3e)
когда я ввел вручную ftp xxxx в терминале teraterm, он работает хорошо.
но при использовании макроса всегда печатается Open fail
я неправильно использую макрос?
Решенная проблема… Устройство нехорошее, поэтому мне нужно подождать секунды. Добавляю паузу 3, работает хорошо.
2019-12-01 06:14