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

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

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

    Цитата:
    посмотрел, и кажется понял, что вы хотите получить... ))  
    у вас сверху вниз  
     
    Код:  
      данные 1  
    две пустые строки  
      данные 2  
    две пустые строки  
      данные 3  
    ...  
     
     
    а Вам хотите вместо этого  
     
    Код:  
     Данные 1 [Два Пустых столбца ]  Данные 2 [Два Пустых столбца ]  Данные 3 ...  
     
     
    так?  

     
    Да. Именно так. Но сейчас я это уже сделал.
    Теперь у меня немного другой вопрос. Как сделать так,чтобы можно было запустить макрос с того листа, с которого я хочу, и еще,если на этом листе что-то было до запуска макроса, то мой макрос всё это заменял теми данными,которые содержаться в текстовом файле,которые через него открываются?

    Всего записей: 17 | Зарегистр. 22-07-2006 | Отправлено: 17:24 24-08-2006
    DONRU1



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как в Excel отследить программно конец страницы, выводимой на печать? Т.е. последнюю строчку для каждой страницы. И подсчитать количество страниц?  
    Ну не считать же количество строк и их высоту

    Всего записей: 32 | Зарегистр. 19-04-2006 | Отправлено: 20:06 24-08-2006
    sgulinsky



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ya pytayus' otkryt' outline cherez VBA, vot tak:
     
    Dim TheName As String
    Dim i, As Integer
     
    For i = 1 To Sheets.Count
       TheName = Sheets(i).Name
       Sheets(TheName).Unprotect
       Sheets(TheName).Activate
       ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
    Next i
     
    Pochemu-to ShowLevels ne srabatyvaet.  Pomogite pozheluysta - mne nado zastavit' Exel spreadsheet avtomaticheski otkryvat' "+" outline, chtoby user mog vybrat' kolonku v detalyah... a seychas u menya input box vyskakivaet, a detali spryatany i na "+" nel'zya kliknut' vo vremya macro.
    Spasibo,
    Sabina
    sgulinsky@yahoo.com
    sv1423@att.com

    Всего записей: 2 | Зарегистр. 09-08-2006 | Отправлено: 22:43 24-08-2006
    KLERIK2222



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    У меня такой вопрос. Имеется книга Excel с формулами, макросами (далее программа). Как сделать, что бы после установки у пользователя в Excel'e появилась кнопка, запускающая мою прогу?

    Всего записей: 634 | Зарегистр. 29-03-2006 | Отправлено: 09:27 25-08-2006
    divik



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Проблема вот в чем : мы купили 4 сист.блока Селерон 2600(около того)  
    с опер.системой win XP SP2.Установив офис 2003 на них обнаружилась одна проблема:  
    в Exel пишу в ячейке число больше нуля с тремя цифрами после запятой , а он в ячейке также и пишет, но в строке формул пишет его без запятой.  
    Т.е. пишу 5,758 , а в строке формул пишет 5758.  
    Соответственно и вычисление делает с чилом без запятых.  
    При этом любое число с 2 знаками после запятой воспринимает нормально!  
    В чем дело если сможешь подскажи????  
    В любом случае жду ответа. ответ в ПМ....

    Всего записей: 94 | Зарегистр. 28-09-2005 | Отправлено: 12:05 25-08-2006
    SERGE_BLIZNUK

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

    Цитата:
    Как сделать так, чтобы можно было запустить макрос с того листа, с которого я хочу
    могу только советом помочь - научитесь в макросе определять текущуй лист, и потом в своей программе ввести счётчик листов, и пропускать все, пока счётчик меньше номера вашего листа...  
     

    Цитата:
    если на этом листе что-то было до запуска макроса, то мой макрос всё это заменял теми данными,которые содержаться в текстовом файле

    а может просто банально всё очищать перед заполнением?

    Код:
     
       Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
       Selection.ClearContents
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 14:03 25-08-2006
    agrippa

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
     
    Спасибо большое.
    Всё попробую...

    Всего записей: 17 | Зарегистр. 22-07-2006 | Отправлено: 20:52 25-08-2006
    Yuk



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

    Цитата:
    Pochemu-to ShowLevels ne srabatyvaet.  ... a seychas u menya input box vyskakivaet, a detali spryatany i na "+" nel'zya kliknut' vo vremya macro.

    Цитата:
    ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1

    Все правильно. ColumnLevels:=1 означает показать только 1-й уровень, остальные спрятать. Чтобы показать все уровни, надо чтобы эта величина была больше числа уровней. 0 означает оставить без изменения.  
    Вот только не знаю, есть ли возможность запомнить и восстановить прежнее состояние.
     
     
    KLERIK2222

    Цитата:
    Как сделать, что бы после установки у пользователя в Excel'e появилась кнопка, запускающая мою прогу?

    Сохранить файл как надстройка (Addin). Создание/удаление кнопки прописать в функциях AddinInstall/AddinUninstall.
     
    Пример из хелпа:

    Код:
    Private Sub Workbook_AddinInstall()
        With Application.Commandbars("Standard").Controls.Add
            .Caption = "The AddIn's menu item"
            .OnAction = "'ThisAddin.xls'!Amacro"
        End With End Sub
    End Sub

     
    Установить Addin можно также через макрос, см. объект AddIns.
     
     
    divik
    Я тебе ответил в Excel FAQ.
     
     
     
    Добавлено:
    DONRU1
    Как определить разбивку на страницы не знаю. К конце концов это сильно зависит от драйвера принтера. И эксель вроде делает это только после предпросмотра.
    В макросе можно установить на сколько страниц вместить документ в высоту и ширину, как и в соответствующем диалоге. Если нужно контролировать разбивку страниц, можно установить область для печати для каждой страницы и задать размещение на одной странице.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 08:30 27-08-2006
    DONRU1



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Если б все так было просто. Файл формируется макросом автоматически и количество строк в нем все время разное. Есть казначейская программа "Рабочее место распорядителя средств" вот она каким-то образом так делает, а как я не пойму. Она использует Excel файл-шаблон в котором забиты все строки которые могут быть в результирующем файле.

    Всего записей: 32 | Зарегистр. 19-04-2006 | Отправлено: 19:11 28-08-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DONRU1
    Что-то я не совсем уловил связь с твоим предыдущим постом.

    Цитата:
    Файл формируется макросом автоматически и количество строк в нем все время разное. Есть казначейская программа вот она каким-то образом так делает, а как я не пойму.
    Что так делает? Подробнее, пожалуйста.
    Что за программа? На VBA?
     

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 20:15 28-08-2006
    DONRU1



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Эта программа формирует Экселевский файл и в конце каждой страницы добавляет три строчки  в которых содежтся информация об исполнителе документа, количество страниц в документе и номер текущей страницы. Программа на Windows Foxpro.
    Скорее всего придется считать строки.  

    Всего записей: 32 | Зарегистр. 19-04-2006 | Отправлено: 22:28 28-08-2006
    Yuk



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

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 23:56 28-08-2006
    DONRU1



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Совершенно уверен. Если бы они вставлялись через колонтитул, то их было бы видно только на распечатках, не так ли? А так вставляются 3 строки с форматированием ячеек. Я думал, есть вариант решить задачу проще. Единственное что пока не получается - узнать общее количество страниц, сразу, а то приходится простчитывать общее количество строк и делить на то количество, которое помещается на страницу, а уж потом пробегаться по заданным ячейкам и ставить туда это значение.

    Всего записей: 32 | Зарегистр. 19-04-2006 | Отправлено: 08:41 29-08-2006
    utmpatpc

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!
    К своему стыду совершенно не знаю VBA Excel .
    У меня есть весы подключенные через com-порт по RS-232 к компу. Данные от весов передаются в открытый экселевский файл, совершенно произвольно иногда строки дублируются. Проблема в лимите строк в Экселе (65500).  
    Если бы можно было бы регулировать время передачи данных от весов в Эксель. Связывался с производителем весов, он сказал Весы могут передавать данные через Com-порт после каждого АЦП-преобразования.  Вопрос отображения значений веса только в интересующие Вас моменты времени решается программно. То же самое касается и вывода данных непосредственно в таблицу Excel.  
    Мне бы хватило, если бы данные передавались в Эксель один раз через 2 минуты.  
    Как решить эту проблему?  
    Зарание благодарен  
     
    (Могу выслать экселевский сэмпл с логом)

    Всего записей: 19 | Зарегистр. 28-08-2006 | Отправлено: 10:26 29-08-2006
    Anton T

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

    Цитата:
    В свойствах комбобокса установи MatchEntry в 2 - fmMatchEntryNone.  
    В конец функции ComboBox1_Change добавь  
    ComboBox1.DropDown  

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

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:28 29-08-2006
    Yuk



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

    Цитата:
    Вопрос отображения значений веса только в интересующие Вас моменты времени решается программно.

    Я бы проработал этот вопрос с производителем. Возможно в их программе есть установки для этого. Если надо программировать, дают ли они какие рекоммендации? Можно ли это сделать с Excel VBA?
     
    Как временное решение, можно установить макрос в лист, который при появлении новых данных будет проверять время и удалять ненужные строки.
    Нажми Alt-F11, в левой панели найди свой лист (файл должен быть предварительно открыт естественно). Двойным кликом по нему откроется страница с кодом, возможно пустая. Туда ввести:

    Код:
    Private Sub Worksheet_Change(ByVal Target As Range)
    For Each r In Target.Rows
        If Second(r.Cells(1, 1)) Mod 10 <> 0 Then
            r.Delete
        End If
    Next
    End Sub

    Все. Можешь тестировать.
    Подразумевается, что время в первом столбце. Если нет, измени Cells(1,номерстолбца).
    Если секунды не делятся на 10, вся строка удаляется.
    Естественно, данные должны добавлятся именно в этот лист.
     
    Если вся строка не удаляется (зависит от способа добавления данных), можно заменить в макросе строку r.Delete на r.EntireRow.Delete

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:51 29-08-2006 | Исправлено: Yuk, 07:02 30-08-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DONRU1
    Нашел, как определить конец страницы. Используются коллекции HPageBreaks и VPageBreaks.
    Например,
    Код:
    Dim i As Long
    For i = 1 To ActiveSheet.HPageBreaks.Count
        MsgBox ActiveSheet.HPageBreaks(i).Location.Row
    Next i


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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    День добрый!
    Имеется книга экселевская в ней один лист.
    На листе есть списки с полями (ComboBox). В списках есть данные. Так вот я не могу ничего сделать с этими списками. Не могу поменять размер поменять свойства а также немогу найди где хранятся эти данные (в макросах они не заполняются). Также книга связана с другим файлом (ATPVBAEN.XLA) файла у меня нет и данные не обновляются.
    Если кто знает объясние что это такое со списками и как с этим бороться.
     
    Добавлено:
    Немного разобрался нашел где находятся данные этих списков они были в скрытом листе. ) Но пока всеравно не могу понять как работать с этими списками. Если кто знает подскажите. Или дайте ссылочку на пример или литературку.

    Всего записей: 11 | Зарегистр. 29-11-2005 | Отправлено: 11:40 30-08-2006
    Anton T

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Yuk
    Как можно сделать "фильтр" в Listbox1? Например, ввод фамилию "Бондар" в TextBox1, а автоматические отображене в листбоксе.

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:37 30-08-2006
    vladimir_oz

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Мне надо распечатать userform на принтер. Но так как форма достаточно большая то при печати через printform она не умещается на листе.
    Вопрос как распечатать ее или в альфомном формате (повернуть на 90 градусов) или уменьшить масштаб рисунка. Лучше первое

    Всего записей: 40 | Зарегистр. 21-08-2006 | Отправлено: 13:45 30-08-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