Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA

Модерирует : ShIvADeSt

ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

RUSmafia



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов

  • Всего записей: 556 | Зарегистр. 31-07-2002 | Отправлено: 21:40 14-10-2004 | Исправлено: lucky_Luk, 20:44 13-04-2007
    evsino

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    да по поводу как EXCEL создает папку ничего не получилось
    ну да ладно вопрос решим по другому
    а во вопросец по серьезнее
    сам я сисадмин и програмер слабенький НО МНЕ ОЧЕНЬ ОЧЕНЬ НАДО вот это
    Открываем новую книгу жму копку и пожалуйста
    есть директория где лжат примерно 5000 папок (обращать внимание,что в этих папках есть еще папки ненадо). Таких директорий у меня с 10 и заставляют перебирать ручками
    Просто маразм ПРОШУ СРОЧНО ПОМОЩИ СПЕЦИАЛИСТОВ ПО VBA
    в каждой папке точно есть файл .xls
     1 задача создать список папок в которых лежит только 1 файл EXCEL (там могут быть и другие файла)
    2 создать список листов файлов EXEL  
    3 все папки с 1 файлом EXCEL вырезать из директории и поместить в папку1, которая лежит в исследуемой директории
    4 создать список папок в которых есть по 2 файла EXCEL
    5 вырезать эти папки из обследуемой директории и поместиь их в папку 2 в этой же директории
    и 6 создать список папок где находятся более 2 файлов EXCEL
     
    Добавлено:
    ну и зачем меня модератору ругать
    ведь никто не помог
    та только отписка
    да и задача несколько изменилась
    я же все таки обращающь с специалистам а не к дедушке на деревню
     
    да по поводу как EXCEL создает папку ничего не получилось
    ну да ладно вопрос решим по другому
    а во вопросец по серьезнее
    сам я сисадмин и програмер слабенький НО МНЕ ОЧЕНЬ ОЧЕНЬ НАДО вот это
    Открываем новую книгу жму копку и пожалуйста
    есть директория где лжат примерно 5000 папок (обращать внимание,что в этих папках есть еще папки ненадо). Таких директорий у меня с 10 и заставляют перебирать ручками
    Просто маразм ПРОШУ СРОЧНО ПОМОЩИ СПЕЦИАЛИСТОВ ПО VBA
    в каждой папке точно есть файл .xls
     1 задача создать список папок в которых лежит только 1 файл EXCEL (там могут быть и другие файла)
    2 создать список листов файлов EXEL  
    3 все папки с 1 файлом EXCEL вырезать из директории и поместить в папку1, которая лежит в исследуемой директории
    4 создать список папок в которых есть по 2 файла EXCEL
    5 вырезать эти папки из обследуемой директории и поместиь их в папку 2 в этой же директории
    и 6 создать список папок где находятся более 2 файлов EXCEL

    Всего записей: 26 | Зарегистр. 13-11-2006 | Отправлено: 22:01 26-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    evsino

    Цитата:
    да по поводу как EXCEL создает папку ничего не получилось

    Что, конкретно, не получилось?
     

    Цитата:
    сам я сисадмин и програмер слабенький НО МНЕ ОЧЕНЬ ОЧЕНЬ НАДО вот это

    Тогда Вам может быть сюда? http://forum.ru-board.com/topic.cgi?forum=33&topic=2395#1
     
    так как см. "шапку" раздела -

    Цитата:
    Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
    Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)

     
     
    Добавлено:
    kiVAR
     
    Cells(i, 3&).Formula = "=" & CStr(Cells(i, 3&).Value) & "+" & _
                           Cells(i, 1&).Address & "-" & Cells(i, 2&).Address

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 03:46 27-03-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    evsino
    Цитата:
    3 все папки с 1 файлом EXCEL вырезать из директории и поместить в папку1
    а что значит "вырезать" ? Скопировать в папку с именем "ПАПКА1" ?
    а то, что там могут быть ещё файлы (по вашим же словам) и подпапки? что с ними делать?
     
    честно говоря, мне кажется что задача сама по себе безумная...
    и вообще, я бы её делал не в VBA (а, например, на Дельфи ;-))))

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 10:25 27-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Ну, уж сразу и Дельфи
     
    Подключаем Microsoft Scripting Runtime (как уже товарищу писали, чтоб проще методы вводить)
    Set fso = New Scripting.FileSystemObject
    'Получаем ссылку на корневую "супер 5000 подпапок" папку
    Set pRootFolder = fso.GetFolder(sRootPath)
    'Циклом по подпапкам
    For Each pFolder In pRootFolder.SubFolders
       'Проверяем, не является ли текущая подпапка одной из 3 назначения
       ...
       'Если нет, то циклом по файлам, создав коллекцию для хранения xls файлов
       Set pXlsCol = New Collection
       For Each pFile In pFolder.Files
          'Проверяем расширение и если xls, то добавляем в коллекцию
          If LCase$(fso.GetExtention(pFile.Name)) = "xls" Then
             pXlsCol.Add pFile
       ...
       Next pFile
       'Далее проверяем число файлов в коллекции и переносим в соответствующую папку
       If pXlsCol.Count = 1& Then
          fso.MoveFile pXlsCol.Item(1&).Path, pFolderFor1.Path & "\" & pFile.Name
       ...
    Next pFolder
    'Собственно после окончания сканирования подпапок, сканируем папку, куда складывали
    'одиночные xls файлы, открываем их, составляем список листов и т. д.
     
    Товарищ хоть бы попробовал (хоть объяснил где, куда, чего - ещё админ)
         

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 14:10 27-03-2007
    Oyger

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
     
    Спасибо за ответ, но вопрос был другой:
    Цитата:
    Как научить Shell понимать русские символы?

    Как решить подобную задачу другими способами - я знаю. Но сама цель: может ли Shell "понять" русский? Это же вопрос я задаю Вам, товарищи профи.

    Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 15:24 27-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Oyger
     
    i = Shell("cmd /c del d:\temp\1\я_те*.txt /F /Q")
     
    У меня удаляет без проблем. Файлы были "я_текст1.txt" и "Я_текст2.txt"

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 03:41 28-03-2007 | Исправлено: AndVGri, 03:50 28-03-2007
    Oyger

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
     
    Я не знаком с cmd. Да и не могу на компе найти cmd.exe
    У меня винда 98. Что посоветуешь? можно ее отдельно скачать и чтоб работала?
    Или еще что хорошего предложишь?

    Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 13:06 28-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Oyger
     
    Х-м. У меня WinXP. Увы, command там то же есть, но он тоже удаляет без проблем. cmd в 98 не пойдёт.  
    Возможно, для решения задачи необходимо перекодировать название файлов в DOS кодировку, но у 98 command понимает только 8 символьные названия, а длинные надо форматировать в вид имфайл~1.txt, для примера.
    Всё таки, если не секрет, чем не устраивает FileSystemObject?

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 13:55 28-03-2007 | Исправлено: AndVGri, 14:15 28-03-2007
    Oyger

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
     
    Не секрет. Задачу, которую я привел - одна из нескольких. Есть и другие. Вот, к примеру, задача посложнее.
    Есть папка. В ней около 30 файлов с данными. Надо их слить в один. Причем делать это надо каждый день. Это элементарно делается батником:
    copy a.??? /A + b.??? /A c.??? /V
    Или еще одна: есть файл большого размера - книга Екселя. Ее надо разрезать на кусочки приемлемого размера и разослать по Оутлуку. С рассылкой - все понятно. А режу я раром - заодно и размер уменьшается и проблем с соединением во едино частей нет. Рар - через бат. А бат - русский путь. Опять же.
    Много, в общем, макросов завязано на функции батников. Можно броситься их переписать на язык ВБА, а можно в ВБА прописать батники, но для этого надо научиться их запускить из русскоязычных берикторий. Что и пытаюсь сделать.
    А пока у меня на рабочем экране есть ярлыки антников. А работа выглядит следующим образом. Запускается макромс. Работает, работает. Потом выкидывает окно: "запустите такой-то бат". Ты его запускаешь. Он отрабатывает и ты жмешь "ок" в окне макроса. Тогда он заканчивет свое тело.
     
    Да к тому же, я сторонник такой методики: если пользоваться только тем, что знаешь, то не будешь расти. Постоянно ищи новые пути решения.
     
    Не утомил?
    Так что если есть еще пердложения - как научить shell понимать русский под 98 виндой - буду рад услышать.

    Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 15:12 28-03-2007
    evsino

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    по поводу 5000 папок
    есть директория например "ARCHIVE1"  ее имя в макрос можно и ручками ввести
    в этой дирректории я создаю  папки "1,2" таких папок в этой дирректории точно нет
    папки там типа "1123-23"
    т.е. директории с одним знаком в имени не нужны для анализа
    начинаем сканирование дирректории
    открываем первую попавшую папку и видим там всего 1 файл EXEL
    считываем имя папки имя папки заносим в список1 папку закрываем затем ее вырезаем и ложим ее в дирректорию 1 и опять берем следующую папку итд
    мне надо отдельный список имен папок где 1 файл excel
    отдельный список имен папок где 2 файла excel
    + где всего 1 или 2 файла excel лежали в дирректориях 1 и 2
    папки где более 2 файлов excel пусть остаются в ARCHIVE1
    далее надо получит список листов файлов excel издирректории1
    дело в том что файлы excel в дирректории1 могут быть разными с разным кол-вом листом
    и мне предстоит их дальнейшая сортировка
    о ней уже молчу и вообще там еще задач с этим архивом огого
    да и архив не один
    Помогите конкретно
    мне весь макрос нужен а не куски и рекомендации
    ну пожалуйста бога ради а то хоть помирай
     

    Всего записей: 26 | Зарегистр. 13-11-2006 | Отправлено: 15:31 28-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Oyger
    Ну, не знаю. Запускать BATники из-под Excel VBA и не пользоваться его средствами, и ActiveX: Scripthing, RegMatch, Windows Scripting Host. Последний, кстати, позволяет нормально запускать программы, с Rar проблем не будет.

    Цитата:
    Постоянно ищи новые пути решения.
    вот собственно и переходи на это. Головная боль, конечно, переделывать. Может хотя бы Win2k поставить?

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 16:42 28-03-2007
    kiVAR

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пишу следующее:
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim i As Integer
    For i = 2 To 10
    If IsNumeric(Cells(i, 3&).Value) And IsNumeric(Cells(i, 1&).Value) And IsNumeric(Cells(i, 2&).Value) Then
     Application.EnableEvents = False
     Cells(i, 3&).Formula = "=" & CStr(Cells(i, 3&).Value) & "+" & _
                           Cells(i, 1&).Address & "-" & Cells(i, 2&).Address
       Application.EnableEvents = True
       End If
    Next i
    End Sub
    Каждый раз когда начинаю вводит данные в ячейки все значения пересчитываются заново, причём как-то косячно. Как сделать, чтобы в результирующей ячейки(например С2) данные хранились пока не будут изменены ячейки этой строки(А2 и В2). И при изменении добавлялось или отнималось только то значение, которое было введено.(если ввели в В2 то отнимаем от текущего значения В2, а А2 не учитываем )  

    Всего записей: 10 | Зарегистр. 26-03-2007 | Отправлено: 17:13 28-03-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Oyger
    Цитата:
    Так что если есть еще пердложения - как научить shell понимать русский под 98 виндой - буду рад услышать.

    а можно ещё раз конкретно привести команды, которые НЕ работают?
    Может Вам проще всё таки обойтись БЕЗ русского языка?

    Цитата:
    Да к тому же, я сторонник такой методики: если пользоваться только тем, что знаешь, то не будешь расти. Постоянно ищи новые пути решения.  
    И это говорит человек, использующий Win98... может вам хотя бы на Windows2000 перейти?! (это линейка NT - она намного лучше и устойчивей, чем Win 9x)
     
    и вообще, хоть убейте меня, я не понимаю, при чём здесь Excel...
     
     
     
    Добавлено:
    kiVAR
    Цитата:
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)  

    можно в лоб:
    If Target.Address = "$B$2" Then
      изменилось значение в B2
      ....
    end if
    If Target.Address = "$A$2" Then
      изменилось значение в A2
      ....
    end if

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 17:17 28-03-2007
    Oyger

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    SERGE_BLIZNUK

    Цитата:
    Может хотя бы Win2k поставить?

     
    Это уже не ко мне, а к службе обеспечения - что поставили, на том и работаю.
    Может скоро и XP поставят =)

    Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 17:25 28-03-2007
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kiVAR
    Перенеси строки с Application.EnableEvents ис цикла в самое начало функции и в самый конец.
    Добавь в начало  
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    с восстановлением в конце.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:13 28-03-2007
    FotIG

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    как можно реализовать выборку из результатов футбольного календаря, расположенного на одном листе и распределения на другом листе с определенным набором символов (типа кода) в зависимости от значения результата игры ?
    средствами самого EXCEL пытался что-то сделать несколько десятков раз, в конечном итоге создавал путаницу и .....
    в литературе подобного найти не смог .... в примерах финансовых выборок и по работе с базами данных аналогий то же не нашлось ....
     
    прикрепил файл Excel с примером двух листов - НО как наладить взаимосвязь из первого листа во второй - может кто сможет помочь?
     
    hxxp://fotig.stsland.ru/football.xls (94 Kb)
     
    буду признателен даже за совет в каком направлении можно реализовать эту задачу ...

    Всего записей: 29 | Зарегистр. 08-04-2002 | Отправлено: 10:19 29-03-2007
    Oyger

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как запустить командную строку (то, что называется "выполнить...") в Винде 98? Какой файл за нее отвечает?

    Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 10:41 29-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FotIG
    В принципе, сделал при помощи формул и расширенного фильтра. Подробнее на "Лист3".
    Выложил здесь

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 12:06 29-03-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Oyger
    Цитата:
    Как запустить командную строку (то, что называется "выполнить...") в Винде 98? Какой файл за нее отвечает?
    ну вообще от темы (в оффтоп) ушли...
    command.com
    например,
    C:\WIN95\command.com /C COPY C:\TP\PAS\file1.exe C:\TT\filecopy.exe

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 13:50 29-03-2007
    FotIG

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndVGri !!!!!!!!!!!!!!!
     
    СПАси тебя БОг !!!!!!!!!!!  
     
    ))))))))))
     
    все просто отлично !!!

    Всего записей: 29 | Зарегистр. 08-04-2002 | Отправлено: 14:03 29-03-2007
       

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA
    ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru