chao asked in 電腦與網際網路軟體 · 1 decade ago

Excel VB 找不到字檔來更新外部資料範圍

For i = 0 To 10

j = j + 1

Sheets.Add

ActiveSheet.Select

With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\temp\file" & i & ".txt", Destination:=Range("A1"))

On Error GoTo The_End '檔案不存在則跳到The_End

.Name = "fail_bit_count_1"

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.......

.......

.TextFileSpaceDelimiter = True

.TextFileColumnDataTypes = Array(1, 1)

.Refresh BackgroundQuery:=False

End With

假設有10個檔案需要處理

若都存在並沒問題

少了file0.txt似乎也正常

但是若少file0.txt file1.txt

則處理file1.txt到 .Refresh BackgroundQuery:=False 會出現 "找不到字檔來更新外部資料範圍....."的訊息

1. 為何file0 file1不存在問題卻到file1才出現?

2. 如何解? 改成True會往下走但那也不對(因檔案不存在本來就要跳到指定的label 而且後面處理data仍會有問題)

3. 此外On Error GoTo The_End我也覺得怪怪的,既然已無法開就應該GoTo The_End,為何是執行到End With才GoTo The_End

煩請知道的網友解答

謝謝

Update:

Hi,Tim:

謝謝你的解答

我依照您的方式微結果還是一樣

而且重要的一點

即使無檔案開啟用

我仍需繼續開啟下一個檔案

2 Answers

Rating
  • Anonymous
    1 decade ago
    Favorite Answer

    參考以下作法 :

    利用 dir 判斷該檔案是否存在 ~

    if dir("TEXT;D:\temp\file" & i & ".txt") <> "" then

    '檔案如果存在的話

    :

    :

    end if

    2008-09-20 21:51:35 補充:

    on error goto XXX, 這樣的作法, 如果不搭配 Err = 0 的話, 只能處理第一次發生的錯誤;

    另外 ... 如果能用程式邏輯或流程做到的判斷, 能不用 on error 就不要用 on error ~

  • 提姆
    Lv 5
    1 decade ago

    用VBA呼叫Ms Query開啟外部檔:

    1、On Error放錯位置了,應該往前移,至少要放在With前面。

      建議把On Error GoTo The_End移到For之前。

     

    2、呼叫Ms Query開啟外部檔時,在Refresh時才會真的讀檔。

     

    因為第一次執行ActiveSheet.QueryTables.Add(...)時,還沒有執行過On Error,故此新增的QueryTable(For text0)〔不知道〕當Err時要GoTo The_End;第二次執行ActiveSheet.QueryTables.Add(...)時因已經跑過On Error一次了,故Refresh時,Err時會發作。

     

     

Still have questions? Get your answers by asking now.