Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Передача аргументов пользовательской форме.
 
Inexsu, привет. Вы правы, с функцией еще удобнее будет.  
Передача аргументов пользовательской форме.
 
Господа, дико извеняюсь за отсутствие примера. Я ожидал получить ответ типа такого:
При вызове формы запишите в скобках аргументы, которые вы в нее передаете... получится примерно так:
Код
UserForm(argument,argument).Show

Поэтому пример не приложил.

Юрий М, Alemox, спасибо за примеры. Не совсем то, но они помогли. Проблема в том, что в коде фторой формы вы непосредственно ссылаетесь на первую. но первая форма может быть любой другой. То есть вторая форма должна работать с любой формой проекта.

Я сделал два варианта. Первый работает через Public переменную, второй при помощи Public Sub. Пока не придумал ничего другого. Второй вариант выглядит удобнее. Форму можно использовать в любом модуле проекта.

Передача аргументов пользовательской форме.
 
Юрий М, я прикрепил примерный вид форм. Соответственно первая форма - userform1, вторая универсальная форма - userform2.
На первой форме много полей для ввода. Рядом маленькие кнопочки, вызывающая вторую форму. Текст, который вводится может быть очень громоздким, и его нужно видеть весь. Кроме того на второй форме есть библиотека карт(грубо говоря - функций) с форматом их записи. И вторую форму планируется использовать во многих местах. не только с формой один.
После ввода текста во вторую форму и нажатия ок этот текс должен оказаться в соответствующем поле на первой форме.

Надеюсь понятно объяснил.
Передача аргументов пользовательской форме.
 
Андрей_26, подскажите пожалуйста, как это сделать.

По поводу размера... Изначально делал боксы большего размера, в некоторых уменьшал шрифты, чтобы можно было прочесть все. Но во многих формах боксов, в которые иногда нужно вводить много текста несколько (3 - 5 штук). Если делать каждый бокс большого размера, то формы становятся огромными. Тогда я стал делать отдельные формы для ввода. Но делать отдельную форму для каждого подобного текстбокса как-то не практично. Это как писать отдельную функцию, для разового ее применения.

Jack Famous,  мне они сильно не мешают, но я их стараюсь не использовать. В приложении несколько десятков модулей, где необходимо (т.е. без них не обойтись) использую глобальные переменные. В остальных случаях предпочитаю их не использовать. Тут, казалось бы, можно и без них обойтись - просто передать форме имя текстбокса, в который после нажатия клавиши записать текст.
Передача аргументов пользовательской форме.
 
Добрый день.

Пытаюсь сделать универсальную форму для ввода данных.
Идея такая: есть ПЕРВАЯ ФОРМА с текстбоксом, если в нем не хватает места, то можно нажать на кнопку откроется ВТОРАЯ ФОРМА с текстбоксом большого размера. В этот текстбокс мы вводим текст, нажимаем ок, и текст переносится в текстбокс первой формы.
ПЕРВЫХ ФОРМ много и они разные. А ВТОРАЯ ФОРМА должна быть одна универсальная.

То есть, по идее надо по нажатию на кнопку на ПЕРВОЙ ФОРМЕ передать во ВТОРУЮ ФОРМУ имя текстбокса, в который надо вставить текст из второй формы.

Подскажите, можно ли так сделать?
Желательно не использовать при этом глобальные переменные.
Защитить код паролем но оставить доступ к макросам
 
Цитата
bedvit написал:
Наименования процедур хранимых в настройке не показываются вне зависимости есть пароль на проект или нет.
Цитата
Дмитрий(The_Prist) Щербаков написал:
А назначать их кнопкам не смогут, т.к. макросы будут недоступны для открытого использования через Alt+F8 или из меню Разработчик. При этом совершенно неважно, защищен проект паролем или нет.
Эти два утверждения однозначно неверны. Как я и писал выше, наименования процедур доступны из меню настройки ленты, если проект надстройки не защищен. Во всяком случае в 2016 excel это так. Тестировалось многократно.

Цитата
Дмитрий(The_Prist) Щербаков написал:
Создайте надстройку, сделайте к ней кнопки и все. Пусть сами жмут что им надо:  Как создать свою надстройку?
Дмитрий, за статью спасибо. Полезно, хоть и не очень удобно. В нашем случае удобнее, когда они могут сами выбирать что им надо, а не искать среди кучи кнопок.
Если нет другого выбора, буду делать так.

Спасибо.
Защитить код паролем но оставить доступ к макросам
 
Добрый день.

Такая задача: Нужно защитить код vba НАДСТРОЙКИ (*.xlam) .

Стандартный вариант защиты паролем устраивает всем, кроме того, что при его использовании пропадает возможность использования написанных макросов (процедур). Т.е. при попытке назначения макроса кнопке в меню настройки ленты этого макроса нет в списке, он  скрыт.
Если макрос в книге, то все гуд, но как только сохраняешь книгу в формате .xlam - то макрос пропадает из списка.

