2016-03-14 16 views
0

我想從Access打開一個Excel文件,並用它做一些事情,但代碼不穩定。有時它有效,其他時間不適用。以下是我做到這一點:訪問 - 打開Excel文件,使用它做一些編碼並關閉

Dim FilePath As String 
Dim ExcelApp As Excel.Application 

FilePath = "C:\Users\Lucky\Desktop\Test.xls" 

Set ExcelApp = CreateObject("Excel.Application") 

ExcelApp.Workbooks.Open (FilePath) 

With ExcelApp 

'do some stuff here 
End With 

ExcelApp.Workbooks.Close 

Set ExcelApp = Nothing 

我也注意到,當我運行的代碼時,Excel在任務管理器中,必須以獲取代碼工作再次手動殺死開始proccess。否則,我得到兩個類型的錯誤與Excel文件:

  • 之一是,如果我點擊Excel文件,它不會打開,它只是閃爍了一秒鐘,自敗

  • 等是Excel文件中的「只讀」模式打開...

所以我認爲有當文件在我的代碼被關閉了一些缺陷。我怎樣才能解決這個問題 ?

回答

0

我設法解決了我的問題。沒有什麼錯的代碼在我的問題,只是代替聲明

Dim ExcelApp As Excel.Application 

這是更好地使用

Dim ExcelApp As Object 

但更大的問題是代碼,不會在Excel中的變化,比如這條線:

x = Range(Cells(1, i), Cells(Rows.Count, i).End(xlUp)).Value 

,正確synthax是:

x = ExcelApp.Range(ExcelApp.Cells(1, i), ExcelApp.Cells(ExcelApp.Rows.Count, i).End(xlUp)).Value 'maybe also better to replace xlUp with -4162 

因此,無論您何時使用Access的Excel文件的某些代碼,請勿忘記將所有內容引用到Excel對象。當然,在所有事情之前,必須在VBA控制檯中設置適當的參考,在我的情況下是Microsoft Office 15.0庫。

0

我看不出你的代碼有什麼問題 - 也許是桌面的路徑?
這是我通常使用的代碼 - 我添加了另一個功能來幫助選擇文件。它使用後期綁定,因此不需要設置對Excel的引用 - 您無法獲得智能感知,也無法使用Excel常量(如xlUp) - 必須使用數字等值。

Public Sub Test() 

    Dim oXLApp As Object 
    Dim oXLWrkBk As Object 
    Dim oXLWrkSht As Object 
    Dim vFile As Variant 
    Dim lLastRow As Long 

    vFile = GetFile() 

    Set oXLApp = CreateXL 
    Set oXLWrkBk = oXLApp.WorkBooks.Open(vFile, False) 
    Set oXLWrkSht = oXLWrkBk.WorkSheets(1) 'First sheet. Can also use "Sheet1", etc... 

    lLastRow = oXLWrkSht.Cells(oXLWrkSht.Rows.Count, "A").End(-4162).Row '-4162 = xlUp 

    MsgBox "Last row in column A is " & lLastRow 

    oXLWrkBk.Close False 
    oXLApp.Quit 
    Set oXLWrkBk = Nothing 
    Set oXLApp = Nothing 


End Sub 

Public Function CreateXL(Optional bVisible As Boolean = True) As Object 

    Dim oTmpXL As Object 

    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'Defer error trapping in case Excel is not running. ' 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    On Error Resume Next 
    Set oTmpXL = GetObject(, "Excel.Application") 

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'If an error occurs then create an instance of Excel. ' 
    'Reinstate error handling.       ' 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    If Err.Number <> 0 Then 
     Err.Clear 
     On Error GoTo ERROR_HANDLER 
     Set oTmpXL = CreateObject("Excel.Application") 
    End If 

    oTmpXL.Visible = bVisible 
    Set CreateXL = oTmpXL 

    On Error GoTo 0 
    Exit Function 

ERROR_HANDLER: 
    Select Case Err.Number 

     Case Else 
      MsgBox "Error " & Err.Number & vbCr & _ 
       " (" & Err.Description & ") in procedure CreateXL." 
      Err.Clear 
    End Select 

End Function 

Function GetFile(Optional startFolder As Variant = -1, Optional sFilterName As String = "") As Variant 
    Dim fle As Object 
    Dim vItem As Variant 

    ''''''''''''''''''''''''''''''''''''''''''' 
    'Clear the file filter and add a new one. ' 
    ''''''''''''''''''''''''''''''''''''''''''' 
    Application.FileDialog(3).Filters.Clear 
    Application.FileDialog(3).Filters.Add "'Some File Description' Excel Files", "*.xls, *.xlsx, *.xlsm" 

    Set fle = Application.FileDialog(3) 
    With fle 
     .Title = "Select a file" 
     .AllowMultiSelect = False 
     If startFolder = -1 Then 
      .InitialFileName = CurrentProject.Path 
     Else 
      If Right(startFolder, 1) <> "\" Then 
       .InitialFileName = startFolder & "\" 
      Else 
       .InitialFileName = startFolder 
      End If 
     End If 
     If .Show <> -1 Then GoTo NextCode 
     vItem = .SelectedItems(1) 
    End With 
NextCode: 
    GetFile = vItem 
    Set fle = Nothing 
End Function 
+0

感謝您提供的代碼,它是偉大的,它的工作原理。但是,我必須使用Excel文件做的事情導致我的問題。我得弄清楚一些事情。不幸的是,「Xlup」是我在代碼中需要的東西,因爲我也有問題。 – LuckyLuke82

+0

我最大的問題是這行 - 「我=行(1)。找到(」MyColumnName「,LookIn:= xlValues,Lookat:= xlWhole).Column」...我得到錯誤462與此,「遠程服務器機器不存在或不可用「。任何想法如何改變這條線? – LuckyLuke82

+0

要找到一個Excel常量的值在Excel中打開立即窗口,並在 - '?xlUp'中輸入常量將返回-4162 –

相關問題