2016-06-02 10 views
1

Ich erstelle eine Excel-Tabelle aus MS Access mit VBA.Excel VBA nicht korrekt auf Bereich Objekt

Mein Code ist:

Private Sub btn_Excel_NG_Click() 
Dim rst As DAO.Recordset 
Dim strSQL As String 
Dim qdfnew As DAO.QueryDef 
Dim RecordCount As String 
Dim xl As Excel.Application 
Dim wb As Excel.Workbook 
Dim ws As Excel.Worksheet 

' *********************** 
' ** CREATE QUERY 
' *********************** 

strSQL = "SELECT Event, DateStart, Suburb, FirstName, Name, Home, DOB, FROM SAT INNER JOIN tbl_records_emailed ON Event = Event WHERE (tbl_records_emailed.NGEmailed Is Null);" 

' *********************** 
' ** EXPORT TO EXCEL FILE 
' *********************** 

Set qdfnew = CurrentDb.CreateQueryDef("excelQuery", strSQL) 
FileName = "S:\Hub\Processed\Email\" & Format(Now, "ddmmyyyy_hhmm") & ".xlsx" 
DoCmd.TransferSpreadsheet acExport, 10, "excelQuery", FileName, True 
DoCmd.Close acQuery, "excelQuery" 
CurrentDb.QueryDefs.Delete qdfnew.Name 

' ******************** 
' ** FORMAT EXCEL FILE 
' ******************** 

Set xl = New Excel.Application 
Set wb = xl.Workbooks.Open(FileName) 
Set ws = wb.Worksheets(qdfnew.Name) 

With wb.Sheets(qdfnew.Name) 
    .rows("1:1").Font.Bold = True 
    .Columns("A:Z").AutoFit 
End With 

Dim tbl As ListObject 
Dim rng As Range 

wb.Worksheets(qdfnew.Name).Activate 
Set rng = ws.Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)) 

Set tbl = ws.ListObjects.Add(xlSrcRange, rng, , xlYes) 
tbl.TableStyle = "TableStylemedium2" 

Set tbl = Nothing 
wb.Save 
wb.Close 
Set wb = Nothing 
xl.Quit 
Set xl = Nothing 

End Sub 

Die Linie

Set rng = ws.Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)) 

verursacht den Fehler:

Laufzeitfehler '1004': Methode 'Range' des Objekts ‚_Global 'fehlgeschlagen

Ich verstehe, dass dies ist, weil ich nicht vollständig qualifiziert habe Verweis auf welches Blatt der Bereich ist - ich dachte, einschließlich 'ws' hätte es vollständig qualifiziert?

+2

'Set rng = ws.Range (ws.Range (" A1 "), ws.Range (" A1 "). SpecialCells (xlLastCell))' –

Antwort

2

Versuchen:

Set rng = ws.Range(ws.Range("A1"), ws.Range("A1").SpecialCells(xlLastCell)) 

Sie müssen sich voll und ganz Ihre Range Objekte qualifizieren.