Увезите податке из затворене радне свеске (АДО) помоћу ВБА у Мицрософт Екцелу

Anonim

Ако желите да увезете много података из затворене радне свеске, то можете учинити помоћу АДО -а и доњег макронаредбе.
Ако желите да преузмете податке са другог радног листа осим са првог радног листа у затвореној радној свесци,
морате да се обратите кориснички дефинисаном именованом опсегу. Доњи макро се може користити овако (у Екцелу 2000 или новијем):

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

Други метод који не користи методу ЦопиФромРецордСет Са доњим макроом можете извршити увоз и имати бољу контролу над резултатима враћеним из записа записа.

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

Пример макроа претпоставља да је ваш ВБА пројекат додао референцу у библиотеку објеката АДО.
То можете учинити из ВБЕ -а одабиром менија Алати, Референце и одабиром Мицрософт
АцтивеКс Дата Објецтс к.к Објектна библиотека.
Користите АДО ако можете бирати између АДО и ДАО за увоз или извоз података.