Попуните ЛистБок контролу вредностима из затворене радне свеске користећи ВБА у Мицрософт Екцелу

Anonim

У овом чланку ћемо преузети податке из затворене радне свеске у оквир Листа у корисничком облику помоћу ВБА.

Сирови подаци за овај пример налазе се у опсегу А2: Б10 у радној свесци „23СамплеДата.клс“, који се налази у путањи датотеке „Д: \ Екцелфорум \ ЕкцелФорум оффице \ екцел тип стари код \ Схаред Мацро \ 23 \“.

Направили смо два командна дугмета на главном радном листу за покретање два различита корисничка облика. Свако командно дугме је повезано са различитим корисничким облицима.

Логичко објашњење

У овом примеру, два различита начина се користе за преузимање података из затворене радне свеске. Су:-

  1. Отворите затворену радну свеску и преузмите податке

  2. Коришћење АДОДБ везе

Отворите затворену радну свеску и преузмите податке

Могуће је поставити својство РовСоурце контроле ЛистБок -а за добијање података из друге радне свеске додељивањем вредности својству РовСоурце на следећи начин:

‘[Име датотеке.клс] Лист 1?! $ Б $ 1: $ Б $ 15

ЛистБок контрола ће приказати вредности само ако је друга радна свеска отворена.

Дакле, да бисмо дохватили податке из затворене радне свеске, креираћемо макро за отварање друге радне свеске, а да то корисник не примети и дохваћање података из радне свеске за додавање ставки у оквир са листом и затварање радне свеске.

Кликом на дугме „Одабери“ активира се кориснички образац „Кориснички образац1“. Догађај Инитиализе корисничког облика користи се за додавање ставки у оквир са листом. Овај догађај прво отвара затворену радну свеску, а затим додељује вредност у опсегу варијанти „ЛистИтемс“. Након додељивања вредности, радна свеска се затвара и ставке се додају у оквир са листом.

Лист бок се користи за избор имена из постојећих вредности листе. Притиском на дугме „ОК“ приказаће се изабрано име.

Коришћење АДОДБ везе

АцтивеКс Дата Објецтс (АДО) је интерфејс на високом нивоу, једноставан за коришћење за ОЛЕ ДБ везу. То је програмско сучеље за приступ подацима у бази података и руковање њима.

Да бисмо створили АДОДБ везу, мораћемо да додамо АДО библиотеку у пројекат.

Да бисте додали референцу, изаберите из менија Алатке> Референца.

Кликом на дугме „АДОДБ веза“ на радном листу активира се кориснички облик „УФАДОДБ“. У случају иницијализације овог корисничког облика, користили смо АДОДБ везу за преузимање података из затворене радне свеске. Направили смо прилагођену кориснички дефинирану функцију (УДФ) “РеадДатаФромВоркбоок” како бисмо успоставили везу и донијели податке из затворене радне књиге у низ.

Користили смо други УДФ „ФиллЛистБок“ за додавање ставки у оквир Листа током иницијализације корисничког облика. Лист Бок ће приказати податке у две колоне, једна колона садржи име, а друга колона садржи године.

Притиском на дугме „ОК“ након што изаберете ставку у оквиру Листа, приказаће се информативна порука о изабраној ставци.

