Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 2)

Автор: Igor_Paseka
Дата сообщения: 16.08.2009 18:32
Есть форма UserForm на которой есть DTPicker. При появлении формы DTPicker показывает дату когда он был создан, а нужно чтобы при открытии формы DTPicker показывал текущую дату.
Как это сделать?
Спасибо!
Автор: dneprcomp
Дата сообщения: 16.08.2009 20:41
Igor_Paseka
Можно на UserForm_Activate присваивать значение.
Я бы еще поставил флаг-переменную для того, что бы такое обновление проходило действительно только один раз на первый Activate.
Код: Dim Flag As Boolean

Private Sub UserForm_Activate()
If Flag = False Then
Flag = True
DTPicker.Value = Now
End If
End Sub
Автор: FaRa0n
Дата сообщения: 17.08.2009 08:48
При нажатии на кнопку должны появляться элементы "ComboBox" (выпадающие списки).
Состоят они из двух вариантов.
Появляются в столбик - при нажатии на кнопку +1 элемет

Подскажите, как заполнить этот элемент сразу при открытии документа?

Автор: Natavanka
Дата сообщения: 17.08.2009 09:39
SAS888
спасибо за код.
Правда, в файле, действительно нужно, чтобы значения пересчитывались после каждого изменения в автофильтре.
Прикрепляю ссылку на файл: шаблон базы тренеров с макросом.xls
Там нужно, чтобы на листе "Списки_тренеров" в ячейке B2 подсчитывалось кол-во уникальных записей при включенном автофильтре в столбце А (минус 3 ячейки), в ячейке D2 - тоже самое по столбцу G.
Заранее спасибо!
Автор: Maxximus75
Дата сообщения: 17.08.2009 17:32

Цитата:
Excel VBA, Экспорт в txt, кодировка файла UTF-16 LE/UCS-2 Little Endian.


Решение найдено, может кому понадобится.
В Excel у метода SaveAs нет параметра Encoding, который задавал бы кодировку текста.
Зато такой параметр есть у аналогичного метода в Microsoft Word
Цитата:Encoding
Optional MsoEncoding. The code page, or character set, to use for documents saved as encoded text files. The default is the system code page.

Соответственно, Вы можете использовать Word для перекодировки текста.
То есть, средствами excel Вы формируете файл в стандартной кодировке, а потом используете Word для перекодировки (всё это можно сделать макросом из Excel, а Word даже не будет отображаться на экране)
Автор: SAS888
Дата сообщения: 18.08.2009 04:45
Natavanka
посмотрите пример Здесь.
Автор: Natavanka
Дата сообщения: 18.08.2009 10:43
SAS888
Спасибо! Работает!
Только делает это корректно, только если использовать автофильтр в первом столбце. Во всех остальных - выдает ошибку
Можно ли как-нибудь заставить его также работать при включении фильтра в любом столбце (в т.ч. включая одновремнно в нескольких столбцах)?
Автор: FaRa0n
Дата сообщения: 18.08.2009 14:36
Здравствуйте, Все!

Я больше дизайнер, - VBA знаю на уровне абы как (В универе преподавали - и то я гуманитарий).

Очень прошу Вас помочь с элементарными вещами. К сожалению, я и их забыл напроч, а может и не знал. Программка нужна в ресторан, где компьютером, к сожалению более-менее владею только я.

Итак, что я насобирал видно на скриншоте (на саму xls указал ниже ссылку):
http://s08.radikal.ru/i181/0908/65/7836f224df92.jpg

n - количество заказов за день.
Кнопки "Add", "Delete" - добавляют/удаляют заказ.

Столбик № равен n.
Order - номер текущей странички в чековой книжке (не принципиально, хотя и с ней проблемы есть, когда строк вообще нет). Вводится ручками только первая строчка - остальные ++
Type - у меня 1 или 2 - в жизни - Credit Card или Cash (по умолчанию вводится 1 - т.к. кредитками расплачиваются чаще). Если надо - ручками меняю на 2.
Total - вводится ручками - сколько клиент потратил
Tip - чаевые - вводится, только если клиент расплатился Кредиткой (Type = 1) - вводится ручками.

