2017-03-16 91 views
0

我將查詢結果輸出到Excel,並希望通過Access VBA語法進行格式化。每次嘗試添加格式時,都會出現錯誤。我被困在一個從Access訪問VBA的格式Excel工作表

無法設置Range類

這是我的語法的Horizo​​ntalAlignment屬性 - 應該怎樣改變,以便需要語法可以修改的Excel?

Private Sub ToExcel_Click() 
Dim lngColumn As Long 
Dim xlx As Object, xlw As Object, xls As Object, xlc As Object 
Dim dbs As DAO.Database 
Dim rst As DAO.Recordset 
Dim strPathFileName As String, strWorksheetName As String 
Dim strRecordsetDataSource As String 
Dim blnEXCEL As Boolean, blnHeaderRow As Boolean 

    blnEXCEL = False 

    strPathFileName = "Z:\House\Data.xlsx" 
    strRecordsetDataSource = "Fa" 
    blnHeaderRow = True 
    On Error Resume Next 
    Set xlx = GetObject(, "Excel.Application") 
    If Err.Number <> 0 Then 
      Set xlx = CreateObject("Excel.Application") 
      blnEXCEL = True 
    End If 
    Err.Clear 
    On Error GoTo 0 
    xlx.Visible = True 
    Set xlw = xlx.Workbooks.Add 
    Set xls = xlw.Worksheets(1) 
    xls.Name = "Cu" 
    Set xlc = xls.Range("A1") 
    Set dbs = CurrentDb() 
    Set rst = dbs.OpenRecordset(strRecordsetDataSource, dbOpenDynaset, dbReadOnly) 
    If rst.EOF = False And rst.BOF = False Then 
      If blnHeaderRow = True Then 
       For lngColumn = 0 To rst.Fields.Count - 1 
         xlc.Offset(0, lngColumn).Value = rst.Fields(lngColumn).Name 
       Next lngColumn 
       Set xlc = xlc.Offset(1, 0) 
      End If 
      xlc.CopyFromRecordset rst 
    End If 

    rst.Close 
    Set rst = Nothing 
    dbs.Close 
    Set dbs = Nothing 

    With xls 
     .Range("A1:N1").Select 
     .Columns("A:N").HorizontalAlignment = xlCenter 
     .Columns("A:N").VerticalAlignment = xlBottom 
     .Columns("A:N").WrapText = True 
     .Columns("A:N").Orientation = 0 
     .Columns("A:N").AddIndent = False 
     .Columns("A:N").IndentLevel = 0 
     .Columns("A:N").ShrinkToFit = False 
     .Columns("A:N").ReadingOrder = xlContext 
     .Columns("A:N").MergeCells = False 
     .Columns("A:N").Selection.Font.Bold = True 
     .Columns("N:N").ColumnWidth = 8.86 
     .Columns("I:I").ColumnWidth = 8.86 
     .Columns("C:G").Select 
     .Selection.NumberFormat = "$#,##0" 
     .Columns("J:J").Select 
     .Selection.NumberFormat = "$#,##0" 
     .Columns("K:M").Select 
     .Selection.NumberFormat = "0%" 
     .Range("P18").Select 
     .Columns("A:A").EntireColumn.AutoFit 
     .Columns("B:B").EntireColumn.AutoFit 
     .Range("A1").Select 
    End With 

    Set xlc = Nothing 
    Set xls = Nothing 
    xlw.SaveAs strPathFileName 
    xlw.Close False 
    Set xlw = Nothing 
    If blnEXCEL = True Then xlx.Quit 
    Set xlx = Nothing 
End Sub 

編輯
我想下面的語法,而我得到的

所需的對象

就行了錯誤Selection.Font.Bold = True

這個充滿修飾語法

With xls 
     '.Range("A1:N1").Select 
     .Columns("A:N").Select 
     Selection.Font.Bold = True 
     .Columns("A:N").HorizontalAlignment = xlCenter 
     .Columns("A:N").VerticalAlignment = xlBottom 
     .Columns("A:N").WrapText = True 
     .Columns("A:N").Orientation = 0 
     .Columns("A:N").AddIndent = False 
     .Columns("A:N").IndentLevel = 0 
     .Columns("A:N").ShrinkToFit = False 
     .Columns("A:N").ReadingOrder = xlContext 
     .Columns("A:N").MergeCells = False 
     '.Columns("A:N").Selection.Font.Bold = True 
     .Columns("N:N").ColumnWidth = 8.86 
     .Columns("I:I").ColumnWidth = 8.86 
     .Columns("C:G").Select 
     Selection.NumberFormat = "$#,##0" 
     .Columns("J:J").Select 
     Selection.NumberFormat = "$#,##0" 
     .Columns("K:M").Select 
     Selection.NumberFormat = "0%" 
     .Range("P18").Select 
     .Columns("A:A").EntireColumn.AutoFit 
     .Columns("B:B").EntireColumn.AutoFit 
     .Range("A1").Select 
    End With 
+0

看看這個答案。嘗試使用數值。 http://stackoverflow.com/questions/6952084/excel-cell-alignments-numerical-values-for-e-g-xlleft-xlright-or-xlcenter – geeFlo

+0

甚至使用數值仍然是相同的問題。 – BellHopByDayAmetuerCoderByNigh

回答

1

我正在運行Excel 2013,此語法適用於我。首先,在VBE的訪問確保你已經加入到

的Microsoft Excel 15.0對象庫的引用

然後,以縮短你的語法你可以用下面的:

With xls 
    .rows("1:1").Font.Bold = True 
    .Range("A:N").HorizontalAlignment = xlCenter 
    .Range("A:N").VerticalAlignment = xlBottom 
    .Range("C:G").NumberFormat = "$#,##0" 
    .Range("J:J").NumberFormat = "$#,##0" 
    .Range("K:M").NumberFormat = "0%" 
    .Range("A:N").WrapText = True 
    .Range("N:N").ColumnWidth = 8.86 
    .Range("I:I").ColumnWidth = 8.86 
    .Range("A:A").ColumnWidth = 9 
End With 

這應該完成所有的格式化,並從看起來是宏記錄器中刪除「絨毛」語法。我相信(儘管我沒有測試),如果您從VBE添加對Excel的引用,@ June7提供的代碼也可以工作。

+0

該代碼有效。謝謝。我不需要.Range(「A:A」)。ColumnWidth = 9但是我可以添加評論標記:) – BellHopByDayAmetuerCoderByNigh

0

通過刪除所有記錄集的東西來測試您的代碼,以測試Excel部件。不完全相同的錯誤。對我而言,選擇參考的4行會引起問題。

添加的行來選擇列A:N和修改的線設定字體:
.Columns。( 「A:N」)選擇
Selection.Font.Bold =真

我已移除的點( )從其他3行的Selection前面。

代碼無誤地運行。

+0

感謝您的回覆!我試圖按照你的建議修改我的語法,但現在我得到一個新的錯誤。看我的編輯。 – BellHopByDayAmetuerCoderByNigh

+0

我沒有禁用頂部的Range行。所以不確定是否需要。 – June7

+0

我從所有'Selection'行前刪除了'.'。我添加了'.Columns(「A:N」)。選擇'& 'Selection.Font.Bold = True' - 我錯過了哪篇文章? – BellHopByDayAmetuerCoderByNigh