Молимо следите доле за код

 Опција Екплицит Суб руннинг () УсерФорм1.Схов Енд Суб Суб АДОДБруннинг () УФАДОДБ.Схов Енд Суб 'Додајте доњи код у УФАДОДБ кориснички облик Опција Експлицитна приватна подредба ЦоммандБуттон1_Цлицк () Дим наме1 Ас Стринг Дим аге1 Ас Интегер Дим и Ас Интегер' Доделите изабрано вредност у оквиру листе за променљиву наме1 и аге1 За и = 0 За ЛистБок1.ЛистЦоунт - 1 Ако је ЛистБок1.Селецтед (и) Тада је наме1 = ЛистБок1.Валуе аге1 = ЛистБок1.Лист (ЛистБок1.ЛистИндек, 1) Изађи за крај ако је следеће ' Унлоад тхе усерформ Унлоад Ме 'Приказ излаза МсгБок "Изабрали сте" & наме1 & ". Његове године су" & аге1 & "ирс." Енд Суб Привате Суб УсерФорм_Инитиализе () 'Попуњавање ЛистБок1 подацима из затворене радне свеске Дим тАрраи Ас Вариант' Функција позивања РеадДатаФромВоркбоок за добијање података из наведеног опсега у низ 'Промените путању према вашим захтевима, "Сампле_дата" се назива дефинисаним опсегом тАрраи = РеадДатаФромВоркбоок ("Д: \ Екцелфорум \ ЕкцелФорум оффице \ екцел тип стари код \ Дељени макро \ 23 \ 23СамплеДата.клс", "Сампле_Дата") 'Функција позивања ФиллЛистБок за додавање ставки у оквир за оквир' Доделите објекат оквира листе и поље као параметар ФиллЛистБок Ме .ЛистБок1, тАрраи 'Ослобађање променљивих низа и ослобађање меморије која се користи за њихове елементе. Ерасе тАрраи Енд Суб Привате Суб ФиллЛистБок (лб Као МСФормс.ЛистБок, РецордСетАрраи као варијанта) 'Поље за попуњавање листе лб са подацима из РецордСетАрраи Дим р Ас Лонг, ц Ас Лонг Витх лб .Цлеар' Додељивање вредности оквиру за листу за р = ЛБоунд (РецордСетАрраи , 2) У УБоунд (РецордСетАрраи, 2) .АддИтем Фор ц = ЛБоунд (РецордСетАрраи, 1) То УБоунд (РецордСетАрраи, 1) .Лист (р, ц) = РецордСетАрраи (ц, р) Нект ц Нект р 'Одабир ставке у пољу Листа подразумевано .ЛистИндек = -1 Заврши са Енд Суб Приватна функција РеадДатаФромВоркбоок (СоурцеФиле Ас Стринг, _ СоурцеРанге Ас Стринг) Ас Вариант 'захтева референцу на библиотеку Мицрософт АцтивеКс Дата Објецтс' (мени Алати> Референце у ВБЕ -у ) Дим дбЦоннецтион Као АДОДБ.Цоннецтион, рс Као АДОДБ.Рецордсет Дим дбЦоннецтионСтринг Ас Стринг 'Декларисање низа везе и управљачког програма за успостављање везе дбЦоннецтионСтринг = "ДРИВЕР = {Мицрософт Екцел Дривер (*.клс)}; РеадОнли = 1; ДБК = "& СоурцеФиле 'Креирање нове АДОДБ везе Поставите дбЦоннецтион = Нови АДОДБ.Цоннецтион Он Еррор ГоТо ИнвалидИнпут 'Отворите везу са базом података дбЦоннецтион.Опен дбЦоннецтионСтринг' Геттинг тхе рецордсет фром дефинед намед ранге Сет рс = дбЦоннецтион.Екецуте ("[" & СоурцеРанге & "]") Он Еррор ГоТо 0 'Враћа два димензионални низ са свим записима у рс РеадДатаФромВоркбоок = рс.ГетРовс 'Затворите скуп записа и везу са базом података рс.Затворите дбЦоннецтион.Цлосе Сет рс = Ништа није постављено дбЦоннецтион = Ништа Излазна функција' Код за руковање грешком ИнвалидИнпут: МсгБок "Изворна датотека или изворни опсег је неважећи! ", _ вбЕкцламатион," Добијте податке из затворене радне свеске "Крај функције 'Додајте доњи код у УсерФорм1 Опција Експлицитна приватна поднаредба ЦоммандБуттон1_Цлицк () Дим наме1 Ас Стринг Дим и Ас Интегер' Доделите изабрану вредност називу променљиве1 За и = 0 То ЛистБок1.ЛистЦоунт - 1 Иф ЛистБок1.Селецтед (и) тхен наме1 = ЛистБок1.Валуе Екит Фор Енд Иф Нект 'Унлоад тхе усерформ Унлоад Ме' Прикажите изабрано име МсгБок "Изабрали сте" & наме1 & "." Енд Суб Привате Суб УсерФорм_Инитиализе () Дим ЛистИтемс Ас Вариант, и Ас Интегер Дим СоурцеВБ Ас Воркбоок 'Искључивање екрана се ажурира Апплицатион.СцреенУпдатинг = Фалсе Витх Ме.ЛистБок1' Уклоните постојеће уносе из оквира са листом. СоурцеВБ = Воркбоокс.Опен ("Д: \ Екцелфорум \ ЕкцелФорум оффице \ екцел тип стари код \ Дељени макро \ 23 \ 23СамплеДата.клс", _ Нетачно, Тачно) 'Добијте опсег вредности које желите ЛистИтемс = СоурцеВБ.Ворксхеетс (1 ) .Ранге ("А2: А10"). Вредност 'Затворите изворну радну свеску без чувања промена СоурцеВБ.Затворите Нетачно Поставите СоурцеВБ = Ништа Апплицатион.СцреенУпдатинг = Труе' Претворите вредности у вертикални низ ЛистИтемс = Апплицатион.ВорксхеетФунцтион.Транспосе (ЛистИтемс) За и = 1 За УБоунд (ЛистИтемс) 'Попуните оквир са листом .АддИтем ЛистИтемс (и) Даље и' Одабиром ниједне ставке по подразумеваној вредности, поставите на 0 да бисте изабрали прву ставку. ЛистИндек = -1 Енд Витх Енд Суб 

Ако вам се допао овај блог, поделите га са пријатељима на Фацебооку. Такође, можете нас пратити на Твиттер -у и Фацебоок -у.

Волели бисмо да чујемо од вас, јавите нам како можемо побољшати наш рад и учинити га бољим за вас. Пишите нам на веб локацији е -поште