Kaup, Chester
Chester_Kaup at kindermorgan.com
Mon Sep 27 13:56:14 CDT 2010
Thanks for the pointers. -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Darryl Collins Sent: Sunday, September 26, 2010 7:09 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Link to spreadsheet _______________________________________________________________________________________ Note: This e-mail is subject to the disclaimer contained at the bottom of this message. _______________________________________________________________________________________ Nice work Chester, Much better than linking to Excel. A couple of tweaks to your code will make things a bit more secure and sharper. This is pretty much all you need to do Set xl = CreateObject("Excel.Application") Set xlWB = xl.Workbooks.Open(FileName:="F:\Data\Public\Rig Schedule\Rig Schedule.xls", ReadOnly:=True, Password:="rig") Set xlWS = xlWB.Sheets("TA") You can drop all this code. 'Set xlWB = xl.ActiveWorkbook <-- Drop this, you have already set the xlWB in the line above 'xlWB.Sheets("TA").Select <-- No need to select anything 'Set xlWS = xlWB.ActiveSheet <-- not required. You can set the ws without making it active or selected 'xlWS.Range("A3").Select <-- Don't need this at all, no need to select anything in Excel. At the end of the code, make sure you close down the XL app correctly (otherwise it will stay in memory) and set your objects to nothing. xlWB.Close False ' Change to TRUE if you want to save the changes xl.Quit ' Will close the XL application set xlWS = nothing set xlWB = nothing set xl = nothing ' END OF CODE CHANGES. Cheers Darryl. -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Kaup, Chester Sent: Friday, 24 September 2010 1:39 AM To: 'Access Developers discussion and problem solving' Subject: Re: [AccessD] Link to spreadsheet I came up with a solution. I gave up the idea of linking and instead was able to copy the data into an access table. Here is what I came up with if anyone is curious. Option Compare Database Option Explicit Sub LinkSpreadsheet() On Error GoTo LinkSpreadsheet_Err Dim xl As New Excel.Application Dim xlWB As Excel.Workbook Dim xlWS As Excel.Worksheet Dim RetVal Dim strSQL As String Dim db As Database, rs As Recordset, r As Long Set db = CurrentDb With xl .Visible = True End With Set xlWB = xl.Workbooks.Open(FileName:="F:\Data\Public\Rig Schedule\Rig Schedule.xls", ReadOnly:=True, Password:="rig") Set xlWB = xl.ActiveWorkbook xlWB.Sheets("TA").Select Set xlWS = xlWB.ActiveSheet xlWS.Range("A3").Select 'delete the data in the access proposed TA Wells table and replace it with updated data strSQL = "DELETE * from [tbl Proposed TA Wells2];" DBEngine(0)(0).Execute strSQL, dbFailOnError ' exports data from the active worksheet to a table in an Access database ' get all records in a table Set rs = db.OpenRecordset("tbl Proposed TA Wells2", dbOpenTable) r = 3 ' the start row in the worksheet Do While Len(xlWS.Range("A" & r).Formula) > 0 ' repeat until first empty cell in column A With rs .AddNew ' create a new record ' add values to each field in the record .Fields("Priority") = xlWS.Range("A" & r).Value .Fields("Field Area") = xlWS.Range("B" & r).Value .Fields("Well") = xlWS.Range("C" & r).Value .Fields("Inactive Date") = xlWS.Range("D" & r).Value .Fields("Days Down") = xlWS.Range("E" & r).Value .Fields("Date Approved") = xlWS.Range("F" & r).Value .Fields("Days Scheduled") = xlWS.Range("G" & r).Value .Fields("CSG Pressure") = xlWS.Range("H" & r).Value .Fields("Pattern/ Well BOPD") = xlWS.Range("I" & r).Value .Fields("Maint Fee List") = xlWS.Range("J" & r).Value .Fields("KM Owned Expiration Date") = xlWS.Range("K" & r).Value .Fields("Status") = xlWS.Range("L" & r).Value .Fields("Engineer") = xlWS.Range("M" & r).Value .Fields("Comments") = xlWS.Range("N" & r).Value .Update ' stores the new record End With r = r + 1 ' next row Loop rs.Close Set rs = Nothing xlWB.Close SaveChanges:=False End Sub -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Darryl Collins Sent: Tuesday, September 21, 2010 6:36 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Link to spreadsheet _______________________________________________________________________________________ Note: This e-mail is subject to the disclaimer contained at the bottom of this message. _______________________________________________________________________________________ Thanks for checking that, one issue out of the way. Next suspicion (as has been discussed) would be transfer spreadsheet method. I move data between Excel and Access a lot and never use transferspreadsheet, I don't like using this at all. You might be better off using other ways. Some of them are slower, but much more reliable. In my experience transfer spreadsheet can be problematic and frankly, not to be trusted. have a look here, it might help <<http://www.excelyourbusiness.com.au/FormulaHelp.htm#FormulaExcelToAccessTnf>> this is probably even closer to what you need <<http://www.excelyourbusiness.com.au/ms_access_page.htm#AccessImportFromExcel>> Regards Darryl. -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Kaup, Chester Sent: Tuesday, 21 September 2010 11:55 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Link to spreadsheet Code shows that the file exists. Changing dim on varFileName to String made no difference. Still getting the error The file '-1' does not exist -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Darryl Collins Sent: Monday, September 20, 2010 7:12 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Link to spreadsheet _______________________________________________________________________________________ Note: This e-mail is subject to the disclaimer contained at the bottom of this message. _______________________________________________________________________________________ Hi Chester, Maybe obvious, but the first thing I would check is that the path and file name is 100% correct. If you are on a LAN I would recommend you change the drive to a URL name rather than a drive letter. You can use a function to test if the file exists first before attempting to open if. If the function below returns true the file exists. I would suggest you test for the file first. If the function passes you can then start checking other options for the failure. varFileName = "F:\DATA\PUBLIC\Rig Schedule\Rig Schedule.xls" If CheckFileOrDirExists(varFileName) = True Then wb.open blah blah.. End If '=========================================================== Function CheckFileOrDirExists(PathName As String) As Boolean 'Macro Purpose: Function returns TRUE if the specified file ' or folder exists, false if not. 'PathName : Supports Windows mapped drives or UNC ' : Supports Macintosh paths 'File usage : Provide full file path and extension 'Folder usage : Provide full folder path ' Accepts with/without trailing "\" (Windows) ' Accepts with/without trailing ":" (Macintosh) Dim iTemp As Integer 'Ignore errors to allow for error evaluation On Error Resume Next iTemp = GetAttr(PathName) 'Check if error exists and set response appropriately Select Case Err.Number Case Is = 0 CheckFileOrDirExists = True Case Else CheckFileOrDirExists = False End Select 'Resume error checking On Error GoTo 0 End Function '=============================================================================== -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Kaup, Chester Sent: Tuesday, 21 September 2010 5:07 AM To: Access Developers discussion and problem solving Subject: [AccessD] Link to spreadsheet I am using the following code in an attempt to link to a password protected spreadsheet. I am running it from a terminal server instance of Access 2007 if that matters. I get the following error message. Could it have anything to do with the spreadsheet asking if I want to enable macros when I open it manually? The file '-1' does not exist Here is the code: Sub LinkSpreadsheet() On Error GoTo LinkSpreadsheet_Err Dim varFileName As Variant Dim strPassword As String Dim db As Database Dim oExcel As Object, oWb As Object Set oExcel = CreateObject("Excel.Application") DoCmd.SetWarnings False Set db = CurrentDb() strPassword = "rig" varFileName = "F:\DATA\PUBLIC\Rig Schedule\Rig Schedule.xls" Set oWb = oExcel.Workbooks.Open(FileName:=varFileName, ReadOnly:=True,_ Password:=strPassword, UpdateLinks:=0, IgnoreReadOnlyRecommended:=True) DoCmd.TransferSpreadsheet acLink, 8, varFileName, True oWb.Close SaveChanges:=False DoCmd.SetWarnings True LinkSpreadsheet_Exit: oExcel.Quit Set oExcel = Nothing Exit Sub LinkSpreadsheet_Err: MsgBox Error$ Resume LinkSpreadsheet_Exit End Sub Chester Kaup Engineering Technician Kinder Morgan CO2 Company, LLP Office (432) 688-3797 FAX (432) 688-3799 No trees were killed in the sending of this message. However a large number of electrons were terribly inconvenienced. -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com _______________________________________________________________________________________ The information transmitted in this message and its attachments (if any) is intended only for the person or entity to which it is addressed. The message may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information, by persons or entities other than the intended recipient is prohibited. If you have received this in error, please contact the sender and delete this e-mail and associated material from any computer. The intended recipient of this e-mail may only use, reproduce, disclose or distribute the information contained in this e-mail and any attached files, with the permission of the sender. This message has been scanned for viruses. _______________________________________________________________________________________ -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com _______________________________________________________________________________________ The information transmitted in this message and its attachments (if any) is intended only for the person or entity to which it is addressed. The message may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information, by persons or entities other than the intended recipient is prohibited. If you have received this in error, please contact the sender and delete this e-mail and associated material from any computer. The intended recipient of this e-mail may only use, reproduce, disclose or distribute the information contained in this e-mail and any attached files, with the permission of the sender. This message has been scanned for viruses. _______________________________________________________________________________________ -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com _______________________________________________________________________________________ The information transmitted in this message and its attachments (if any) is intended only for the person or entity to which it is addressed. The message may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information, by persons or entities other than the intended recipient is prohibited. If you have received this in error, please contact the sender and delete this e-mail and associated material from any computer. The intended recipient of this e-mail may only use, reproduce, disclose or distribute the information contained in this e-mail and any attached files, with the permission of the sender. This message has been scanned for viruses. _______________________________________________________________________________________ -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com