2015-07-16 11 views
-3

Я новичок в vba и excel макросах.Excel Macro VBA

Я хотел бы создать кнопку команды, которая запрашивает у пользователя ввод, если они ищут политику или процедуру или форму. Затем попросите пользователя найти слова. Результат поиска будет отображаться в виде списка на первом листе.

Таблицы Excel имеют 9 рабочих листов. Первый рабочий лист представляет собой введение с функцией поиска. Остальные 8 листов содержат данные с двумя столбцами. Первый столбец - это имя политики, процедуры или формы. Второй столбец - это тип документа (т. Е. Политика, процедура или форма). Количество строк для каждого типа документа различается между рабочими листами, поэтому определенный диапазон ячеек различен для каждого листа для каждого типа документа.

+4

Так в чем ваш вопрос? Никто не собирается писать ваш код для вас; однако, если у вас есть код и возникают проблемы с определенным элементом, люди будут более склонны помогать. – Tas

+1

Есть много хороших учебных пособий excel vba. С несколькими часами учебы вы, вероятно, можете забрать основы и получить больше указаний. – MatthewD

ответ

1

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

Имея это в виду, я собираюсь дать вам ссылки и инструменты, чтобы сделать это для себя. Я обсужу тип VBA, который я бы использовал, чтобы решить эту проблему, чтобы у вас были доступные условия для поиска.

Прежде всего, вам нужна командная кнопка. Самый простой способ получить это - использовать вкладку «Разработчик» на ленте. Вы можете узнать об этом here. Как только вы получите кнопку, вам нужно будет присвоить ей макрос. Подробнее об этом here. Я бы предложил кнопку управления формой, поскольку она немного проще и может отлично справиться с вашей задачей.

Прежде чем вы сможете назначить макрос, вам нужно построить макрос. Excel-Easy покажет вам, как добраться до редактора VBA через графический интерфейс, или вы можете нажать ALT + F11.

Во-первых, вам понадобится коробка ввода. Информацию об этом можно найти по номеру MSDN. В этой статье также есть некоторые примеры, чтобы добиться этого.

Вы хотите назначить входной переменной такой же, как и на OzGrid. Основываясь на вашем описании, я бы сказал, что вам нужен string.

Теперь вам понадобится For Each...Nextloop. Что-то вроде этого:

For Each Worksheet in ThisWorkBook.Worksheets 
    'more code here 
Next Worksheet 

Для этого, вы хотите узнать о Worksheet, ThisWorkBook и Worksheets.

Внутри этого цикла вам нужно будет найти последнюю строку каждого листа. Это очень обычная вещь, когда вы работаете с Excel и можете найти много мест, таких как The Spreadsheet Guru. Как только вы это сделаете, вам нужно определить диапазон, используя последнюю строку. Эта последняя ссылка также должна помочь вам.

Как только у вас есть свой диапазон, пришло время использовать метод Find. Первый пример этой страницы - это то, что вы собираетесь делать. Вы просто будете использовать эту переменную, мы установили ввод раньше, а не номер 2, и вам не нужно будет его заменять. Это использует Withstatement, a Ifstatement (article at Tech On The Net), a Do Whileloop и Notoperator.

Теперь, каждый раз, когда вы его находите, вы хотите его переместить. Чтобы убедиться, что вы не просто вставляете всю соответствующую информацию друг в друга, вам нужно будет установить последнюю строку для вашей первой страницы. Затем вы можете использовать Valueproperty, чтобы быстро и легко перемещать данные из того места, где он находится на первом листе. Обязательно добавьте 1 к последней строке, когда вы передадите значение, или оно всегда будет просто переносить его на последнюю строку, а не на следующую строку под ней.

Удачи!

ПРИМЕЧАНИЕ. Я специально упомянул некоторые сайты, на которых я получил эти ссылки. Это довольно хорошие ссылки. Для получения дополнительной информации посмотрите here. Кроме того, Google - твой друг;). Если у вас есть особенно трудное время в любом разделе этого, вы всегда можете опубликовать его как новый вопрос для этой конкретной проблемы.

+1

Nice набор сухарей для кого-то, начиная с. Однако я бы рекомендовал коллекцию Worksheets вместо листов. Листы включают в себя диаграммные листы, которые могут действительно запутать новый кодер VBA. С другой стороны, коллекция Worksheets - это чисто рабочие листы. –

+0

@ExcelHero Хорошая точка. Я редактировал сообщение, чтобы иметь коллекцию Worksheets вместо коллекции «Листы». – PermaNoob

+0

Используется Расширенный фильтр для создания фильтра на отдельном wksht в той же книге. В пределах диапазона списка находятся ячейки с гиперссылками. Расширенный фильтр находится на Wksht 1, приносит все строки Row 1, Row 2 и т. Д. В wksht. В столбце Заголовок находится слово без прикрепленной к нему гиперссылки. Как добавить гиперссылку на Wksht 2 вместе со всей информацией. Макросы ниже. Sub Filterme() Filterme Макро ' ' Sheet10.Range ("A1") CurrentRegion.AdvancedFilter Действие: = xlFilterCopy, _ CriteriaRange: = Range ("! FilterData критерии") , CopyToRange: = Range (_ «FilterData! Extract»), Unique: = False – Deepa