CASH BACK - может быть отрицательная.

На данный момент программа считает определенные суммы (на скриншоте видно). Обычное сложение/вычитание. Оператор ветвления основан на столбце "Type". Т.е. если 1 - то считаем сумму в одну переменную, если 2 - то в другую.

Что хочется сделать:

1.Чтобы при нажатии на "Add" в столбце "Type" появлялись элементы ComboBox (выпадающий список) с двумя вариантами "C.C." (по умолчанию) и "CASH".

2. Понимаю, что программа написана абы как, совсем не по правилам хорошего тона программирования. Наверное, все те строки, которые выполняются, при нажатии кнопки "Count" - надо заключить в функцию. И вызывать эту функцию каждый раз при нажатии на "Add" или "Delete" (и самой "COUNT" естественно)- чтобы программа каждый раз сама, без напоминания пересчитывала.

3. Не могу разобраться, если число заказов равно 0. Ошибки, т.к. строка по сути пуста, а столбец Order черпает себя с предыдущей строки. Вот и ошибка.

4. Не могу понять, почему переменная n (она объявляется, при нажатии на кнопку "Add") не хочет работать в другой процедуре (при нажатии на "COUNT"). Приходится заводить новую что не очень хорошо.

5. Если у кого MS Office 2003 - плз, проверьте - работет ли программа в нём. Вроде бы сохранял в режиме совместимости. Но чёрт его знает.

В примере - даны те данные, которые уже проверены. Т.е. там 4 заказа - всё посчитано как надо. Вроде математически программка считает. Хотя, уверен, глюков там море.

Огромная просьба - гляньте, пожалуйтса! Если можете - подправьте пункты.
Если нет желания, то помогите хотя бы с решением 1-го. Никак не могу даже на уровне теории сообразить, как же должны появляться эти КомбоБоксы. Какие у них должны быть имена, и должен ли это быть массив. Вобщем я запутался конкретно.

Очень надеюсь на Вас!

Ссылка на файл
http://narod.ru/disk/12085502000/Stoli.zip.html

Спасибо.
Автор: MilanAC
Дата сообщения: 18.08.2009 18:56
Дана задача в методичке, не понимаю, что нужно вообще сделать. Пожалуйста, помогите разобраться с тем, что от меня требуется.

Самостоятельно в программной среде Excel постройте моделирующий алгоритм численного и графического решения экономико-математической задачи по определению области возможных цен и объемов продукции, обеспечивающих доход свыше 650 тыс. рублей при диапазонах допустимых цен от 100 до 200 руб. и объемов продукции от 1000 до 5000 изделий.
Автор: SAS888
Дата сообщения: 19.08.2009 04:26
Natavanka

Цитата:
Можно ли как-нибудь заставить его также работать при включении фильтра в любом столбце

Посмотрите Этот пример.
Автор: Natavanka
Дата сообщения: 19.08.2009 16:59
SAS888
Супер! Работает, как надо!!!
СПАСИБО ОГРОМНОЕ!!!
Автор: FaRa0n
Дата сообщения: 20.08.2009 09:21
А мне может кто-нибудь помочь? Хотя бы пункт 1.