Нужно, чтобы проект был запаролен, но, подключив .xlam, пользователи могли использовать макросы и назначать их кнопкам.

Версия excel - 2016.
Назначить макрос кнопке, находящейся внутри frame на листе/
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
какое странное желание...Ну про нахождение все время на листе еще понятно, а вот про дебагинг...Что подразумевается под необходимостью нахождения формы на листе при дебагинге?
Начну с того, что спасибо за ваш пример, буду изучать. Как вы поняли, в VBA я плаваю на уровне около нуля. Поэтому, возможно, решения тех или иных вопросов - не оптимальные.
Задача у меня следующая: нужно автоматизировать технический расчет. Причем автоматизировать надо от ввода данных до получения результатов. Расчет происходит по времени, соответственно результаты надо получить в каждый момент времени, проанализировать и обработать. Всего около 50000 временных шагов.

Почему VBA? -Потому, что отчеты потом все равно оформляются в  приложениях MS офис.

Теперь, что касается ввода данных.

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

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

Как то так.
И я, со своим небольшим опытом в VBA, не придумал ничего лучше, чем использование фрейма (рамки) на листе.

Цитата
GRIM написал:
закрыл редактор VBA, тыкнул к примеру на A1 и опять по кнопке - и все работает.
Спасибо за ответ. Тогда буду рыться у себя.
Назначить макрос кнопке, находящейся внутри frame на листе/
 
Цитата
GRIM написал:
После остановки дебага тыкните на любую ячейку листа, а потом опять по фрейму и должно все работать
Само собой, по идее, так и должно работать, но не работает. Поэтому и спрашиваю, мне не особо понятно почему не работает.
Назначить макрос кнопке, находящейся внутри frame на листе/
 
Цитата
GRIM написал:
Задавайте кнопку не на открытие книги, а фокус на фрейме и будет все хорошо
Спасибо! Так работает. но с одним НО. После прерывания выполнения макроса (дошел до точки остановы, затем я его прервал, или завершен с ошибкой)  кнопка перестает работать. Почему это происходит?

Цитата
Юрий М написал:
А я бы не мучился, и создал форму )
Я бы создал форму, но я не знаю как сделать, и можно ли сделать так, чтобы форма все время находилась на листе. Начиная с открытия книги, заканчивая дебагингом кода. Если расскажете, то буду благодарен)
Назначить макрос кнопке, находящейся внутри frame на листе/
 
Цитата
Nordheim написал:
А как на счет файла примера?
Файл примера приложил. В примере на frame расположены две кнопки. Нужно чтобы на них можно было назначить макрос, или код.
Цитата
Alemox написал:
А зачем вам элемент ActiveX?
Потому, что только их можно расположить в элементе frame. Обычную кнопку не получается даже наложить поверх рамки, так как она автоматически перемещается на задний план/фон.
Назначить макрос кнопке, находящейся внутри frame на листе/
 
Добрый день.

подскажите пожалуйста, как назначить макрос кнопке, которая находится внутри frame на рабочем листе.
Судя по иформации в интернете нужно создать класс с обработкой событий, но как это сделать я не понял.

Пробовал сделать как показано ниже, но так кнопка работает только при открытии книги и один раз. Код добавлял в код Книги.
Код
Private WithEvents btn1 As MSForms.CommandButton
Private Sub Workbook_Open()
    Set btn1 = Worksheets("list1").Frame1.Object.btn_run
End Sub

Sub btn1_Click()   
Call MACRO
End Sub
Значение эл-та управления ActiveX checkbox внутри frame на листе Excel
 
GRIM, Ігор Гончаренко, Спасибо, все работает.

Подскажите пожалуйста по этой части кода:
Код
.Shapes(1).DrawingObject.Object.Controls("CheckBox" & i)

Почему мы к фрейму обращаемся через такую конструкцию?

И еще один вопрос по теме.

Пример тот-же. Как назначить макрос кнопке, которая находится внутри фрейма?

Значение эл-та управления ActiveX checkbox внутри frame на листе Excel
 
Добрый день.

Мне нужно получить значения ActiveX флажков (checkbox), которые находятся внутри frame на листе excel. Подскажите пожалуйста как это сделать.
Смысл в том, чтобы работающий (по нажатию кнопки) макрос в зависимости от выбранных флажков запускал разные процедуры.

Логика примерно такая:
Если флажок 1 нажат (имеет значение 1 или истина), то запускается процедура 1,
если нажат флажок 2 ....

Проблема в том, что флажки находятся внутри frame, и я не знаю как к ним обратится. И еще я не понимаю, как назначить имя флажкам внутри frame на листе.
Страницы: 1
Наверх