2012-05-09 2 views
2

В настоящее время у меня есть данные, которые я разделяю на несколько листов и позволяю пользователю выбирать, на каком листе они запускают макрос. Рабочий лист используется как фильтрация между несколькими системами.Настройка кнопки Расположение макроса, которое генерирует кнопки управления формой

У меня есть именованный диапазон (dayList), который группирует данные в дни и создает новый лист для каждого дня (день1, день2 и т. Д.). Затем на каждом листе должен быть применен другой макрос (экранные данные), который будет точно фильтровать данные на каждом из этих листов.

Я пытаюсь создать пользовательский интерфейс, который будет приближать пользователя, который сможет щелкнуть по одной из ячеек в указанном диапазоне, чтобы запустить макрос в этот конкретный день. Ниже приведен фрагмент кода im, который работает в данный момент.

Sheets("LaunchScreen").Activate 
    Cells(rowCounter, 6).Value = "Day" & dayCounter 
    ActiveSheet.Buttons.Add(538.5, 56.25, 48.75, 13.5).Name = "Day" & dayCounter 
    ActiveSheet.Buttons("Day" & dayCounter).Select 
    Selection.OnAction = "JoinTransactionAndFMMS" 

Im зацикливание это, чтобы создать новую кнопку в течение каждого дня затем передать имя кнопки для другого макроса в качестве параметра, чтобы найти таблицу в этой книге, которая разделяет то же имя.

TLDR: мне нужно:

  1. Установить местоположение кнопки с помощью VBA, предпочтительно, чтобы соответствующие местоположения ссылки на ячейку, например, Range("A1").Button.Insert
  2. Передайте ссылку на ячейку из именованного диапазона в макро

первенствовать нуб в пути над головой здесь. Любая помощь будет принята с благодарностью!

ответ

1

1) Метод .Add ожидает 4 параметра. Первые две позиции TOP и LEFT, чтобы получить верхний левый угол кнопки, 3 и 4 являются настройками высоты и ширины для кнопки.

Итак, если вы знаете, что вы хотите добавить кнопку и ссылку, чтобы поместить его в ячейки С10 (лучше, например, чем А1), то это будет сделать это:

ActiveSheet.Buttons.Add(Range("C10").Top, Range("C10").Left, 48.75, 13.5).Name = "Day" & dayCounter  

2) Ваш макрос должен быть сначала разработан, чтобы принять параметр, «пройденный» в него. Так, что-то вроде

Sub MyMacro(MyRange As Range) 
    MsgBox MyRange.Address 
End Sub 

Теперь ваш другой макрос может позвонить MyMacro и вы должны передать в параметре, как это называется:

Sub test2() 
    Call MyMacro(Range("Animals")) 
End Sub 
+0

+ 1 Nicely объяснил :) Я думаю, что у вас есть дополнительный знак «=» перед «Днем» и днемКонверт –

+0

Исправлено, спасибо за отзыв. –

+0

Спасибо за отличную обратную связь! тестирование, если оно работает сейчас .... – BiGXERO

Смежные вопросы