Экспорт запросов из Access-Form в Excel с помощью Loop в VBA. Экспорт в excel из access vba


sql - Экспорт запросов из Access-Form в Excel с помощью Loop в VBA

вы можете использовать нижеприведенный код: это скопирует вид даты в вашей форме и скопирует его в один файл excel. Для этого вы просто перетаскиваете один элемент подформы из окна инструментов в форму и устанавливаете свойство этой подформы исходные данные в качестве вашего имени запроса и заменить имя подформы в коде

Private Sub Command48_Click() On Error GoTo Command13_Click_Err Me.subformName.SetFocus 'DoCmd.GoToControl "Policy Ref" DoCmd.RunCommand acCmdSelectAllRecords DoCmd.RunCommand acCmdCopy Dim xlapp As Excel.Application Set xlapp = CreateObject("Excel.Application") With xlapp .Workbooks.Add .ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:= _ False .Cells.Select .Cells.EntireColumn.AutoFit .Visible = True .Range("a1").Select End With Command13_Click_Exit: Exit Sub Command13_Click_Err: MsgBox Error$ Resume Command13_Click_Exit End sub '======================= you can you use below code: this will copy the datesheet view in your form and copy paste it in to one excel file .For this you just drag one sub form control from tool box in to your form and set the property of this sub form source data as your query name and replace the sub form name in the code Private Sub Command48_Click() On Error GoTo Command13_Click_Err Me.subformName.SetFocus 'DoCmd.GoToControl "Policy Ref" DoCmd.RunCommand acCmdSelectAllRecords DoCmd.RunCommand acCmdCopy Dim xlapp As Excel.Application Set xlapp = CreateObject("Excel.Application") With xlapp .Workbooks.Add .ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:= _ False .Cells.Select .Cells.EntireColumn.AutoFit .Visible = True .Range("a1").Select End With Command13_Click_Exit: Exit Sub Command13_Click_Err: MsgBox Error$ Resume Command13_Click_Exit End sub '''PPT Sub pptExoprort() Application.ScreenUpdating = False Application.Calculation = xlCalculationAutomatic Dim i As Integer Dim j As Integer Dim k As Integer Dim PPApp As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim slideNum As Integer Dim chartName As String Dim tableName As String Dim PPTCount As Integer Dim PPSlideCount As Long Dim oPPTShape As PowerPoint.Shape Dim ShpNm As String Dim ShtNm As String Dim NewSlide As String Dim myChart As PowerPoint.Chart Dim wb As Workbook Dim rngOp As Range Dim ro As Range Dim p As Integer Dim v, v1, v2, v3, Vtot, VcaGr Dim ws As Worksheet Dim ch Dim w As Worksheet Dim x, pArr Dim rN As String Dim rt As String Dim ax Dim yTbN As String 'Call InitializeGlobal ''start year offset prodSel = shtSet.Range("rSelProd") x = shtSet.Range("rngMap").Value pArr = fretPrVal(x, prodSel) TY = 11 'number of years in chart ThisWorkbook.Activate Set w = ActiveSheet Set PPApp = GetObject("", "Powerpoint.Application") '****************** PPTCount = PPApp.Presentations.Count If PPTCount = 0 Then MsgBox ("Please open a PPT to export the Charts!") Exit Sub End If Set PPPres = PPApp.ActivePresentation '****************** For j = 0 To UBound(pArr) If j = 0 Then rN = "janport" slideNum = 3 yTbN = "runport" Else rN = "janprod" & j slideNum = 3 + j yTbN = "runprod" & j End If chartName = "chtSalesPort" Set PPSlide = PPPres.Slides(slideNum) '************** PPApp.ActiveWindow.View.GotoSlide PPSlide.SlideIndex Set myChart = PPSlide.Shapes(chartName).Chart '****************** myChart.ChartData.Activate '******************** Set wb = myChart.ChartData.Workbook '*********** Set ws = wb.Worksheets(1) '************** Set rngOp = w.Range(rN).Offset(0, 1).Resize(12, 6) Set ro = rngOp ' v1 = ro.Offset(1, 22).Resize(Lc, 1) 'ws.ListObjects("Table1").Resize Range("$A$1:$B$" & Ty + 1) 'ws.ListObjects("Table1").Resize Range("$A$1:$" & Chr(Lc + 1 + 64) & "$" & Ty + 1) ws.Range("B2:g13").ClearContents '*********** rngOp.Copy '********** ws.Range("B2:g13").PasteSpecial xlPasteValues '****************** End Sub Sub Picture62_Click() Dim charNamel As String Dim leftm As Integer Dim toptm As Integer charNamel = "Chart 1" leftm = 35 toptm = 180 Call chartposition(leftm, toptm, charNamel) End Sub Sub chartposition(leftm, toptm, charNamel) ActiveSheet.ChartObjects(charNamel).Activate 'First we declare the variables we will be using Dim newPowerPoint As PowerPoint.Application Dim activeSlide As PowerPoint.Slide Dim cht As Excel.ChartObject Dim activslidenumber As Integer 'Look for existing instance On Error Resume Next Set newPowerPoint = GetObject(, "PowerPoint.Application") On Error GoTo 0 'Let create a new PowerPoint If newPowerPoint Is Nothing Then Set newPowerPoint = New PowerPoint.Application End If 'Make a presentation in PowerPoint ' If newPowerPoint.Presentations.Count = 0 Then ' newPowerPoint.Presentations.Add ' End If 'Show the PowerPoint newPowerPoint.Visible = True On Error GoTo endd: activslidenumber = Str(GetActiveSlide(newPowerPoint.ActiveWindow).SlideIndex) Set activeSlide = newPowerPoint.ActivePresentation.Slides(activslidenumber) ActiveChart.ChartArea.Copy On Error GoTo endddd: activeSlide.Shapes.PasteSpecial(DataType:=ppPasteDefault).Select 'activeSlide.Shapes.PasteSpecial(DataType:=ppPasteMetafilePicture).Select 'activeSlide.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, DisplayAsIcon:=msoFalse).Select endddd: newPowerPoint.ActiveWindow.Selection.ShapeRange.Left = leftm newPowerPoint.ActiveWindow.Selection.ShapeRange.Top = toptm GoTo enddddd: endd: MsgBox ("Please keep your PPT file opened") enddddd: End Sub

