Страница: 1 |
Страница: 1 |
Вопрос: Найденное в Excel и вписать в bat-файл?
Добавлено: 16.01.07 13:58
Автор вопроса: Zhyryk
Всем здравствуйте!
Так как я полный новичек в VBA =(
Прошу помочь в написании макроса
В активной книге/листе необходимо в столбце P найти строки содержащие значение «1», далее значения определенных ячеек указанной строки необходимо вставить на определенную позицию (строка, символ) в temp.bat.
После чего запустить его.
также если не трудно оппишите как перед выполнением описанного выше определить последнюю не пустую ячейку в столбце - для уменьшения диапазона проверки
Зарание благодарен.
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #1
Добавлено: 17.01.07 02:46
Я вижу это так
1. Через Do While...Loop и IsEmpty определяем заполненные ячейки, заодно можно проверять на наличие 1 (через InStr, например) с выходом через Exit Do в положительном случае. Запоминаем номер строки
2. Формируем строку из нужных ячеек найденной строки
3. Через Open...For Output вытаскиваем файл temp.bat, построчно загоняем его в массив
4. Заменяем значение масива сформированной строкой
5. Записываем все обратно в файл temp.bat
6. Запускаем temp.bat при помощи (если не ошибаюсь)Shell
Номер ответа: 2
Автор ответа:
Zhyryk
Вопросов: 1
Ответов: 5
Профиль | | #2
Добавлено: 18.01.07 16:02
Привет всем, спасобо откликнувшемуся bi-lya
я тум немного поковырял Инет и порочку друганов
наваял следующее:
Sub Excel to BAT()
 im rng As Range
 im cur_range As Range
 im cur_range1 As Range
 im x As Integer
Sheets("POS".Select
For Each rng In Range("P5:P650" ' пока хватает и 650
If rng.Text = "" Then
Exit For
ElseIf rng.Text = "1" Then
x = rng.Row
' задаю необходимую ячейку в 18 столбце и текущей строке
Set cur_range = Range(Cells(x, 18), Cells(x, 18))
cur_range.Activate
cur_range.Copy
Sheets("BAT".Select
Range("B7, B4".Select
ActiveSheet.Paste
' задаю необходимую ячейку в 17 столбце и текущей строке Sheets("POS".Select
Set cur_range1 = Range(Cells(x, 17), Cells(x, 17))
cur_range1.Activate
cur_range1.Copy
Sheets("BAT".Select
Range("B10".Select
ActiveSheet.Paste
' Вопрос как указанный диапазон скопировать в txt без сепараторов (табуляции)???
Sheets("BAT".Select
Range("A1:D45".Copy
End If
Next
End Sub
* На листе POS - массив данных, на листе BAT строки батника записаны след образом в первом столбце содержится начало комманди, в необходимые строки столбцов (B) и (D) вставляются выбранные значения из массива, столбец (С) содержит окончание комманды
Повторюсь с вопросом как диапазон ячеек из екселя скопировать в txt/bat без сепараторов (знаков табуляции)???
Понимаю что написано коряво, так что если есть предложения по улучшайзингу/оптимизации - выслушаю все
Номер ответа: 3
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #3
Добавлено: 19.01.07 05:00
1. Я не понял, для чего нужен лист BAT и что такое "Range("A1:D45".Copy" - это вы собрались вставлять в .bat? Как я понимаю, КАЖДАЯ строка (перед записью в .bat) должна быть сформирована из значений ячеек ОДНОЙ ОПРЕДЕЛЕННОЙ СТРОКИ при помощи & (типа
2. Так существующего temp.bat нет? Тогда проще. Используем что-то вроде
Open ...temp.bat... For Input As #f
...
Line Input #f, vstavka
3. Не понял откуда у вас знаки табуляции? Приведите пример, посмотрю
3.По вопросу оптимизации посмотрите это
http://bbs.vbstreets.ru/viewtopic.php?t=30463&start=30&sid=ac3fdbf6a29a9324456725452d01f769(последний пример т-ща KL) и может быть использовать "заморозку" окна
Номер ответа: 4
Автор ответа:
Zhyryk
Вопросов: 1
Ответов: 5
Профиль | | #4
Добавлено: 25.01.07 16:33
2. Input вроде как нельзя использовать для несущестdующего файла потому использую Output
у меня же сейчас прописано следующие
iStr = 45 'номер последней строки текста батника
Open url_name_bat For Output As #1
For i = 2 To iStr
data = Cells(i, 1).Value & Cells(i, 2).Value & Cells(i, 3).Value & Cells(i, 4).Value & Cells(i, 5).Value
Print #1, data
Next i
Close #1
Shell url_name_bat
Есть проблема некоторые ячейки в содержат русский текст, при просмотре в FARe в WIN кодировке - отображается нормально а в DOS - корякозябры и в результате выполнения bat файла а прогу прописываются нечитабельные символы.
Как заставить макрос вставлять данные из экселя в bat/txt - в DOS кодировке?
Спасибо всем кто оказал помощь - макрос почти закончен свою работу делает вот еще бы с кодировкой подшаманить и былобы мне счастье )))))
Номер ответа: 5
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #5
Добавлено: 27.01.07 16:19
Может быть, Encoding в этом случае поможет?
А вообще-то мне не понятно, откуда в .bat'е "...русский текст..."...
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 27.01.07 21:17
iRow = WorkSheets(SourceList).UsedRange.Rows.count
Ну и вместо Rows, соответственно есть Columns
никаких
искать подстроку лучше так:
if WorkSheets(SourceList).Cells(x,y) like "*1*" then ...
Номер ответа: 7
Автор ответа:
Zhyryk
Вопросов: 1
Ответов: 5
Профиль | | #7
Добавлено: 29.01.07 10:52
Опишу мою "задачу" точнее
Есть прога для подготовки проектов ПО терминалоного оборудования (с поддержкой командной строки).
Одна из ее возможностей - вставка данных в указанные поля ПО. Текст для вставки довольно часто содержит кирилицу.
Cтроки выглядят примерно так:
при вставке этой строки из экселя в *.bat и последующем запуске его через Shell - вместо кирилици получаем "корякозябры" в указанном поле ПО.
По поводу UsedRange - на сколько я понял он также отработает пустую ячейку к которой применено форматирование, а мне это не подходит. В конечном итоге я проверяю каждую строку до первой пустой? так что это не столь важно.
Если я задлуждаюсь исправьте
Номер ответа: 8
Автор ответа:
bi-lya
Вопросов: 1
Ответов: 125
Профиль | | #8
Добавлено: 30.01.07 05:34
Уточните, УЖЕ в .bat'е "кракозябры"? Или при выводе ИЗ .bat'а? У меня было так, что записывалось в файл нормально, а при выводе получалась японская фигня. Спас Encoding. Но я выводил Вордовский файл
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 30.01.07 23:04
ну так перед записью в бат нужно ж в оем кодировку наверное?
Номер ответа: 10
Автор ответа:
Zhyryk
Вопросов: 1
Ответов: 5
Профиль | | #10
Добавлено: 28.02.07 17:14
To HACEKR
Если не сложно опишите пожалуйста "код" вставки данных из Excel в txt/bat в OEM кодировке
Номер ответа: 11
Автор ответа:
Zhyryk
Вопросов: 1
Ответов: 5
Профиль | | #11
Добавлено: 28.02.07 17:15
Извините за оштбку в имени