Charlotte Foust
cfoust at infostatsystems.com
Mon Nov 22 13:06:29 CST 2004
Are you trying to do it with DAO or ADO, John? I have some ADO code I
wrote way back when to drop and recreate a textlink and it handled XL as
an option. I've attached it for whatever use it might be. Don't be
critical, this was early in my use of ADO.
Charlotte Foust
<Code>
Public Function LinkExternalFileADO(ByVal strTextFileName As String, _
ByVal strLinkTable As String, _
ByVal strLinkSpecRange As String, _
Optional blnXL As Boolean) As Boolean
'Created by Charlotte Foust
'drops and relinks the temp table
'and returns a boolean value for
'the success of the operation
'last modified 7/5/2001
'Sample call: LinkTextFileADO("MyTable.tab","MyTable","MyTable
Spec")
'
LinkTextFileADO("MySheet.xls","MySheet","MyRange",True)
On Error GoTo Proc_err
Dim cat As ADOX.Catalog
Dim cnn As ADODB.Connection
Dim errsCnn As ADODB.Errors
Dim errCurr As ADODB.Error
'initialize the return value
LinkExternalFileADO = True
'initialize the object variables
Set cnn = CurrentProject.Connection
Set cat = New ADOX.Catalog
cat.ActiveConnection = cnn
Set errsCnn = cnn.Errors
errsCnn.Clear
'if the file exists, try to link it
If strLinkTable <> "" Then
'If no path was included, use the current path
If InStr(strTextFileName, "\") = 0 Then
strTextFileName = CurrentProject.Path & "\" & strTextFileName
End If 'InStr(strTextFileName, "\") = 0
'if the file exists then ...
If Dir(strTextFileName) <> "" Then
On Error Resume Next
'delete the existing table link
cat.Tables.Delete strLinkTable
On Error GoTo Proc_err
'link either a text file or an Excel spreadsheet
If Not blnXL Then
'create a new link to the text file
DoCmd.TransferText acLinkDelim, strLinkSpecRange, _
strLinkTable, strTextFileName
Else 'If Not blnXL
'create a new link to the Excel file
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, _
strLinkTable, strTextFileName, True,
strLinkSpecRange
End If 'Not blnXL
Else 'If Dir(strTextFileName) <> ""
'not a valid filename or path
LinkExternalFileADO = False
End If 'Dir(strTextFileName) <> ""
End If
Proc_exit:
'cleanup and exit
On Error Resume Next
Set cat = Nothing
Set errsCnn = Nothing
Set errCurr = Nothing
Set cnn = Nothing
Exit Function
Proc_err:
If errsCnn.Count > 0 Then
For Each errCurr In errsCnn
MsgBox "Error #" & errCurr.Number & "--" & errCurr.Description _
& vbCrLf & CurrentProject.Name & ".LinkTextFileADO"
Next errCurr
errsCnn.Clear
End If
If Err <> 0 Then
MsgBox Err.Number & "--" & Err.Description & vbCr _
& " in LinkTextFileADO", vbOKOnly
End If
LinkExternalFileADO = False
Resume Proc_exit
End Function 'LinkExternalFileADO(ByVal strTextFileName As String, _
ByVal strLinkTable As String, _
ByVal strLinkSpecRange As String, _
Optional blnXL As Boolean) As Boolean
</Code>
-----Original Message-----
From: Colby, John [mailto:JColby at dispec.com]
Sent: Monday, November 22, 2004 9:53 AM
To: 'AccessD at DatabaseAdvisors.com'
Subject: [AccessD] Linking to an excel spreadsheet
Does anyone have code for linking to an excel spreadsheet?
If I manually create a link, the wizard finds all the fields, sets up
with the "first line has field names" etc. Everything works fine.
However if the table is not linked already, I need to create a tabledef,
set the SourceTableName and Connect properties. If I then try to append
the tabledef to db.tabledefs I get an error that no fields are defined.
It is obvious that a LOT more is involved here. It appears that I have
to open the spreadsheet, get the first line, create fields with the data
in the first line, somehow figure out the datatype of each column etc.
Is there a prebuilt code I can call to do all this stuff? If the wizard
can do it, then the code behind the wizard could do it for me.
Has anyone ever done this?
John W. Colby
The DIS Database Guy
--
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com