|
|
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые гуру! Есть программа на VBA в Excel-е, которая открывает другой xls-файл (2) с данными, обрабатывает их и создает третий xls-файл (3). Файл (2) раньше всегда подавался со стандартным, одним и тем же, именем "Набор.xls". Теперь ситуация поменялась, необходимо приписывать к имени файла число, типа: "Набор-1200.xls" "Набор-1201.xls" "Набор-1202.xls" ... число в имени будет постоянно увеличиваться, а количество файлов, поступающих на обработку, будет разное. Возможно, не всегда цифры будут увеличиваться на единицу. На выходе должны получаться файлы: "Итог-1200.xls" "Итог-1201.xls" "Итог-1202.xls" ... Цифры из имени файла (2) добавляются к имени файлу (3) - это сделать просто. Подскажите, как лучше поступить в данной ситуации? В голову ничего не приходит, кроме как сделать диалог для открытия файла (как это делается в стандартном меню: Файл - Открыть - появляется окно, в котором можно выбрать нужный файл и нажать кнопку "Открыть" или "Отмена"). Что-то типа: Код: plaintext 1. 2. Office 2003 SP2 Rus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 10:38 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Неоходимо сделать ссылку на библиотеку Tools -> References -> Microsoft Scripting Runtime. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 11:30 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinAlex37, Неоходимо сделать ссылку на библиотеку Tools -> References -> Microsoft Scripting Runtime. Это в настройках редактора VBA? Включил. Но и без него работало почему то... YudzhinAlex37, Неоходимо сделать ссылку на библиотеку Tools -> References -> Microsoft Scripting Runtime. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 11:49 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Спасибо, сейчас попробую по вашей методике сделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 11:53 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Поправочка. Функция ничего не возвращала и исправил "Набор" на "Итог" :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 12:03 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, я бы сделал список файлов в папке, заполняемый с помощью функции Dir и оттуда бы уже доставал файлы для обработки. Плюс хотя бы в том, что меньше действий для юзера и не нарушается логика интерфейса посторонними окнами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 12:04 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinAlex37, Поправочка. Функция ничего не возвращала и исправил "Набор" на "Итог" :) Код: plaintext 1. 2. 3. 4. 5. 6. Да, путаницу с Набором и Итогом я заметил, спасибо. А с кодом я поломал бы голову! ;) Не сразу бы понял, в чем дело. Ещё раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 12:21 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
mds_worldAlex37, я бы сделал список файлов в папке, заполняемый с помощью функции Dir и оттуда бы уже доставал файлы для обработки. Плюс хотя бы в том, что меньше действий для юзера и не нарушается логика интерфейса посторонними окнами. Тоже интересная мысль. Да и для пользователей все свелось бы к нажатию один раз на кнопку. А как это реализовать? В цикле просмотреть указанную в коде папку на наличие файлов "Набор-*.xls" (не совсем понимаю, как это осуществить). Номера - в массив. Обработать данные - сохранив в массив. Создать итоговые файлы, закачать в них данные из массива, добавить к имени номер - сохранить. Или проще создать список файлов Набор-*.xls (не знаю, как это делается). Потом поочередно их открывать и обрабатывать. Так лучше будет - меньше памяти используется. Можно пример простой посмотреть как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 12:33 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, 1. Указываешь папку, где лежать "наборные" файлы 2. Прога ищет папку "NewFiles" в папку с твоими "наборными" файлами. Если есть, то удаляет её с потрохами. 3. Создаёт папку "NewFiles". 4. Ищет файлы с расширениями xls, xlsx, xlsm, xlsb. 5. Если находит, выдирает номер "набора" и создаёт полный путь к новому файлу в папке "NewFiles". 6. Копирует "наборный" файл в "итоговый" файл в папке "NewFiles". Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 12:34 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Пропустил объявление переменной fName: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 12:41 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Скриншот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 12:47 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinAlex37, 1. Указываешь папку, где лежать "наборные" файлы 2. Прога ищет папку "NewFiles" в папку с твоими "наборными" файлами. Если есть, то удаляет её с потрохами. 3. Создаёт папку "NewFiles". 4. Ищет файлы с расширениями xls, xlsx, xlsm, xlsb. 5. Если находит, выдирает номер "набора" и создаёт полный путь к новому файлу в папке "NewFiles". 6. Копирует "наборный" файл в "итоговый" файл в папке "NewFiles". Код: 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. В целом понятно. А маску к имени можно применить? Дело в том, что я задачу упростил, а реально в папке с программой ещё несколько xls-файлов лежат, которые являются "общими" для всех "наборных" файлов - часть инфы берется и из них и прописывается в "итоговые" файлы. Маска бы помогла отсеять ненужное. Или действительно, прийдется создавать вложенную папку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 12:51 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinAlex37, Пропустил объявление переменной fName: Код: plaintext 1. Да, выдало ошибку - прописал, все ОК! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 13:01 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinAlex37, ....... For Each aFile In fso.GetFolder(rootFolder).Files sExtension = fso.GetExtensionName(aFile.Name) If sExtension Like "xls*" Then ........ End Sub Срабатывание If sExtension Like "xls* оказывается зависит от регистра! Кто бы подумал! :) Случайно один из файлов был с расширением XLS (прописными буквами). Его-то и пропустил цикл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 13:06 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, "прийдется создавать вложенную папку." Вложенная папка создаётся для того, чтобы там собирались "итоговые файлы". Ты можешь создать любую папку (переменная subFolder ). Сначала прога находит чисто экселевские файлы. После того, как она нашла экселевский файл, мы вытягиваем из него название без расширения (переменная fName ). Вот тут ты и можешь применить маску - оператор Like . Посмотри по документации поподробней. Вот пример (переменная sMask ): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 13:10 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Чтобы не пропускались "XLS", в самом верху модуля под Option Explicit напиши Option Compare Text ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 13:12 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
YudzhinYudzhin, Чтобы не пропускались "XLS", в самом верху модуля под Option Explicit напиши Option Compare Text Понял! Помогло. Огромное спасибо всем за неоценимую помощь!!! Узнал для себя много интересного и нового. Сегодня же начну переделывать программу. А то меня уже на работе запинали... ;) Но не прощаюсь! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 13:30 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Пиши! На всякий случай вот тебе ссылка на справку формате chm о FileSystemObject. С тех пора, как я узнал про Windows Scripting, больше никогда не пользовался стандартными средствами VBA. :) Windows Script 5.6 Documentation http://www.microsoft.com/downloads/en/details.aspx?familyid=01592c48-207d-4be1-8a76-1c4099d7bbb9&displaylang=en Windows Script 5.7 for Windows XP http://www.microsoft.com/downloads/en/details.aspx?FamilyID=47809025-d896-482e-a0d6-524e7e844d81&displaylang=en ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 13:48 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Спасибо. А я по старинке, на Турбо Паскале компилирую ЕХЕ-ник с нужной начинкой. Но возможностей и знаний все равно не хватает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 14:05 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, С FileSystemObject приятно работать. Тем более что если в VBE сделать ссылку на библиотке Microsoft Scripting Runtime, то заработает AutoComplete - будут выпадать все свойства и методы. Удобно! Но можно и late binding с помощью CreateObject, но тогда AutoComplete'a не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 14:34 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Кстати, небольшое уточнение. Если у тебя есть ещё символ "-" в названии файла, то лучше воспользовацо функцией 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. 76. 77. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 15:07 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Работать с FileSystemObject интересно. Посмотрел справочник - свойств много! Надо будет взять на вооружение. Жалко, что не поддерживает доступ к двоичным файлам. Иногда бывает надо. А как легко текст набивать, типа: Код: plaintext 1. 2. 3. 4. Ещё раз огромное спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 15:40 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, А зачем ты используешь CreateObject? Нет, ну если ты будешь писать на VBScript, то я согласен. В VBScript - это единственный способ, а вот в VBA ты потеряешь AutoComplete! Лучше сделай в VBE ссылку на библиотеку - и увидишь все свойства и методы. Так проще, чем рыться в справке, да и можешь ошибицо при наборе. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2011, 16:42 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Yudzhin, А как применять fso.OpenTextFile? Пытался открыть файл так: Код: plaintext Код: plaintext Использование Код: plaintext Хотелось бы понять , что что же все-таки делает fso.OpenTextFile, как и когда его применять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2011, 11:49 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#18+
Alex37, Читаем текстовый файл и выводим содержимое на экран. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2011, 12:26 |
|
||
|
Диалог- "Открыть файл"
|
|||
|---|---|---|---|
|
#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?all=1&fid=61&tid=2177009]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
205ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
106ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 572ms |

| 0 / 0 |