Надо появление СомбоБокса при нажатии на кнопку =(
Автор: Alexikit
Дата сообщения: 21.08.2009 12:42
FaRa0n
Я конечно не специалист, но на уровне теории, почему бы при нажатии на кнопку Add не организовать вызов формы, куда вставить ComboBox уже проблем нет, а из формы уже добавлять строку.
Автор: febreze2009
Дата сообщения: 22.08.2009 10:47
Подскажите пожалуйста, не знаю как реализовать.
Задача: Есть два столбца значений. Один около 6000 ячеек, второй 200. Все значения в одном и втором столбце шестизначные положительные, целые числа. Необходимо сравнить/проверить есть ли эти 200 значений в большом списке, по сути найти их. При положительном результате как-нибудь их выделить (не важно, цветом, символом в столбце рядом или другим способом).
Автор: SERGE_BLIZNUK
Дата сообщения: 22.08.2009 12:29
febreze2009
выделить в большом списке найденные из второго(который 200) ?
и обязательно ли использование макросов?
Дело в том, что обычное условное форматирование (формула =СЧЁТЕСЛИ(диапазон, ячейка) легко решает Вашу задачу.
Автор: febreze2009
Дата сообщения: 22.08.2009 13:30
SERGE_BLIZNUK
Может и не обязательно, только у меня не получается это реализовать. Используя Вашу подсказку у меня получается только достигнуть проверки 1 или 0 (есть совпадения или их нет). А мне нужно выделить значения в большом списке, если такие же есть в маленьком.

например:
1 4
2 6
3 3
4 ..
5 200
6
..
6000

Результатом работы формулы или макроса будет выделение в левом столбце значений 4,6,3
Автор: SERGE_BLIZNUK
Дата сообщения: 22.08.2009 15:40
febreze2009
ну, я не знаю, как ещё объяснить...
вот, картинка:
вот — пример
Автор: febreze2009
Дата сообщения: 23.08.2009 06:22
SERGE_BLIZNUK

Иногда хочется орать, когда полностью переписываешь с источника, а у тебя нихрена не работает:


Пошагово:
1. Ввел значения/открыл файл с ними
2. Выделил ячейку A2
3. Выбрал из меню Автоформатирование
4. Ввел формулу, нажал ОК.
5. Выделилась цветом только ячейка А2.

Выделять найденные ячейки нужно в большом списке, а не в малом
Почему в формуле +А2, что это дает?

ЗЫ. Пример забрать не могу с этого сайта, кинь на мыло плиз "098собакаua.fm"
Автор: SERGE_BLIZNUK
Дата сообщения: 23.08.2009 10:43

Цитата:
3. Выбрал из меню Автоформатирование

хм.. странно. на рисунке вроде бы Вы выбрали (как и надо!) УСЛОВНОЕ ФОРМАТИРОВАНИЕ

ладно. не суть важно.
Ввели формулу. Кстати по формуле +A2 - плюсик сам Excel добавил, гад.. думаю, что можно и без него. А более правильно формула должна выглядеть так:

Код: =СЧЁТЕСЛИ($C:$C;A2)>0
Автор: evgeniy89
Дата сообщения: 24.08.2009 13:27
Необходимо повесить макрос, в таблицу excel находящуюся на обменнике, который будет отправлять уведомление, после того как в таблицу будут внесены изменения и она будет закрыта, пользователю в локальной сети об его изменении посредством отсылки письма, либо через виндовский мессенджер. Как можно выполнить данную процедуру?
Автор: metrim
Дата сообщения: 24.08.2009 23:39
Дело такое
Нужно решить задачу такого типа как описано здесь http://www.firststeps.ru/vba/excel/r.php?52 , но расширив функциональные возможности.
Будет набор диапазонов: "индекс" (с уникальным значением); описание; плотность и т.д.
Нужно что бы функция брала значение (строковое вероятно) в ячейке (допустим В1), искала в поле индекс соответствие и возвращала значение из соответствующей ячейки диапазона описание допустим (или любого другого), т.е. функция вида podrobnee(A1,описание)
Вроде ничего сложного быть не должно, только вот не получается рабочего кода (путаюсь с параметрами значений диапазонов)
Подскажите плз. Решение должно быть простым ....
Заранее спасибо
Автор: visual73
Дата сообщения: 25.08.2009 08:06
evgeniy89
не проще ли следить за самим файлом excel и когда он изменяется получать сообщение. есть сторонний софт. зачем нужен vba?
Автор: SERGE_BLIZNUK
Дата сообщения: 25.08.2009 08:13
metrim тестовый пример есть? (с разжёванными указаниями, что есть и что должно быть)?
почему пишете в тему Excel VBA - решением должен быть макрос?!


Цитата:
Решение должно быть простым ....
:)

Автор: FaRa0n
Дата сообщения: 25.08.2009 09:15
Alexikit
Да вот в том то и дело, что нужно КомбоБокс вызывать не в форму, а на шит.

Как это можно сделать? Объясните, плз. Никто не знает что ли?
Автор: matel
Дата сообщения: 25.08.2009 10:06
У меня есть екселевский файл http://narod.ru/disk/12388811000/car_test.xls.html
мне надо сделать макрос, который ставит/снимает птичку на любос чекбоксе и выбирает значение на любом листбоксе. Основная проблема, что я не могу найти имена этих элементов управления. Сделайте кто-нибудь -- буду очень благодарен!
Автор: Alexikit
Дата сообщения: 25.08.2009 11:37
FaRa0n
Раз не отвечают, ищите другие пути.
Как вставить комбокс в ячейку я не знаю.
Вариант с формой явно не лучший, но зато можно вставить комбокс, при необходимости гасить ввод в поле Fit, и запретить добавление пока не заполнены все поля. Подумайте, может найдете в принципе другой путь для решения проблемы.
Автор: metrim
Дата сообщения: 25.08.2009 15:50
SERGE_BLIZNUK

Цитата:
metrim тестовый пример есть? (с разжёванными указаниями, что есть и что должно быть)?
почему пишете в тему Excel VBA - решением должен быть макрос?!

Ну собственно решение своей задачи я ужо нашел http://programmersforum.ru/showthread.php?t=59677
Мне нужно было что то типа этого, только хотел я решать это средствами макроса

Но вообще ворос заинтересовал и остался:
Допкстим есть именованный диапазон "индекс"(В1:В10) и "описание"(D21:D30) . Хотелось бы получить пользовательскую функцию, которую я мог бы записать в ячейку например Е51 как формулу
"=ПАРАМЕРТЫ_ВАРИАНТА(а,индекс, описание)"
где а - ссылка или значение для поиска в индексе.
Разумеется помимо диапазона "описание" эта формула должна будет обрабатывать так же и диапазоны "вес", "плотность" и т.д.

Разумеется можно искать в "индекс"е совпадающее значение, определять положение ячейки в диапазоне, потом идти в диапазон "описание" и отсчитывать там ячейки сверху, но ведь все должно быть гораздо проще ...
Автор: SAS888
Дата сообщения: 26.08.2009 05:32
metrim
Если я все правильно понял, то вопрос решит функция:

Код: Function ПАРАМЕТРЫ_ВАРИАНТА(Значение, Индекс As Range, Диапазон As Range) As String
Dim i As Long, Cell As Range: i = 0
For Each Cell In Индекс
i = i + 1
If Cell.Value = Значение Then
ПАРАМЕТРЫ_ВАРИАНТА = Диапазон.Resize.Cells(i, 1): Exit Function
End If
Next
End Function
Автор: nidhthunter
Дата сообщения: 26.08.2009 16:24
Господа, подскажите в такой проблеме:
есть у книге листы с именами, которые (имена) потом собраны на одном листе. как через VBA сделать ссылки на эти листы?
Автор: liatera
Дата сообщения: 26.08.2009 21:53
день добрый.
я не программист, и слабо связан со спецификой данной специальности вообще. но получилось так, что мне необходимо сделать конкретное дело, и я хочу упростить его при помощи VBA. я записал макрос, с подсказками друга немного модифицировал его и все заработало. не идеально, но я получил необходимый результат.
сейчас я хочу улучшить (упростить) процесс, но думалки не хватает.
задача следующая: есть исходный список в виде столбца текстовых значений, я должен изменить его вид, вставляя строки и изменяя текстовое содержимое.
первый вариант работал по содержимому списка сверху вниз. но поскольку количество элементов меняется, я не смог отрегулировать количество циклов "преобразования".

я решил изменить алгоритм обработки. начинать снизу вверх, начиная с самого нижнего элемента, и двигаться вверх. НО не знаю как определить "координаты" ActiveCell , чтобы отталкиваясь от них, сделать цикл от "координата клетки" до "нуля".

код макроса

Selection.EntireRow.Insert
Selection.EntireRow.Insert
ActiveCell.FormulaR1C1 = "data"
ActiveCell.Offset(-1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "[Net.=" & ActiveCell & "]"

буду крайне благодарен, если вы мне поможете

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.