|
|
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Добрый день.Есть макрос. Sub Ìàêðîñ1() ' ' Ìàêðîñ1 Ìàêðîñ ' ' Ñî÷åòàíèå êëàâèø: Ctrl+a ' With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\Users\путь\путь\путь\папка в которой файлы txt\01010901.txt", Destination:= _ Range("$A$1")) .Name = "01010901" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 1251 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileOtherDelimiter = "|" .TextFileColumnDataTypes = Array(1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub Макрос делает экспорт txt файла на 1 лист.Подскажите как макрос доработать,что бы он брал следующий файл в папке(пока файлы не кончатся) и делал тот же самый экспорт на следующий лист. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 12:43 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Начинает копировать со второго файла в папке. Первый можна скопировать если просто разместить Ваш код перед моим. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 13:20 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, Спасибо большее.Можно еще вопрос.Сейчас макрос все это дело шлепает на один лист. Мне необходимо,что шлепал по след условию. Макрос берет файл из папки и обрабатывает его след образом. 1.Открывает файл и проверяет значение РД=Значение Пример:РД=01 1 Если это 01 1 значит на экспортирует 1 лист. Если это 02 2 значит на экспортирует 2 лист. Если это 03 3 значит на экспортирует 3 лист. Если это 80 80 значит на 4 лист. После чего экспортирует данный файл в лист по выше указанному условию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 14:33 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
crystalreportsСейчас макрос все это дело шлепает на один лист. Мне необходимо,что шлепал по след условию. Макрос берет файл из папки и обрабатывает его след образом. 1.Открывает файл и проверяет значение РД=Значение Пример:РД=01 1 Если это 01 1 значит на экспортирует 1 лист. Если это 02 2 значит на экспортирует 2 лист. Если это 03 3 значит на экспортирует 3 лист. Если это 80 80 значит на 4 лист. Странно, что на один... Вроде должен активировать следующий лист: Код: plaintext Вложите пример текстового файла (на несколько строк, с этим РД). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 14:39 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, Не все шлепает на 1 лист не смотря на Sheets(ActiveSheet.Index + 1).Activate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 14:50 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Вот такое пробуйте: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 16:13 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
MaximuS_G спасибо большее за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 10:05 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, При экспорте данные из txt файла становятся рядом в ряд. Вопрос: Можно,что бы между ними было 7 пустых столбиков Пример: Данные из 1 файла - 7 пустых столбиков - 2 файл - 7 пустых столбиков ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 14:41 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
ТСПри экспорте данные из txt файла становятся рядом в ряд. Вопрос: Можно,что бы между ними было 7 пустых столбиков Пример: Данные из 1 файла - 7 пустых столбиков - 2 файл - 7 пустых столбиков ... Не понял, что опять данные копируются на один лист? И про какие данные Вы говорите, уточните, а то не понятно, либо же опять илюстрированный пример выложите... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 15:17 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Извините, я тут тоже заинтересовался - никогда кодом query не вставлял на лист, пригодится... crystalreports Вопрос: Можно,что бы между ними было 7 пустых столбиков Пример: Данные из 1 файла - 7 пустых столбиков - 2 файл - 7 пустых столбиков ... Так работает (кусок кода): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. MaximuS_G Не понял, что опять данные копируются на один лист? - это если несколько раз подряд код запускать на одном файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 15:26 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Hugo121 - это если несколько раз подряд код запускать на одном файле. А, ясно. Спасибо. Как-то не подумал :)... Hugo121 Selection.EntireColumn.Insert Selection.EntireColumn.Insert Selection.EntireColumn.Insert Selection.EntireColumn.Insert Selection.EntireColumn.Insert Selection.EntireColumn.Insert Selection.EntireColumn.Insert А так? Может быстрее: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 15:46 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, Нет ваш код работаем отлично.Данные грузятся на ура. Если можно помогите с другим макросом но в тужу печку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 15:56 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Давайте уточним, правильно ли я Вас понял... 1) Запустите один раз макрос (что бы данные вставились один раз) 2) Скопируйте эти данные 3) Вставьте на новый лист следующим образом: Специальная вставка - Галочки: Транспортировать и Значения. Это то, что я понимаю идеальный вариант, только еще нужно скопировать вниз первую строку (содержащую общую информацию) ? Если да, то макросом можно каждый раз данные из листа доставки переносить в лист сборщик, при этом переварачивая их как я указал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 16:25 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, Немного не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 16:39 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Может быть, раз уж такие сложности, сразу считывать файлы в массив данных, и затем выгружать его на лист в нужном порядке? И делать это можно vbs-скриптом - запустили скрипт, указали (если жёстко не прописано в коде) какую папку обрабатывать и куда класть данные, получили готовый файл. Результат может быть после одного клика, и экселевский файл без макроса внутри (хотя конечно макрос можно держать и в другом файле). Я бы так попробовал сделать, правда не факт, что реализацию будет проще сделать. И вот с xlsx (если это важно) не знаю, как в vbs обращаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 17:01 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Вообщем создаете дополнительные листы: Лист1_Converted, Лист2_Converted... Номера строк, колонок уже сами подрегулируете. Вот новый код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 17:24 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Может действительно, как говорит Hugo121 подумать над чем нибудь другим в плане обработки данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 17:26 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Например так - начало взял от MaximuS_G, немного добавил проверок на расширение и на наличие файлов. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2009, 18:24 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Так, в первой версии обнаружились косяки: если данных было на одну строку, то при повторном запуске они затирались. Короче, трудно сделать корректное определение строки, куда надо писать - UsedRange.Rows.Count на пустом листе или листе с одной заполненной строкой даёт 1, и найти, как это отличить, мне не удаётся. Определить кодом, есть ли данные в первой строке, не получается. Пока примем, что первая строка заполнена. Туда можно поставить заглавие до работы скрипта или после. Ещё была ошибка, если текстовый файл не подходил ни под одну категорию (необнулялся массив), ну и мелочь с добавлением и названием листов, если их изначально меньше 4-х. Не получается добавить новый лист в конец списка (add :=after не работает в vbs, надо как-то иначе, но вот как?). Поэтому теперь к листам обращаюсь по имени, рассчитано на русский Эксель (иначе путаница с номерами и названиями листов). Прикладываю новую версию, код почти как и раньше, если интересно, смотрите в файле. Итого - желательно сперва заготовить чистый (или уже пользованный) файл с 4-мя листами с заголовками в первой строке, названными, как в коде. Ну и как , расположение данных подходит или иначе надо? Строку кода ReDim Preserve Dt(UBound(arrLineList),4) подправьте под задачу - вместо 4 ставьте количество столбцов данных - 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2009, 23:04 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
2 crystalreports , Если все же будете брать мой код, заполните первые две строки в каждом из листов (Лист1_ Converted , Лист2_ Converted ...) до 20й колонки любыми значениями. Это что бы правильно определило первый раз куда вставлять транспортируемые данные. Когда будут добавлены другие записи, первые 2 строки можно удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2009, 10:49 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
2 crystalreports, всё же мне кажется, данные надо иначе располагать. Оказалось не так просто, как я рассчитывал, но вроде работает. Да, последнюю строку из предыдущего сообщения читать так: вместо 4 ставьте (количество_столбцов_данных - 1) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2009, 09:48 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Hugo121, MaximuS_G Спасибо вам за помощь!!С наступающим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2009, 13:18 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
С Новым Годом! Раз уж тут рассмотрено два варианта разбора текста для Экселя, решил добавить третий вариант - переносим vbs скрипт в макрос Экселя. Делал на днях подарок бухгалтершам к Новому Году - оказывается, они каждый день вдвоём тратят кучу времени и нервов, выбирая из распечатанного на несколькихх листах текстовика, который выдаёт система, данные (много чисел, выборочно из кучи ненужной информации, подчёркивая нужное по линеечке), которые плюсуют на калькуляторе в много сумм, которые затем заносят в несколько форм в Экселе и распечатывают. Не понимаю, зачем это вообще нужно делать, но наверное нужно.... Мне кажется, это довольно типичная задача, поэтому если это эссе в итоге в Новом Году поможет ещё хоть паре других бухгалтерш, я думаю стоит его написать :) Конечно, давно уже надо было хотя бы сперва импортнуть этот текст в Excel (стандартная таблица, легко переносится, расположение данных постоянно, можно разбивать по пробелам или фиксированно), и затем его обрабатывать, всё легче, чем из текста выколупывать. Но мне кажется, так кода нужно больше писать, чем если разбирать текст в vbs, поэтому я сперва написал программу в vbs. Т.к. формы генерить из скрипта сложновато (различные рамки и форматирование, все немного различаются), я решил закидывать полученные данные в уже готовый *.xls (сперва их было много, соответсвенно на каждую по скрипту, всего несколько*2 файлов :) ). Но на практике неудобно, что код привязан к определённому названию и расположению этих форм. Да и вносить изменения сложно в много скриптов. Если бы эти формы далее надо было пересылать другим людям, наверное я так бы и оставил - в формах макросов нет, при открытии файла никаких вопросов, ну и т.д. Но так как требуется всего лишь несколько раз распечатать несколько заполненных форм, я решил всю программу и все формы объединить в одном файле. Т.к. текстовик генерится всегда в "c:\temp\Journal_" & ddd & ".txt", где ddd - это день года (т.е. даже исходный текстовый файл выбирать приходится только если нет сегодняшнего), теперь вся работа бухгалтерши (уже любой из отдела и одной) по этой задаче сводится к открытию файла, разрешению макросов (или обновления данных) и нажатии в форме кнопки "Печатать" Ещё в форме есть индивидуальный выбор форм для печати и отказ от печати. (Код формы можно посмотреть в приложении, там сокращённый рабочий вариант всего, текстовый файл поместить в c:\temp\) Единственная опасность - если вдруг изменится формат текстовика (сдвинутся в строках данные, слова-ориентиры поменяются или десятичный разделитель заменят), тогда всё рухнет. На этот случай пришлось договариваться с обслугой той системы, что они введут в начале первой строки версию файла - если она изменится, код работать перестанет, и мне придётся смотреть, что изменилось и править код. Но это судя по всему бывает крайне редко. Короче - привожу коротенько сокращённый код (оригинал ~ 600 строк), постарался прокомментировать для начинающих, код получился несложный и его легко изменить для других задач. Текстовый файл читается построчно, в строке (если в начале нужное слово) в определённых местах находятся данные, они суммируются в переменных, затем выгружаются в формы. В данной задаче не нужно скакать по файлу вверх-вниз, поэтому всё просто. В другой задаче я сперва читал всё содержимое файла в многомерный массив, и затем обрабатывал элементы массива. Там код посложнее получался. Т.к. я не профессионал от программирования, возможно в коде есть некоторые погрешности, если есть замечания, говорите :) Перенос кода из vbs в модуль xls прошёл практически без изменений кода, только Wscript.Quit заменил на Exit Sub, и добавил типы переменным (в vbs они без указания типов). Можно вместо Double использовать Currency, но тогда в ячейки сумма заносится с форматированием в виде валюты, что мне в данном случае не надо, а переделывать формат - лишняя работа. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2010, 17:12 |
|
||
|
автоматизация
|
|||
|---|---|---|---|
|
#18+
Hugo121Делал на днях подарок бухгалтершам к Новому Году - оказывается, они каждый день вдвоём тратят кучу времени и нервов, выбирая из распечатанного на несколькихх листах текстовика, который выдаёт система, данные (много чисел, выборочно из кучи ненужной информации, подчёркивая нужное по линеечке), которые плюсуют на калькуляторе в много сумм, которые затем заносят в несколько форм в Экселе и распечатывают Мне кажется такого рода повторяющиеся монотонные задачи существуют в 95% компаниях и так вручную эти задачи обрабатывают 95% персонала. Потому что времени на "подумать" не хватает, надо же выйти 20 раз за день покурить и рассказать что вчера на ужин кушали :). У меню вот тоже была бы куча монотонной работы, которая занимала бы дни!, а так я заинтересовался автоматизацией 2 года назад и есть результат, на ту же работу теперь тратятся часы. Я вот в своей компании подумаваю как бы организовать курсы эффективной работы с Экселем. Может и Вам стоит своиx бухгалтерш обучить немного. И руководство заметит, если еще не заметило :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2010, 09:37 |
|
||
|
|

start [/forum/topic.php?fid=61&fpage=174&tid=2178645]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
215ms |
get tp. blocked users: |
3ms |
| others: | 251ms |
| total: | 557ms |

| 0 / 0 |
