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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа,
     
    Помогите найти ресурс, где бы можно было прочесть что-то про экспорт таблиц из Excel в Access с помощью VBA. Уж больно часто возникает эта задача, а документации по подобным вопросам в сети - никакой...

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 12:43 13-12-2006 | Исправлено: mrdime, 12:44 13-12-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи, дайте хотя бы ссылку, где можно скачать нормальный контрол типа листбокса, чтобы там можно было с сеткой работать. А то создавать собственный как-то не хочется - наверняка уже кто-то делал.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 13:19 13-12-2006
    Anton T

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Господин-профессионалист Yuk!
    Вот сделал немного пример:

    Код:
    Private Sub UserForm_Initialize()
    Dim strAA As String
    Dim ls As Worksheet
        For Each ls In Worksheets
            strAA = ls.Range("A1") 'Application.WorksheetFunction.CountA(ls.Range("A:A"))
            ListBox1.AddItem strAA
        Next
    End Sub
     

    ls.Range("A1") определение 1 строк в каждом листе. Елси заменить ls.Range("A1") на ls.Range("A:A") выдает с ошибкой Type Mismatch. Некоторые аргументы - исправил, не получается.
     
    А в Application.WorksheetFunction.CountA(ls.Range("A:A")) - это кол-во строк в записе(аналогична как счетчик), например, в листе буква а - всего 20 записей, б - 33, в - 12 и т.д.

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:27 13-12-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Anton T
    а ты точно ТАК код написал? Просто в таком виде
    Цитата:
     
    strAA = ls.Range("A1") 'Application.WorksheetFunction.CountA(ls.Range("A:A"))  

    'Application.WorksheetFunction.CountA(ls.Range("A:A")) должно восприниматься, как комментарий . Следовательно, остается строка кода: strAA = ls.Range("A1")
    Если в ней меняем A1 на А:А (кстати, проверь - чтобы были латинские), Range уже не прокатит, поскольку будет в качестве результата давать не ячейку (читай - value, которое приводится к строковому типу), а именно Range (столбец), который не приводится к строковому типу .
     
    В общем, процитируй код В ТОЧНОСТИ, как он у тебя записан в VBA.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 13:38 13-12-2006
    Anton T

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

    Цитата:
    должно восприниматься, как комментарий  

    знаю, если убрать апостроф и
    Цитата:
    ls.Range("A1")
    и видишь.

    Цитата:
    Если в ней меняем A1 на А:А (кстати, проверь - чтобы были латинские)

    все латинские.

    Цитата:
    (читай - value, которое приводится к строковому типу), а именно Range (столбец), который не приводится к строковому типу  

    а понял, продложение следует...

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:47 13-12-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Anton T
    не факт, что правильно понял мысль, но попробуй так:
    Код:
     
    strAA = CStr(Application.WorksheetFunction.CountA(ls.Columns(1)))

    Суть: в качестве аргумента функции СЧЕТ (она же CountA) берем первый столбец выбранного листа. Полученное функцией СЧЕТ число преобразуем к строковому типу.
    Но это именно функция СЧЕТ. На выходе имеем количество полей столбца А, содержащих число. Если нужно именно количество задействованных строк в столбце, нужно использовать метод .Rows.Count.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 14:13 13-12-2006 | Исправлено: The okk, 15:37 13-12-2006
    Radeon9800Pro

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Огромное спасибо! Все великолепно работает надеюсь, если у меня еще появятся вопросы - я смогу их задать

    Всего записей: 18 | Зарегистр. 12-03-2004 | Отправлено: 16:11 13-12-2006
    aalleexxaa



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    еще вопрос:
     
    для правильного запроса пишем:

    Код:
    sSQL_t = "SELECT * FROM tovar where tovar.***=" & c1

    в c1 хранится нужное искомое значение
     
    а если нужно 2 и более, как написать
     

    Код:
    sSQL_t = "SELECT * FROM tovar WHERE tovar.***= And tovar.*** =" & c1 & c2

    не работает, не правильный синтаксис
     
    Добавлено:
    если построить запрос аксесом, и скопировать потом (естественно подправив) то тоже не работает

    Всего записей: 16 | Зарегистр. 09-07-2006 | Отправлено: 21:18 13-12-2006
    Yuk



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

    Цитата:
    естественно подправив

    А если не подправлять? Или подправить неестественно
     
    В общем, рекомендую подучить SQL.
     
     
     
    Добавлено:
    mrdime
    В Access можно экспортировать любую таблицу/запрос в Excel.
    Если нужно экспортировать много таблиц или все, можно записать макрос.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:38 13-12-2006 | Исправлено: Yuk, 21:39 13-12-2006
    Widoms



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет
     
    есть строчки .и.т.д
       8426 УСТАНОВКА 2                                                      32988576,00
                                                                                          18289440,32
    160360 УCTAHOBKA 1                                                         639191,00
                                                                                              551819,16
     
    как итог подсчитать по строкам где есть наименование и где нету.
    Подскажите макрос.

    Всего записей: 378 | Зарегистр. 09-01-2004 | Отправлено: 05:06 14-12-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Widoms
    Пустые можно подсчитать так:
    =СУММЕСЛИ($A$1:$A$4;"";$B$1:$B$4)
     
    А непустые ... ну, например, вычесть итог по пустым из общей суммы.
    Или обязательно надо макрос?

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 07:50 14-12-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Ты с ListView случайно не работал? Из того, что у меня под рукой, только этот контрол делает на форме список с границами.
    Как тут добавлять/удалять элементы?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 08:01 14-12-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    Неа. Посмотри в гугле, полно примеров, если это он самый, конечно.
     

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 08:09 14-12-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Искал я в гугле. Только, когда открываю в обжект броузере этот ListView, не вижу там ни LV_add, ни ListViewItem, ничего, хотя бы отдаленно напоминающего add. Также тут нет ни намека на source и Items. Полный тупик.
     
    Добавлено:
    Стоп. Нашел . ListItems у него есть, а уж в нем Item'ы прячутся.
     
    Добавлено:
    Yuk
    А не знаешь, можно сделать список значений из ссылок? - Чтобы при выборе (данные-проверка-список значений) в ячейке выбиралось бы не конкретное значение, а ссылка?
    Т.е., например, столбец состоит из записей:
    значение1
    значение2
    значение3
    Если при проверке данных сослаться на этот столбец, подставляться будет именно значение, а я хочу, чтобы подставлялась ссылка на ячейку, где лежит это значение.
    Это возможно?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 08:45 14-12-2006 | Исправлено: The okk, 09:55 14-12-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
     
    "Штатных" средств для экспорта таблиц из Excel в Access нет. Есть надстройка AccessLink, но по ряду причин она мне не подходит.  
    Задача состоит в следующем: Есть таблицы с полностью одинаковой структурой в Excel которые периодически необходимо экспортировать в Access. В Access создан набор запросов который нужным образом анализирует данные из этих таблиц. Для этого мне необходимо хотя бы узнать синтаксис основных команд по созданию таблиц, баз Access из Excel на VBA.

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 11:12 14-12-2006 | Исправлено: mrdime, 11:13 14-12-2006
    Anton T

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    The okk
    Я понимаю, но мне счет не нужен, а список строк имени.
    Yuk
    Как думаешь сделать список имен? Если не трудно, пиши.

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 11:47 14-12-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Anton T
    Что такое "список строк имени"?
     
    Добавлено:
    Изучаю контрол ListView. Хорошая вещь. Кому не хватает ListBox'а - рекомендую. Кто-нибудь знает, как сюда добавить сразу диапазон ячеек, а не по одной их втыкать через ListItems.Add?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:54 14-12-2006
    Anton T

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mrdime
    Создай модуль КЛАССА и имением:
    CSVFileClass
    Создай стандартный модуль:
    Модуль
    Они експортирует/импортирует файлы DBF, но не все листы, тольно один лист! Попробуй после експорт, запусти в акссес и импортируйте из файла temp.dbf
     
    Найти в классе FileFormat:=xlDBF4 и выберите какие форматы, чтобы экспортировать:  
    FileFormat
    Все форматы есть в справочнике в екселе.
    З.Ы. Ексел не експортируют Аксесс(mdb)!  
     
    Добавлено:

    Цитата:
    Что такое "список строк имени"

    См. стр 57 я написал. Отображать все списки в каждом листе.

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:59 14-12-2006 | Исправлено: Anton T, 14:04 14-12-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Anton T
    хм... прочитал. Есть листы с названиями от А до Б. там в первом столбце фамилии, начинающиеся с это буквы. Надо вывести список всех фамилий. Так?
    А в чем проблема? Твой код именно это и делает.
    Только вместо обращения к первой ячейке (A1) надо пройтись по всем ячейкам:
    Код:
     
    Private Sub UserForm_Initialize()
     
    Dim strAA As String
    Dim RowCounter As Long
    Dim ls As Worksheet
     
    For Each ls In Worksheets
        For RowCounter = 1 To ls.UsedRange.Rows.Count
            strAA = ls.Cells(RowCounter, 1)
            ListBox1.AddItem strAA
        Next
    Next
     
    End Sub
     

    Тут вместо первой ячейки - проход по всем ячейкам первой колонки.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 15:14 14-12-2006 | Исправлено: The okk, 15:18 14-12-2006
    mrdime



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

    Цитата:
    З.Ы. Ексел не експортируют Аксесс(mdb)!  

    Ты не прав.
     
    http://www.citforum.ru/programming/digest/excel_vba.shtml#3
     
    К сожалению этот кусок кода у меня почему-то не работает, но очевидно из-за того, что я сразу переделал его под свои нужды и что-то не учел или же он со старта написан с ошибками.
    Вопрос остается открытым...

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 15:23 14-12-2006 | Исправлено: mrdime, 15:24 14-12-2006
       

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