Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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()
    ;Dim rng As Range
    ;Dim cur_range As Range
    ;Dim cur_range1 As Range
    ;Dim 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 строки батника записаны след образом в первом столбце (A)содержится начало комманди, в необходимые строки столбцов (B) и (D) вставляются выбранные значения из массива, столбец (С) содержит окончание комманды

Повторюсь с вопросом как диапазон ячеек из екселя скопировать в txt/bat без сепараторов (знаков табуляции)???


Понимаю что написано коряво, так что если есть предложения по улучшайзингу/оптимизации - выслушаю все

Ответить

Номер ответа: 3
Автор ответа:
 bi-lya



Вопросов: 1
Ответов: 125
 Профиль | | #3 Добавлено: 19.01.07 05:00
1. Я не понял, для чего нужен лист BAT и что такое "Range("A1:D45";).Copy" - это вы собрались вставлять в .bat? Как я понимаю, КАЖДАЯ строка (перед записью в .bat) должна быть сформирована из значений ячеек ОДНОЙ ОПРЕДЕЛЕННОЙ СТРОКИ при помощи & (типа
vstavka=cells(x,2).Value & cells(x,4).Value & ...)
и построчно вставляться непосредственно в .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) и может быть использовать "заморозку" окна
Application.ScreenUpdating = False...True

Ответить

Номер ответа: 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
также если не трудно оппишите как перед выполнением описанного выше определить последнюю не пустую ячейку в столбце - для уменьшения диапазона проверки


    Dim iRow As Long    'Кол-во занятых строк
    iRow = WorkSheets(SourceList).UsedRange.Rows.count


Ну и вместо Rows, соответственно есть Columns

никаких
1. Через Do While...Loop и IsEmpty определяем заполненные ячейки
ненадо...

искать подстроку лучше так:
if WorkSheets(SourceList).Cells(x,y) like "*1*" then ...

Ответить

Номер ответа: 7
Автор ответа:
 Zhyryk



Вопросов: 1
Ответов: 5
 Профиль | | #7 Добавлено: 29.01.07 10:52
Опишу мою "задачу" точнее =)
Есть прога для подготовки проектов ПО терминалоного оборудования (с поддержкой командной строки).
Одна из ее возможностей - вставка данных в указанные поля ПО. Текст для вставки довольно часто содержит кирилицу.
Cтроки выглядят примерно так:
[B]комманда -параметр [/B]"HeaderText1=[I]текст на русском/украинском языке[/I]" "путь к шаблону изменяемого проекта ПО"

при вставке этой строки из экселя в *.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
Извините за оштбку в имени =)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам