VBA Listbox - Избран елемент

Тази статия ще покаже как да работите с избрания елемент в поле със списък в Excel VBA.

Списъчните кутии се използват до голяма степен във VBA формуляри, но могат да се използват и във вашия работен лист на Excel. Те показват списък с опции на потребителите, една или повече от които потребителят може да избере.

Създаване на списъчно поле във VBA формуляр

За да създадем списъчно поле във VBA формуляр, първо трябва да създадем UserForm.

След като създадете формуляра си, изберете контролата List Box в кутията с инструменти и след това плъзнете, за да създадете поле със списък във формуляра.

Добавяне на стойности към списъчното поле

В събитието Initialize на формуляра въведете следния код. Списъчното поле ще вземе стойности, които се съхраняват в диапазон от клетки във вашия работен лист на Excel.

123456 Частен подпотребителForm_Initialize ()Dim rng As RangeЗа всеки обхват в обхвата ("A1: A50")Me.lstState.AddItem rng.ValueСледващ rngEnd Sub

Когато стартираме формуляра, списъчното поле ще се покаже, както е показано на изображението по -долу:

Избиране на стойности от списъчното поле

По подразбиране една единична стойност може да бъде избрана в поле за списък в потребителска форма. Това обаче може да бъде променено чрез промяна на свойството Multi-Select на списъчното поле.

Щракнете върху полето със списък, за да го изберете, а след това в прозореца Свойства променете свойството за многократно избиране от 0-frmMultiSelectSingle да се 1-frmMultiSelectMulti.

Сега, когато стартираме формуляра, можем да изберем повече от една опция в списъчното поле.

Ако променим опцията да бъде 2-frmMultiSelectExtended, това означава, че можем да изберем една от стойностите и след това, задръжте клавиша SHIFT, изберете друга стойност по -надолу в списъка и всички елементи между двете избрани стойности също ще бъдат избрани.

VBA програмиране | Code Generator работи за вас!

Работа с избраните стойности във VBA

В зависимост от типа опция, която сме използвали за свойството Multi-Select в списъчното поле, има няколко начина, по които можем да използваме стойността или стойностите, избрани в списъчното поле във VBA Code.

Присвояване на стойността на променлива

Можем да използваме After_Update събитие от списъчното поле, за да присвои избраната стойност на променлива.

Първо, нека създадем променлива на ниво модул в горната част на модула на формуляра.

Под думите, Опция Изрично, създайте следната низова променлива.

1 Dim strState като String.

След като създадем тази променлива, можем да щракнем двукратно върху полето Списък, за да отидем до кода зад формуляра, или можем да кликнем върху кодовия бутон във VBE Editor.

Събитието при щракване в списъчното поле ще бъде създадено автоматично. Изберете After_Update Събитие от списъка на наличните процедури.

В събитието After_Update въведете следния код:

123 Частен под lstState_AfterUpdate ()strState = Me.lstStateEnd Sub

ЗАБЕЛЕЖКА: Можете да изтриете събитието Click, тъй като то не е задължително.

Сега, ако стартираме формуляра и кликнем върху списъчното поле, избраната стойност ще бъде съхранена в променливата. За да тестваме това, можем да поставим точка BREAK в кода.

Сега, когато стартираме формуляра, ако кликнем върху списъчното поле, кодът ще премине в режим DEBUG и ще спре на нашата точка на прекъсване. Ако след това натиснем F8 на клавиатурата, за да преминем стъпка по -нататък в кода, променливата ще бъде попълнена с избрания елемент в списъка.

Можем да видим тази стойност, като поставим мишката върху променливата.

ИЛИ

Можем да видим стойността в непосредствения прозорец.

Уморени ли сте от търсене на примери за VBA код? Опитайте AutoMacro!

Използване на команден бутон за връщане на стойността в Excel

Първо, ние създаваме команден бутон във формуляра, за да имаме бутон OK, за да върнем стойността или стойностите, избрани в списъчното поле, в Excel.

Изберете контролата на командния бутон и след това щракнете и плъзнете във формуляра си, за да създадете бутона.

В прозореца Свойства променете името на бутона на cmdOKи променете надписа и ускорителя на бутона.

Целта на Accelerator е в този случай потребителят да използва клавиатурата, за да активира бутона Alt+O ще активира бутона.

За да работи командният бутон, трябва да добавим код зад него, така че при натискане на бутона кодът да се изпълнява. Това се нарича събитие Click на бутона.

За да стигнете до събитието щракване, щракнете двукратно върху бутона в изгледа за проектиране на формуляра. Събитието при щракване ще бъде създадено автоматично, тъй като това е събитието, което най -често се използва за командните бутони.

Въведете следния код в събитието click на командния бутон.

123 Частен под cmdOK_Click ()Диапазон ("E1") = strStateEnd Sub

Кодът ще вземе променливата, която сме декларирали в събитието After_Update на ListBox и ще върне стойността в Range в Excel.

Като алтернатива можем да вземем стойността директно от списъка без да използваме променлива.

123 Частен под cmdOK_Click ()Диапазон ("E1") = me.lstStateEnd Sub

Когато стартираме формуляра, избраната стойност ще бъде върната в Excel, когато щракнем върху бутона OK.

Избор на множество стойности

Ако сме задали свойството за многократно избиране на списъчното поле на 1 или 2, което ни позволява да избираме множество стойности в списъка, тогава кодът за избор на тези стойности е малко по-различен.

The After_Update събитие вече не се задейства при избиране на стойностите в списъчното поле - следователно не можем да използваме това събитие.

Все още можем да използваме събитие за щракване на командния бутон, но трябва да преминем през стойностите, избрани в списъчното поле, за да ги върнем в Excel.

В командния бутон Щракнете върху събитие, въведете следния код.

12345678910 Частен под cmdOK_Click ()Dim x като цяло числоОбхват ("E1"). ИзберетеЗа x = 0 за Me.lstState.ListCount - 1Ако Me.lstState.Selected (x) = True ТогаваActiveCell = Me.lstState.List (x)ActiveCell.Offset (1, 0) .ИзберетеКрай АкоСледващ xEnd Sub

Сега, когато стартираме формуляра, само избраните стойности ще бъдат върнати в листа на Excel.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave