|
|
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Попробовал. Интересный результат. Очень короткий код получается! Обычно через цикл последовательно читаешь строки текстового файла... А тут в одну строку кода! Красота! А вот использовать fso.OpenTextFile через Set я бы не догадался. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2011, 12:45 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Если хочешь читать построчно, тогда вот код. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Alex37"А вот использовать fso.OpenTextFile через Set я бы не догадался." И почему же? OpenTextFile возвращает TextStream, объект. А что присвоить объект переменной, нужно использование Set. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2011, 13:07 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinAlex37, Кстати, небольшое уточнение. Если у тебя есть ещё символ "-" в названии файла, то лучше воспользовацо функцией InStrRev. Она ищет не слева направо, а справа налево. Учитывая, что номера стоят в конце названия файла, и перед этим номер стоит символ "-", то безопаснее будет использовать InStrRev. Итак, итоговая процедура. Код: 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. Подскажите, как правильно присвоить переменной SET ссылку на рабочую страницу для aFile ? Делал так: ..... Dim parName As String Dim parFullName As String Dim PagePar As Object .... For Each aFile In fso.GetFolder(sRootFolder).Files ... parFullName = aFile parName = Dir(parFullName) Set PagePar = Workbooks(parName).Sheets("Page1") на последней строке выдает ошибку: Run-time error 9 Subscript out of range Не пойму, что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 10:57 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Уточню вопрос: Как правильно присвоить переменной PagePar ссылку на рабочую страницу для aFile? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 11:10 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37Подскажите, как правильно присвоить переменной SET ссылку на рабочую страницу для aFile ? Делал так: ..... Dim parName As String Dim parFullName As String Dim PagePar As Object .... For Each aFile In fso.GetFolder(sRootFolder).Files ... parFullName = aFile parName = Dir(parFullName) Set PagePar = Workbooks(parName).Sheets("Page1") на последней строке выдает ошибку: Run-time error 9 Subscript out of range Не пойму, что не так? 1. Ты присваиваешь перемменной типа String переменную типа File: Код: plaintext 1. 2. В цикле Код: plaintext 1. Код: plaintext 1. 2. Объяви переменную PagePar как Worksheet. Зачем Object??? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 11:14 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, С пунктом 1 ответа - в челом теперь понятно. А вот с п.2 - вообще запутался! Как же тогда будет выглядеть строка Set PagePar = ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 11:26 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Зачем тебе функция Dir? Ты же в цикле уже забрал все файлы. Свойство Name возвращает только имя файла с расширением, а функция Path - полный путь. Я так понял, ты хочешь сослаться на лист в экселевском файле. Тогда тебе его надо будет открыть сначала, а потом делать ссылку. Где-то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 11:42 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Ты как в мой монитор смотришь! ;) Правильно догадался о моей задаче... Что значит опыт. Огромное спасибо - сработало!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 11:58 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, И открывает файлы, закрывает. Это для меня новый метод - раньше несколько по другому всё это делал. Чесно говоря, болше по размеру получалось. Ещё раз огромное спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 12:00 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Да не за что! :) Пиши, если что! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 12:17 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Кстати, можно сделать код на строчку короче, если учесть, что метод Workbooks.Open возвращает объект Workbook. Тогда вместо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. можно написать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. На одну строчку короче! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 12:35 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Тогда уж на 2 строки короче - в описании (1- в шапке) и в теле цикла ещё -1. Спасибо за подсказку! ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 12:58 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, А вот ещё короче. :) Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 13:18 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinAlex37, А вот ещё короче. :) Код: plaintext 1. 2. 3. 4. 5. Да, здорово - короче уже некуда. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 13:58 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Можно ещё короче! Код: plaintext 1. 2. 3. 4. 5. 6. :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 14:37 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Да, нет границ в вариантности. ;) Но с записями слабо знаком, небыло необходимоти как-то... А как проще проверить, есть ли данные в текущей строке листа Excel? Смотрю на имеющиеся XLS-файлы с данными (из которых я отбираю нужные мне данные чтобы запихать их в итоговые файлы) и балдею - после одной строки с данными может быть 3-8 пустых строк, далее строка с данными и опять несколько пустых и т.д. Думаю в цикле проверять нужные ячейки, оператором If и если равно "" пропускаю строку нет - обрабатываю Опять же, неизвестно заранее, сколько строк всего в документе. Считать сколько пустых строк подряд идут? Типа, больше 100, то документ точно кончился! Должна быть какая-то хитрость! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 15:44 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Ты скажи конкретно, какой критерий "пустоты". Можно искать пустые ячейки в цикле по конкретному столбцу (например, "B" - в этом случае за один цикл проверятеся одна ячейка) или же ты хочешь проверить несколько ячеек в данной строке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 16:12 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Данные расположены в столбцах 3 5 8 11 15 Проверять достаточно по одному, любому столбцу - если есть в этом столбце, то и в других столбцах данной стоки данные точно будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 16:20 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Посмотрел как люди делают, используя For Each... Правда найденный пример - не мой случай, но идея есть этот оператор приспособить, если получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 16:23 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Для твоего случая нужно использовать For...Next, и насколько я понимаю, нижнюю границу цикла ты определить динамически не сможешь. Тогда задавай вручную - приблизительно прикидываешь, какой максимально может быть граница, и прибавляешь ещё пару десяток строк для пущей уверенности. :) Например, так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 17:12 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37Думаю в цикле проверять нужные ячейки, оператором If и если равно "" Это типичная ошибка на проверку пустых ячеек. Поясняю на примере. Вот, у тебя в ячейке C1 стоит формула =ЕСЛИ(A1>10;5;"") . Тогда, согласно формуле, если в ячейку A1 поставить 4, то в ячейке C1 ничего не будет показано, так как мы задали "" - пустоту. НО! Это НЕ ПУСТАЯ ячейка, потому что в ней текст (формула), и, следовательно, твоя проверка в VBA: Код: plaintext 1. Вывод: для проверки пустых ячеек ВСЕГДА используй VBA функцию IsEmpty. Небольшой секрет: если ты в модуле наберёшь VBA и нажмёшь точку, то выпадут все функции, которые есть в VBA. Только никому не говори! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 18:03 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinAlex37, Для твоего случая нужно использовать For...Next, и насколько я понимаю, нижнюю границу цикла ты определить динамически не сможешь. Тогда задавай вручную - приблизительно прикидываешь, какой максимально может быть граница, и прибавляешь ещё пару десяток строк для пущей уверенности. :) Например, так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Спасибо. Я примерно так и делал, но как уже писал выше проверку делал так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 18:58 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinAlex37Думаю в цикле проверять нужные ячейки, оператором If и если равно "" Это типичная ошибка на проверку пустых ячеек. Поясняю на примере. Вот, у тебя в ячейке C1 стоит формула =ЕСЛИ(A1>10;5;"") . Тогда, согласно формуле, если в ячейку A1 поставить 4, то в ячейке C1 ничего не будет показано, так как мы задали "" - пустоту. НО! Это НЕ ПУСТАЯ ячейка, потому что в ней текст (формула), и, следовательно, твоя проверка в VBA: Код: plaintext 1. Вывод: для проверки пустых ячеек ВСЕГДА используй VBA функцию IsEmpty. Небольшой секрет: если ты в модуле наберёшь VBA и нажмёшь точку, то выпадут все функции, которые есть в VBA. Только никому не говори! :) В обрабатываемых документах только данные содержатся, никаких формул, поэтому и решил делать проверку, как указал выше. Да и не знал про функцию IsEmpty. Теперь - знаю, спасибо! ;) VBA c точкой, про такое не знал. :) Если без бумажных справочников - то незаменимо. Все же ХЕЛР мне в 2003 офисе не очень нравится. В 97-м был неплох... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2011, 19:09 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Хотел персонально поблагодарить тебя за оказанную помощь! А так же спасибо всем, принимавших участие в этой беседе. Узнал много нового для себя, взял на вооружение. Программа готова, сдана на тестирование в производственный отдел. Все работает отлично! Ура, товарищи!!! Или господа?! Нужное подчеркнуть. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 09:10 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=37198697&tid=2177009]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
402ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 196ms |
| total: | 691ms |

| 0 / 0 |