qaru.site

vba - Экспорт данных из Access в Excel2013 без активации

Пользователи могут экспортировать данные из моего приложения Access2013 в Excel2013. В Access CreateObject создает экземпляр Excel и через методы VBA данные обрабатываются и сохраняются в Excel в фоновом режиме. (см. выдержку кода ниже). Это хорошо работало в более ранних версиях Office, но если Excel2013 еще не активирован, окно активации появляется через несколько секунд. Но поскольку видимость объектов Excel установлена в значение false, окно активации скрыто для пользователя. Затем приложение Access закрывается, потому что один из методов VBA не возвращается, и пользователь не знает, что произошло или как решить проблему.

Идентификатор, подобный моему приложению: a) либо проверьте перед экспортом, активирован ли Excel, либо б) когда проблема возникла должным образом и предложит сообщение об ошибке.

Мои неудачные подходы: 1) проверьте статус активации перед экспортом: вызовите OSPP.VBS и выведите результаты в текстовый файл, затем проанализируйте текстовый файл. Проблемы: OSPP.VBS требует повышенных прав администратора; Я не мог найти документацию по выходному формату, и могут быть разные записи (время выполнения, пробный, полный...)

2) Работа с таймерами форм и DoEvents, чтобы поймать метод подвески после таймаута, но это не работает.

3) Запустите второе приложение Access, которое проверяет, возникает ли проблема Excel, и если это произойдет, убейте второе приложение. Проблема: время до появления окна активации меняется, поэтому иногда второе приложение работает нормально, иногда оно не работает.

Любые подсказки и идеи будут оценены!

Set objxl = CreateObject("Excel.Application") On Error GoTo ExcelErrorHandler objxl.Visible = False objxl.Workbooks.Open (strPath & TMP_FILE) objxl.Workbooks(TMP_FILE).Worksheets(1).Name = "Report" objxl.Workbooks(TMP_FILE).Save objxl.Workbooks.Open (strPath & "TemplateTexts.xlsx") objxl.Workbooks.Add (strPath & strCurrTemplate) '***** convert formulas to 'real' values in target excel sheet strFullFileName objxl.Cells.Select objxl.Selection.Copy objxl.Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False objxl.Range("A1").Select objxl.Selection.Copy objxl.ActiveWorkbook.SaveAs strFullFileName

qaru.site

