Mark A Matte
markamatte at hotmail.com
Wed May 9 10:29:52 CDT 2007
Thanks Shamil, I was just about to email you back. I added a few lines to what you first sent and it worked like a charm. Adding to the call: Dim xlApp As Excel.Application MergeWorkbooks xlApp, "MergedBooks.xls", "C:\", "test.xls", "test1.xls" Adding to the code: ' Create new workbook Set rxlApp = New Excel.Application Also, to release the merged file: rxlApp.Quit And finally to rename the sheets: wbk.Worksheets(i).Name = Left(evar, InStr(1, evar, ".", vbTextCompare) - 1) Thank you very much. This is just what I needed. Mark A. Matte >From: "Shamil Salakhetdinov" <shamil at users.mns.ru> >Reply-To: Access Developers discussion and problem >solving<accessd at databaseadvisors.com> >To: "'Access Developers discussion and problem >solving'"<accessd at databaseadvisors.com> >Subject: Re: [AccessD] Report to Excel_ >Date: Wed, 9 May 2007 19:15:49 +0400 > >Hi Mark, > >Here is the code to call from MS Access, which shouldn't fail (watch line >wraps!): > >Option Explicit > >Public Sub TestXLMerge() >Dim strPathName As String >Dim strReport As String >Dim xlApp As Object 'Excel.Application > > strPathName = AppPath & "test01.xls" > strReport = "rptInvSummary" > Access.Application.DoCmd.OutputTo acOutputReport, strReport, >acFormatXLS, strPathName > > strPathName = AppPath & "test02.xls" > strReport = "rptInvNewSummary" > Access.Application.DoCmd.OutputTo acOutputReport, strReport, >acFormatXLS, strPathName > > Set xlApp = CreateObject("Excel.Application") > MergeWorkbooks xlApp, "MergedBooks.xls", AppPath, "test01.xls", >"test02.xls" > xlApp.Quit > Set xlApp = Nothing >End Sub > >Public Function MergeWorkbooks( _ > ByRef rxlApp As Object, _ > ByVal vstrSummaryWbkFileName As String, _ > ByVal vstrFolder As String, _ > ParamArray avar() As Variant) As Boolean >' This function merges *FIRST* worksheet of every >' workbook, which filename is specified in >' avar() ParamArray and which are located in >' vstrFolder folder. >' Merged workbook is saved into the folder of the >' source workbooks vstrFolder and this merged >' workbook gets the filename vstrSummaryWbkFileName >On Error GoTo HandleErr >Dim wbk As Object 'Excel.Workbook >Dim wbkImp As Object 'Excel.Workbook >Dim impWbkFullPath As String >Dim mergeWbkFullPath As String >Dim evar As Variant >Dim i As Integer > ' Check that source workbooks list is not empty > If UBound(avar) = -1 Then > Err.Raise vbObjectError + 1, "MergeWorkbooks", _ > "The list of workbooks to merge is empty." > End If > ' If absent add backslash to folder name > If Len(vstrFolder) > 0 Then > If Right(vstrFolder, 1) <> "\" Then _ > vstrFolder = vstrFolder & "\" > End If > ' Create new workbook > Set wbk = rxlApp.Workbooks.Add > ' Delete all but the first worksheet in this new workbook > For i = wbk.worksheets.Count To 2 Step -1 > rxlApp.DisplayAlerts = False > wbk.worksheets(i).Delete > rxlApp.DisplayAlerts = True > Next i > i = 1 > ' Merge source workbooks into summary workbook > For Each evar In avar > impWbkFullPath = vstrFolder & CStr(evar) > Set wbkImp = rxlApp.Workbooks.Open(impWbkFullPath) > wbkImp.worksheets(1).Cells.Copy > If wbk.worksheets.Count < i Then _ > wbk.worksheets.Add After:=wbk.worksheets(i - 1) > wbk.worksheets(i).Activate > wbk.worksheets(i).Paste > wbk.worksheets(i).Cells(1, 1).Select > wbk.worksheets(i).Name = getUniqueName(wbkImp, 1, wbk) > rxlApp.DisplayAlerts = False > wbkImp.Close > rxlApp.DisplayAlerts = True > i = i + 1 > Next evar > wbk.worksheets(1).Activate > > mergeWbkFullPath = vstrFolder & vstrSummaryWbkFileName > ' Delete merged workbook if it already exists > If Len(Dir(mergeWbkFullPath, vbNormal)) Then _ > Kill mergeWbkFullPath > ' Save merged workbook > wbk.SaveAs mergeWbkFullPath > ' Close workbook > wbk.Close SaveChanges:=False > Set wbk = Nothing > > MergeWorkbooks = True >HandleExit: > Exit Function >HandleErr: > MergeWorkbooks = False > MsgBox "MergeWorkbooks: Err = " & Err.Number & " - " & Err.Description > Resume HandleExit > Resume >End Function > >Private Property Get AppPath() As String > AppPath = Access.Application.CurrentProject.Path & "\" >End Property > >Private Function getUniqueName( _ > ByRef rwbkImp As Object, _ > ByVal impWbkWksIndex As Integer, _ > ByVal rwbkDst As Object) _ > As String >On Error Resume Next >Dim strWksName As String >Dim wks As Object >Dim i As Integer > strWksName = rwbkImp.worksheets(impWbkWksIndex).Name > Set wks = rwbkDst.worksheets(strWksName) > If wks Is Nothing Then > getUniqueName = strWksName > Exit Function > End If > i = 1 > Do > Set wks = rwbkDst.worksheets(strWksName & "_" & CStr(i)) > Loop Until Not wks Is Null > getUniqueName = strWksName & "_" & CStr(i) >End Function > > >-- >Shamil > >-----Original Message----- >From: accessd-bounces at databaseadvisors.com >[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Mark A Matte >Sent: Wednesday, May 09, 2007 6:37 PM >To: accessd at databaseadvisors.com >Subject: Re: [AccessD] Report to Excel_ > >Thanks Shamil, > >The sample call failed...because variable not defined"xlApp". Do I Dim it >as excel.application? > >Thanks, > >Mark A. Matte > >P.S...They are using office97. > > > >From: "Shamil Salakhetdinov" <shamil at users.mns.ru> > >Reply-To: Access Developers discussion and problem > >solving<accessd at databaseadvisors.com> > >To: "'Access Developers discussion and problem > >solving'"<accessd at databaseadvisors.com> > >Subject: Re: [AccessD] Report to Excel_ > >Date: Wed, 9 May 2007 12:24:15 +0400 > > > >Hello Mark, > > > >Below is the first version of function to merge workbooks (watch line > >wraps!). > > > >Enhancements to this code might follow today/tomorrow... > > > >Sample call: > >============ > >MergeWorkbooks xlApp, "MergedBooks.xls", "C:\Temp", "one.xls", "two.xls" > > > >Code: > >===== > > > >Public Function MergeWorkbooks( _ > > ByRef rxlApp As Object, _ > > ByVal vstrSummaryWbkFileName As String, _ > > ByVal vstrFolder As String, _ > > ParamArray avar() As Variant) As Boolean > >' This function merges *FIRST* worksheet of every > >' workbook, which filename is specified in > >' avar() ParamArray and which are located in > >' vstrFolder folder. > >' Merged workbook is saved into the folder of the > >' source workbooks vstrFolder and this merged > >' workbook gets the filename vstrSummaryWbkFileName > >On Error GoTo HandleErr > >Dim wbk As Excel.Workbook > >Dim wbkImp As Excel.Workbook > >Dim impWbkFullPath As String > >Dim mergeWbkFullPath As String > >Dim evar As Variant > >Dim i As Integer > > ' Check that source workbooks list is not empty > > If UBound(avar) = -1 Then > > Err.Raise vbObjectError + 1, "MergeWorkbooks", _ > > "The list of workbooks to merge is empty." > > End If > > ' If absent add backslash to folder name > > If Len(vstrFolder) > 0 Then > > If Right(vstrFolder, 1) <> "\" Then _ > > vstrFolder = vstrFolder & "\" > > End If > > ' Create new workbook > > Set wbk = rxlApp.Workbooks.Add > > ' Delete all but the first worksheet in this new workbook > > For i = wbk.Worksheets.Count To 2 Step -1 > > rxlApp.DisplayAlerts = False > > wbk.Worksheets(i).Delete > > rxlApp.DisplayAlerts = True > > Next i > > i = 1 > > ' Merge source workbooks into summary workbook > > For Each evar In avar > > impWbkFullPath = vstrFolder & CStr(evar) > > Set wbkImp = rxlApp.Workbooks.Open(impWbkFullPath) > > wbkImp.Worksheets(1).Cells.Copy > > If wbk.Worksheets.Count < i Then _ > > wbk.Worksheets.Add After:=wbk.Worksheets(i - 1) > > wbk.Worksheets(i).Activate > > wbk.Worksheets(i).Paste > > wbk.Worksheets(i).Cells(1, 1).Select > > rxlApp.DisplayAlerts = False > > wbkImp.Close > > rxlApp.DisplayAlerts = True > > i = i + 1 > > Next evar > > wbk.Worksheets(1).Activate > > > > mergeWbkFullPath = vstrFolder & vstrSummaryWbkFileName > > ' Delete merged workbook if it already exists > > If Len(Dir(mergeWbkFullPath, vbNormal)) Then _ > > Kill mergeWbkFullPath > > ' Save merged workbook > > wbk.SaveAs mergeWbkFullPath > > > > MergeWorkbooks = True > >HandleExit: > > Exit Function > >HandleErr: > > MergeWorkbooks = False > > MsgBox "MergeWorkbooks: Err = " & Err.Number & " - " & >Err.Description > > Resume HandleExit > >End Function > > > > > >-- > >Shamil > > > > > >-----Original Message----- > >From: accessd-bounces at databaseadvisors.com > >[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Mark A Matte > >Sent: Wednesday, May 09, 2007 12:53 AM > >To: accessd at databaseadvisors.com > >Subject: Re: [AccessD] Report to Excel_ > > > >Thanks Michael, > > > >I actually got the formatting like I needed. I'm just having issues > >getting > > > >the worksheets into 1 workbook. > > > >Thanks, > > > >Mark A. Matte > > > > > > >From: "Michael R Mattys" <mmattys at rochester.rr.com> > > >Reply-To: Access Developers discussion and problem > > >solving<accessd at databaseadvisors.com> > > >To: "Access Developers discussion and problem > > >solving"<accessd at databaseadvisors.com> > > >Subject: Re: [AccessD] Report to Excel_ > > >Date: Tue, 8 May 2007 13:58:26 -0400 > > > > > >Mark, > > > > > >You could put most of your formatting in an xlt, but it's going > > >to take a bit of fancy automation to replicate your report. > > > > > >Michael R. Mattys > > >MapPoint & Access Dev > > >www.mattysconsulting.com > > > > > >----- Original Message ----- > > >From: "Mark A Matte" <markamatte at hotmail.com> > > >To: <accessd at databaseadvisors.com> > > >Sent: Tuesday, May 08, 2007 12:55 PM > > >Subject: Re: [AccessD] Report to Excel_ > > > > > > > > > > Thanks Jim, > > > > > > > > I need to export a report because of the conditional formatting. > > > > TransferSpreadsheet won't work with reports. > > > > > > > > Any thoughts? > > > > > > > > Thanks, > > > > > > > > Mark A. Matte > > > > > > > > > > > >>From: "Jim Hewson" <JHewson at karta.com> > > > >>Reply-To: Access Developers discussion and problem > > > >>solving<accessd at databaseadvisors.com> > > > >>To: "Access Developers discussion and problem > > > >>solving"<accessd at databaseadvisors.com> > > > >>Subject: Re: [AccessD] Report to Excel > > > >>Date: Mon, 7 May 2007 16:27:24 -0500 > > > >> > > > >>Mark, > > > >>I do this frequently. In one export I end up with 15 worksheets and > > > >>manipulate the date in Excel via Access. > > > >> > > > >>I would use TransferSpreadsheet instead of what you have. > > > >>Also, put Set appExcel = New Excel.Application before the > > > >>TransferSpreadsheet command. > > > >> > > > >>If you use something like: > > > >> > > > >> DoCmd.TransferSpreadsheet acExport, , strReport1, strPathName, > >True > > > >> DoCmd.TransferSpreadsheet acExport, , strReport2, strPathName, > >True > > > >> > > > >>It will export to separate spreadsheets. > > > >> > > > >>HTH > > > >> > > > >>Jim > > > >>jhewson at karta.com > > > >> > > > >> > > > >>-----Original Message----- > > > >>From: accessd-bounces at databaseadvisors.com > > > >>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Mark A > >Matte > > > >>Sent: Monday, May 07, 2007 4:00 PM > > > >>To: accessd at databaseadvisors.com > > > >>Subject: [AccessD] Report to Excel > > > >> > > > >>Hello All, > > > >> > > > >>I found the code below in the archives from Jim Hale...Anyway to use > > >this > > > >>approach but to have 2 reports go to the same workbook...just > >different > > > >>tabs? > > > >> > > > >>Thanks, > > > >> > > > >>Mark A. Matte > > > >> > > > >>*********Code From Jim**************** > > > >>Sub rpt_to_excel() > > > >>Dim appExcel As Excel.Application, strpathname As String Dim > >strpathnew > > > >>As String, strReport As String > > > >> > > > >>strpathname = "C:\test.xls" > > > >>strpathnew = "C:\test2.xls" > > > >>strReport = "rptInvsummary" > > > >>DoCmd.OutputTo acOutputReport, strReport, acFormatXLS, strpathname > > > >> > > > >>Set appExcel = New Excel.Application > > > >> > > > >>'format your report > > > >> With appExcel > > > >> .Workbooks.Open strpathname, 0 > > > >> .Visible = True 'just to watch the sheet > > > >> .Range("A1:G1").Select > > > >> .Selection.Font.Bold = True > > > >> .Selection.Font.Name = "Arial" > > > >> .Selection.Font.Size = 12 > > > >> .ActiveWorkbook.SaveAs > > >Filename:=strpathnew,FileFormat:=xlNormal > > > >> End With > > > >> appExcel.Quit > > > >> Set appExcel = Nothing > > > >>End Sub > > > >> > >_________________________________________________________________ >PC Magazines 2007 editors choice for best Web mailaward-winning Windows >Live Hotmail. >http://imagine-windowslive.com/hotmail/?locale=en-us&ocid=TXT_TAGHM_migratio >n_HM_mini_pcmag_0507 > > > >-- >AccessD mailing list >AccessD at databaseadvisors.com >http://databaseadvisors.com/mailman/listinfo/accessd >Website: http://www.databaseadvisors.com _________________________________________________________________ Catch suspicious messages before you open themwith Windows Live Hotmail. http://imagine-windowslive.com/hotmail/?locale=en-us&ocid=TXT_TAGHM_migration_HM_mini_protection_0507