Приступите ВБА - Увоз / извоз Екцел - Упити, извештај, табела и обрасци

Овај водич ће обухватити начине увоза података из Екцела у Аццесс таблицу и начине извоза Аццесс објеката (упите, извештаје, табеле или обрасце) у Екцел.

Увезите Екцел датотеку у Аццесс

Да бисте увезли Екцел датотеку у Аццесс, користите ацИмпорт опцију од ДоЦмд.ТрансферСпреадсхеет :

ДоЦмд.ТрансферСпреадсхеет ацИмпорт, ацСпреадсхеетТипеЕкцел12, "Табле1", "Ц: \ Темп \ Боок1.клск", Тачно

Или можете користити ДоЦмд.ТрансферТект за увоз ЦСВ датотеке:

ДоЦмд.ТрансферТект ацЛинкДелим,, "Табле1", "Ц: \ Темп \ Боок1.клск", Тачно

Увезите Екцел у функцију приступа

Ова функција се може користити за увоз Екцел датотеке или ЦСВ датотеке у приступну табелу:

Јавна функција ИмпортФиле (Назив датотеке као стринг, ХасФиелдНамес као Боолеан, ТаблеНаме Ас Стринг) Као Боолеан 'Пример употребе: позовите ИмпортФиле ("Изаберите Екцел датотеку", "Екцел датотеке", "*.клск", "Ц: \", Тачно , Тачно, "ЕкцелИмпортТест", Тачно, Тачно, Нетачно, Тачно) На грешку Иди на ерр_хандлер Ако (Десно (Назив датотеке, 3) = "клс") Или ((Десно (Назив датотеке, 4) = "клск")) Затим ДоЦмд. ТрансферСпреадсхеет ацИмпорт, ацСпреадсхеетТипеЕкцел12, ТаблеНаме, Филенаме, блнХасФиелдНамес Енд Иф Иф (Ригхт (Филенаме, 3) = "цсв") тхен ДоЦмд.ТрансферТект ацЛинкДелим,, ТаблеНаме, Филенаме, Труе Енд иф Екит_Тхинг: ' Екцел табела већ постоји … и обришите је ако постоји. Ако ОбјецтЕкистс ("Табела", Име табеле) = Тачно Затим ДропТабле (Име табеле) Подесите цолВорксхеетс = Ништа Излаз Функција ерр_хандлер: Ако (Ерр.Нумбер = 3086 Или Ерр.Нумбер = 3274 Или Ерр. Нумбер = 3073) Анд еррЦоунт <3 Тхен еррЦоунт = еррЦоунт + 1 ЕлсеИф Ерр.Нумбер = 3127 Затим МсгБок "Поља на свим картицама су иста. Уверите се да је сваки лист има тачне називе колона ако желите да увезете више ставки ", вбЦритицал," Више табела није идентично "ИмпортФиле = Фалсе ГоТо Екит_Тхинг Елсе МсгБок Ерр.Нумбер &" - ​​"& Ерр.Десцриптион ИмпортФиле = Фалсе ГоТо Екит_Тхинг Настави Енд Иф Енд Фунцтион

Функцију можете позвати овако:

Приватни под ИмпортФиле_Екампле () Позовите ВБА_Аццесс_ИмпортЕкпорт.ИмпортФиле ("Ц: \ Темп \ Боок1.клск", Труе, "Импортед_Табле_1") Крај Суб

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

Да бисте извезли Аццесс објекат у нову Екцел датотеку, користите ДоЦмд.ОутпутТо метода или ДоЦмд.ТрансферСпреадсхеет метода:

Извезите упит у Екцел

Ова линија ВБА кода извезеће упит у Екцел помоћу ДоЦмд.ОутпутТо:

ДоЦмд.ОутпутТо ацОутпутКуери, "Куери1", ацФорматКСЛСКС, "ц: \ темп \ ЕкпортедКуери.клс"

Или уместо тога можете користити методу ДоЦмд.ТрансферСпреадсхеет:

ДоЦмд.ТрансферСпреадсхеет ацЕкпорт, ацСпреадсхеетТипеЕкцел8, "Куери1", "ц: \ темп \ ЕкпортедКуери.клс", Тачно

Белешка: Овај код се извози у КСЛСКС формат. Уместо тога, можете ажурирати аргументе за извоз у ЦСВ или КСЛС формат датотеке (нпр. ацФорматКСЛСКС до ацФорматКСЛС).

Извезите извештај у Екцел

Ова линија кода извешће извештај у Екцел помоћу ДоЦмд.ОутпутТо:

ДоЦмд.ОутпутТо ацОутпутРепорт, "Репорт1", ацФорматКСЛСКС, "ц: \ темп \ ЕкпортедРепорт.клс"

Или можете уместо тога да користите методу ДоЦмд.ТрансферСпреадсхеет:

ДоЦмд.ТрансферСпреадсхеет ацЕкпорт, ацСпреадсхеетТипеЕкцел8, "Репорт1", "ц: \ темп \ ЕкпортедРепорт.клс", Тачно

Извезите табелу у Екцел

Ова линија кода ће извести табелу у Екцел помоћу ДоЦмд.ОутпутТо:

ДоЦмд.ОутпутТо ацОутпутТабле, "Табле1", ацФорматКСЛСКС, "ц: \ темп \ ЕкпортедТабле.клс"

Или уместо тога можете користити методу ДоЦмд.ТрансферСпреадсхеет:

ДоЦмд.ТрансферСпреадсхеет ацЕкпорт, ацСпреадсхеетТипеЕкцел8, "Табле1", "ц: \ темп \ ЕкпортедТабле.клс", Тачно

Извезите образац у Екцел

Ова линија кода извезе образац у Екцел помоћу ДоЦмд.ОутпутТо:

ДоЦмд.ОутпутТо ацОутпутФорм, "Форм1", ацФорматКСЛСКС, "ц: \ темп \ ЕкпортедФорм.клс"

Или уместо тога можете користити методу ДоЦмд.ТрансферСпреадсхеет:

ДоЦмд.ТрансферСпреадсхеет ацЕкпорт, ацСпреадсхеетТипеЕкцел8, "Форм1", "ц: \ темп \ ЕкпортедФорм.клс", Тачно

Извези у Екцел функције

Ове команде из једне линије одлично функционишу при извозу у нову Екцел датотеку. Међутим, они неће моћи да извезу у постојећу радну свеску. У доњем одељку представљамо функције које вам омогућавају да додате извоз у постојећу Екцел датотеку.

Испод тога смо укључили неке додатне функције за извоз у нове Екцел датотеке, укључујући руковање грешкама и још много тога.

Извези у постојећу Екцел датотеку

Горе наведени примери кода одлично функционишу при извозу Аццесс објеката у нову Екцел датотеку. Међутим, они неће моћи да извезу у постојећу радну свеску.

За извоз Аццесс објеката у постојећу Екцел радну свеску створили смо следећу функцију:

Јавна функција АппендТоЕкцел (стрОбјецтТипе Ас Стринг, стрОбјецтНаме Ас Стринг, стрСхеетНаме Ас Стринг, стрФилеНаме Ас Стринг) Дим рст Као ДАО.Рецордсет Дим АпКСЛ Ас Екцел.Апплицатион Дим клВБк Ас Екцел.Воркбоок Дим клВСхТ Ас Екцел Ас Лонг = -4161 Цонст клЦентер Ас Лонг = -4108 Цонст клБоттом Ас Лонг = -4107 Цонст клЦонтинуоус Ас Лонг = 1 Изаберите случај стрОбјецтТипе Случај "Табела", "Упит" Сет рст = ЦуррентДб.ОпенРецордсет (стрОбјецтНаме, дбОпенДинаЦе, дбОпенДинаЦета, дбОпенДинаЦе "Форм" Сет рст = Формс (стрОбјецтНаме) .РецордсетЦлоне Цасе "Репорт" Сет рст = ЦуррентДб.ОпенРецордсет (Репортс (стрОбјецтНаме) .РецордСоурце, дбОпенДинасет, дбСееЦхангес) Енд Селецт Иф рст.РецордЦоунт = 0 Тада се М . ", вбИнформатион, ГетДБТитле Елсе Он Грешка Настави Следеће Постави АпКСЛ = ГетОбјецт (," Екцел.Апплицатион ") Ако је Ерр.Нумбер 0 Затим поставите АпКСЛ = ЦреатеОбјецт (" Екцел.Апплицатион ") Крај Ако је Ерр.Цлеар АпКСЛ.Висибле = Фалсе Поставите клВБк = АпКСЛ.Воркбоокс.Опен (стрФил еНаме) Подесите клВСх = клВБк.Схеетс.Адд клВСх.Наме = Лефт (стрСхеетНаме, 31) клВСх.Ранге ("А1"). Изаберите Уради до интЦоунт = рст.фиелдс.Цоунт АпКСЛ.АцтивеЦелл = рст.фиелдс (интЦоунт). Назив АпКСЛ.АцтивеЦелл.Оффсет (0, 1) .Одаберите интЦоунт = интЦоунт + 1 петља рст.МовеФирст клВСх.Ранге ("А2"). ЦопиФромРецордсет рст са АпКСЛ .Ранге ("А1"). Одаберите .Ранге (.Селецтион, .Селецтион.Енд (клТоРигхт)). Селецт .Селецтион.Интериор.Паттерн = клСолид .Селецтион.Интериор.ПаттернЦолорИндек = клАутоматиц .Селецтион.Интериор.ТинтАндСхаде = -0.25 .Селецтион.Интериор. клНоне .Селецтион.АутоФилтер .Целлс.ЕнтиреЦолумн.АутоФит .Целлс.ЕнтиреРов.АутоФит .Ранге ("Б2"). Одаберите .АцтивеВиндов.ФреезеПанес = Труе .АцтивеСхеет.Целлс.Селецт .АцтивеСхеет.Целлс. .ЕнтиреЦолумн.АутоФит клВСх.Ранге ("А1"). Изаберите .Висибле = Труе Енд Витх 'клВБ.Цлосе Труе' Сет клВБ = Ништа 'АпКСЛ.Куит' Сет АпКСЛ = Ништа не завршава ако функција Енд

Функцију можете користити овако:

Привате Суб АппендТоЕкцел_Екампле () Позовите ВБА_Аццесс_ИмпортЕкпорт.ЕкпортТоЕкцел ("Табела", "Табела1", "ВБАСхеет", "Ц: \ Темп \ Тест.клск") Крај Суб

Приметите да се од вас тражи да дефинишете:

  • Шта исписати? Табела, извештај, упит или образац
  • Назив објекта
  • Назив излазног листа
  • Путања и назив излазне датотеке.

Извезите СКЛ упит у Екцел

Уместо тога, можете да извезете СКЛ упит у Екцел користећи сличну функцију:

Јавна функција АппендТоЕкцелСКЛСтатемет (стрскл као низ, стрСхеетНаме као низ, стрФилеНаме као низ) Дим стрКуериНаме као низ Дим АпКСЛ као Екцел.Апликација Дим клВБк као Екцел.Радна свеска Дим клВСх као Екцел.Ворксхеет Инст клБоттом Ас Лонг = -4107 цонст клВАлигнЦентер = -4108 цонст клЦонтинуоус докле = 1 дим кдф Као ДАО.КуериДеф Дим РСТ Као ДАО.Рецордсет стрКуериНаме = "тмпКуериТоЕкпортТоЕкцел" Ако ОбјецтЕкистс ( "Куери", стрКуериНаме), а затим ЦуррентДб.КуериДефс.Делете стрКуериНаме Енд Иф Сет кдф = ЦуррентДб.ЦреатеКуериДеф (стрКуериНаме, стрскл) Сет рст = ЦуррентДб.ОпенРецордсет (стрКуериНаме, дбОпенДинасет) Иф рст.РецордЦоунт = 0 Онда МсгБок "Нема записа за извоз." АпКСЛ = ГетОбјецт (, "Екцел.Апплицатион") Ако је Ерр.Нумбер 0 Затим поставите АпКСЛ = ЦреатеОбјецт ("Екцел.Апплицатион") Крај ако је Ерр.Цлеар АпКСЛ.Висибле = Фалсе Сет клВБк = АпКСЛ.Воркбоокс.Опен (стрФилеНаме) Сет клВСх = клВБк.Схеет с.Адд клВСх.Наме = Лефт (стрСхеетНаме, 31) клВСх.Ранге ("А1"). Изаберите Уради до интЦоунт = рст.фиелдс.Цоунт АпКСЛ.АцтивеЦелл = рст.фиелдс (интЦоунт). Име АпКСЛ.АцтивеЦелл.Оффсет ( 0, 1) .Одаберите интЦоунт = интЦоунт + 1 петља рст.МовеФирст клВСх.Ранге ("А2"). ЦопиФромРецордсет рст са АпКСЛ .Ранге ("А1"). Одаберите .Ранге (.Селецтион, .Селецтион.Енд (клТоРигхт) ) .Изаберите .Избор.Интеријер.Узорак = клСолидан .Избор.Интеријер.УзоракБојеИндекс = клАутоматски .Избор.Интеријер.ТинтАндСхаде = -0.25 .Избор.Интеријер.УзоракТинтаСенца = 0 .СелецтионСеле. .ЕнтиреЦолумн.АутоФит .Целлс.ЕнтиреРов.АутоФит .Ранге ("Б2"). Изаберите .АцтивеВиндов.ФреезеПанес = Труе .АцтивеСхеет.Целлс. Одаберите .АцтивеСхеет.Целлс.ВрапТект = Фалсе. ("А1"). Одаберите .Висибле = Труе Енд Витх 'клВБ.Цлосе Труе' Сет клВБ = Ништа 'АпКСЛ.Куит' Сет АпКСЛ = Ништа се не завршава ако функција Енд

Овако се зове:

Привате Суб АппендТоЕкцелСКЛСтатемет_Екампле () Позовите ВБА_Аццесс_ИмпортЕкпорт.ЕкпортТоЕкцел ("СЕЛЕЦТ * ФРОМ Табле1", "ВБАСхеет", "Ц: \ Темп \ Тест.клск") Енд Суб

Где се од вас тражи да унесете:

  • СКЛ упит
  • Назив излазног листа
  • Путања и назив излазне датотеке.

Функција за извоз у нову Екцел датотеку

Ове функције вам омогућавају да извезете Аццесс објекте у нову Екцел радну свеску. Можда ће вам бити кориснији од једноставних појединачних редова на врху документа.

Јавна функција ЕкпортТоЕкцел (стрОбјецтТипе Ас Стринг, стрОбјецтНаме Ас Стринг, Оптионал стрСхеетНаме Ас Стринг, Оптионал стрФилеНаме Ас Стринг) Дим рст Ас ДАО.Рецордсет Дим АпКСЛ Ас Дим Објецт клВБк Ас Објецт Дим клВСх АсТ Објецт ДимТ 4161 Цонст клЦентер Ас Лонг = -4108 Цонст клБоттом Ас Лонг = -4107 Цонст клЦонтинуоус Ас Лонг = 1 Он Еррор ГоТо ЕкпортТоЕкцел_Ерр ДоЦмд.Хоургласс Труе Селецт Цасе стрОбјецтТипе Случај "Табле", "Куери" Сет рст = ЦуррентДб.ОпенДесет, ОпенТец, дБОпенДецт, дБОдРецт, , дбСееЦхангес) Цасе "Форм" Сет рст = Формс (стрОбјецтНаме) .РецордсетЦлоне Цасе "Репорт" Сет рст = ЦуррентДб.ОпенРецордсет (Репортс (стрОбјецтНаме) .РецордСоурце, дбОпенДинасет, дбСееЦхангес) записи за извоз. ", вбИнформатион, ГетДБТитле ДоЦмд.Хоургласс Фалсе Елсе Он Еррор Ресуме Нект Сет АпКСЛ = ГетОбјецт (," Екцел.Апплицатион ") Иф Ерр.Нумбер 0 Тхен Сет АпКСЛ = ЦреатеОбјецт (" Екцел.Апплицатион ") Енд Иф Ерр. Обриши грешку Иди на ЕкпортТоЕкцел_Ерр Сет клВБк = АпКСЛ.Воркбоокс.Адд АпКСЛ.Висибле = Фалсе Сет клВСх = клВБк.Ворксхеетс ("Схеет1") Иф Лен (стрСхеетНаме)> 0 тхен клВСх.НамеСхеме .Ранге ("А1"). Изаберите Урадите до интЦоунт = рст.фиелдс.Цоунт АпКСЛ.АцтивеЦелл = рст.фиелдс (интЦоунт). Име АпКСЛ.АцтивеЦелл.Оффсет (0, 1). Одаберите интЦоунт = интЦоунт + 1 петља рст. МовеФирст клВСх.Ранге ("А2"). ЦопиФромРецордсет рст Витх АпКСЛ .Ранге ("А1"). Селецт .Ранге (.Селецтион, .Селецтион.Енд (клТоРигхт)). Селецт .Селецтион.Интериор.Паттерн = клСолид .Селецтион. Интериор.ПаттернЦолорИндек = клАутоматиц .Селецтион.Интериор.ТинтАндСхаде = -0.25 .Селецтион.Интериор.ПаттернТинтАндСхаде = 0 .Селецтион.Бордерс.ЛинеСтиле = клНоне .Селецтион.АутоФилтер. Б2 "). Одаберите .АцтивеВиндов.ФреезеПанес = Труе .АцтивеСхеет.Целлс. Одаберите .АцтивеСхеет.Целлс.ВрапТект = Фалсе. Покушајте поново: Ако ФилеЕкистс (стрФилеНаме) Затим убијте стрФилеНаме Енд Иф Иф стрФилеНаме "" Тада клВБк.СавеАс стрФилеНаме, ФилеФормат: = 56 Енд Иф рст.Цлосе Сет рст = Ништа ДоЦмд.Хоургласс Фалсе Енд Ако ЕкпортТоЕкссЦитЕкцелл Фалсе ЕкпортТоЕкцелЦекЕкцелл Фалсе Енд ЕкпортТоЕкцел_Ерр: ДоЦмд.СетВарнингс Труе МсгБок Ерр.Десцриптион, вбЕкцламатион, Ерр.Нумбер ДоЦмд.Хоургласс Фалсе Ресуме ЕкпортТоЕкцел_Екит Крајња функција

Функција се може позвати овако:

Приватни под ЕкпортТоЕкцел_Екампле () Позовите ВБА_Аццесс_ИмпортЕкпорт.ЕкпортТоЕкцел ("Табле", "Табле1", "ВБАСхеет") Енд Суб
wave wave wave wave wave