Экспорт запросов из Access-Form в Excel с помощью Loop в VBA

вы можете использовать нижеприведенный код: это скопирует вид даты в вашей форме и скопирует его в один файл Excel. Для этого вы просто перетащите один элемент управления формы из окна инструментов в форму и установите свойство исходных данных этого Подчиненная форма как ваше имя запроса и заменить имя подпроекта формы в коде

Private Sub Command48_Click() On Error GoTo Command13_Click_Err Me.subformName.SetFocus 'DoCmd.GoToControl "Policy Ref" DoCmd.RunCommand acCmdSelectAllRecords DoCmd.RunCommand acCmdCopy Dim xlapp As Excel.Application Set xlapp = CreateObject("Excel.Application") With xlapp .Workbooks.Add .ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:= _ False .Cells.Select .Cells.EntireColumn.AutoFit .Visible = True .Range("a1").Select End With Command13_Click_Exit: Exit Sub Command13_Click_Err: MsgBox Error$ Resume Command13_Click_Exit End sub '======================= you can you use below code: this will copy the datesheet view in your form and copy paste it in to one excel file .For this you just drag one sub form control from tool box in to your form and set the property of this sub form's source data as your query name and replace the sub form name in the code Private Sub Command48_Click() On Error GoTo Command13_Click_Err Me.subformName.SetFocus 'DoCmd.GoToControl "Policy Ref" DoCmd.RunCommand acCmdSelectAllRecords DoCmd.RunCommand acCmdCopy Dim xlapp As Excel.Application Set xlapp = CreateObject("Excel.Application") With xlapp .Workbooks.Add .ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:= _ False .Cells.Select .Cells.EntireColumn.AutoFit .Visible = True .Range("a1").Select End With Command13_Click_Exit: Exit Sub Command13_Click_Err: MsgBox Error$ Resume Command13_Click_Exit End sub '''PPT Sub pptExoprort() Application.ScreenUpdating = False Application.Calculation = xlCalculationAutomatic Dim i As Integer Dim j As Integer Dim k As Integer Dim PPApp As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim slideNum As Integer Dim chartName As String Dim tableName As String Dim PPTCount As Integer Dim PPSlideCount As Long Dim oPPTShape As PowerPoint.Shape Dim ShpNm As String Dim ShtNm As String Dim NewSlide As String Dim myChart As PowerPoint.Chart Dim wb As Workbook Dim rngOp As Range Dim ro As Range Dim p As Integer Dim v, v1, v2, v3, Vtot, VcaGr Dim ws As Worksheet Dim ch Dim w As Worksheet Dim x, pArr Dim rN As String Dim rt As String Dim ax Dim yTbN As String 'Call InitializeGlobal ''start year offset prodSel = shtSet.Range("rSelProd") x = shtSet.Range("rngMap").Value pArr = fretPrVal(x, prodSel) TY = 11 'number of years in chart ThisWorkbook.Activate Set w = ActiveSheet Set PPApp = GetObject("", "Powerpoint.Application") '****************** PPTCount = PPApp.Presentations.Count If PPTCount = 0 Then MsgBox ("Please open a PPT to export the Charts!") Exit Sub End If Set PPPres = PPApp.ActivePresentation '****************** For j = 0 To UBound(pArr) If j = 0 Then rN = "janport" slideNum = 3 yTbN = "runport" Else rN = "janprod" & j slideNum = 3 + j yTbN = "runprod" & j End If chartName = "chtSalesPort" Set PPSlide = PPPres.Slides(slideNum) '************** PPApp.ActiveWindow.View.GotoSlide PPSlide.SlideIndex Set myChart = PPSlide.Shapes(chartName).Chart '****************** myChart.ChartData.Activate '******************** Set wb = myChart.ChartData.Workbook '*********** Set ws = wb.Worksheets(1) '************** Set rngOp = w.Range(rN).Offset(0, 1).Resize(12, 6) Set ro = rngOp ' v1 = ro.Offset(1, 22).Resize(Lc, 1) 'ws.ListObjects("Table1").Resize Range("$A$1:$B$" & Ty + 1) 'ws.ListObjects("Table1").Resize Range("$A$1:$" & Chr(Lc + 1 + 64) & "$" & Ty + 1) ws.Range("B2:g13").ClearContents '*********** rngOp.Copy '********** ws.Range("B2:g13").PasteSpecial xlPasteValues '****************** End Sub Sub Picture62_Click() Dim charNamel As String Dim leftm As Integer Dim toptm As Integer charNamel = "Chart 1" leftm = 35 toptm = 180 Call chartposition(leftm, toptm, charNamel) End Sub Sub chartposition(leftm, toptm, charNamel) ActiveSheet.ChartObjects(charNamel).Activate 'First we declare the variables we will be using Dim newPowerPoint As PowerPoint.Application Dim activeSlide As PowerPoint.Slide Dim cht As Excel.ChartObject Dim activslidenumber As Integer 'Look for existing instance On Error Resume Next Set newPowerPoint = GetObject(, "PowerPoint.Application") On Error GoTo 0 'Let's create a new PowerPoint If newPowerPoint Is Nothing Then Set newPowerPoint = New PowerPoint.Application End If 'Make a presentation in PowerPoint ' If newPowerPoint.Presentations.Count = 0 Then ' newPowerPoint.Presentations.Add ' End If 'Show the PowerPoint newPowerPoint.Visible = True On Error GoTo endd: activslidenumber = Str(GetActiveSlide(newPowerPoint.ActiveWindow).SlideIndex) Set activeSlide = newPowerPoint.ActivePresentation.Slides(activslidenumber) ActiveChart.ChartArea.Copy On Error GoTo endddd: activeSlide.Shapes.PasteSpecial(DataType:=ppPasteDefault).Select 'activeSlide.Shapes.PasteSpecial(DataType:=ppPasteMetafilePicture).Select 'activeSlide.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, DisplayAsIcon:=msoFalse).Sele

stackoverrun.com

sql - Использование Excel VBA для экспорта данных в таблицу MS Access

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

Public Sub TransData() Application.ScreenUpdating = False Application.EnableAnimations = False Application.EnableEvents = False Application.DisplayAlerts = False ActiveWorkbook.Worksheets("Folio_Data_original").Activate Call MakeConnection("fdMasterTemp") For i = 1 To rcount - 1 rs.AddNew rs.Fields("fdName") = Cells(i + 1, 1).Value rs.Fields("fdDate") = Cells(i + 1, 2).Value rs.Update Next i Call CloseConnection Application.ScreenUpdating = True Application.EnableAnimations = True Application.EnableEvents = True Application.DisplayAlerts = True End Sub Public Function MakeConnection(TableName As String) As Boolean '*********Routine to establish connection with database Dim DBFullName As String Dim cs As String DBFullName = Application.ActiveWorkbook.Path & "\FDData.mdb" cs = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DBFullName & ";" Set cn = CreateObject("ADODB.Connection") If Not (cn.State = adStateOpen) Then cn.Open cs End If Set rs = CreateObject("ADODB.Recordset") If Not (rs.State = adStateOpen) Then rs.Open TableName, cn, adOpenKeyset, adLockOptimistic End If End Function Public Function CloseConnection() As Boolean '*********Routine to close connection with database On Error Resume Next If Not rs Is Nothing Then rs.Close End If If Not cn Is Nothing Then cn.Close End If CloseConnection = True Exit Function End Function

Выше код работает отлично для нескольких сотен строк записей, но, видимо, для экспорта будет больше данных. Как и 25000 записей, можно экспортировать без циклирования по всем записям и только один оператор SQL INSERT для массового ввода всех данных в Стол Ms.Access за один раз?

Любая помощь будет очень оценена.

РЕДАКТИРОВАТЬ: РЕЗУЛЬТАТ ВЫПУСКА

Просто для информации, если кто-то ищет этого, я сделал много поиска и нашел, что следующий код работает отлично для меня, и это очень быстро из-за SQL INSERT (за 27 секунд за 27 секунд)!!!!):

Public Sub DoTrans() Set cn = CreateObject("ADODB.Connection") dbPath = Application.ActiveWorkbook.Path & "\FDData.mdb" dbWb = Application.ActiveWorkbook.FullName dbWs = Application.ActiveSheet.Name scn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath dsh = "[" & Application.ActiveSheet.Name & "$]" cn.Open scn ssql = "INSERT INTO fdFolio ([fdName], [fdOne], [fdTwo]) " ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh cn.Execute ssql End Sub

Все еще работая над добавлением имени конкретных полей вместо использования "Выбрать *", попробовал различные способы добавления имен полей, но не может заставить их работать.

qaru.site