返回列表 上一主題 發帖

[發問] 檔案操作疑問請教

[發問] 檔案操作疑問請教

在操作檔案時一直重覆在第一個csv檔操作

無法跳到下一個csv檔案

請問高手下面的程序到底哪裡出了問題

怎麼好像鬼打牆一直在原地繞 謝謝

Sub Test()

On Error Resume Next

Application.DisplayAlerts = False

bPath = ThisWorkbook.Path

If Right(bPath, 1) <> "\" Then dirpath = bPath & "\"

csvName = Dir(dirpath & "*.csv")

Do While Len(csvName) > 0

    MsgBox csvName
   
    Workbooks.Open (dirpath & csvName)
    '
    'balabalabala
    '
    '
    ActiveWorkbook.Close savechanges:=False
            
    csvName = Dir
   
Loop

End Sub

回復 11# luhpro


原來還有區域變數的因素

雖然我的問題已經解決

但再試試到底是哪個變數出問題

再來提問 謝謝各位的回答

TOP

本帖最後由 luhpro 於 2010-9-8 00:39 編輯

回復 9# huang40

大致上看了一下兩個 Sub 的差異後,
我覺得最大可能出問題的原因在於 "區域變數",
你可以試著在呼叫主程式前將 csvName 儲存到某個儲存格內,
於程序返回後再立即還原回去試試看.

在我的經驗中 Excel VBA 裡有時候其區域變數內容是會與我們的預期值不同的,
尤其是有呼叫到某些的程序或方法時.

TOP

本帖最後由 Hsieh 於 2010-9-7 18:02 編輯

回復 9# huang40

要學習VBA就要學會偵錯
逐行(F8)
一行一行跑程式看變數值的變化找出錯誤
學海無涯_不恥下問

TOP

本帖最後由 huang40 於 2010-9-7 11:39 編輯

其實問題很單純(或者我自以為很單純)

在TEST1不能執行的主程式去卻在TEST2可以執行

那問題會是出在哪呢

Sub Test1()
Application.DisplayAlerts = False
dirPath = ThisWorkbook.Path & "\"
csvName = Dir(dirPath & "*.csv")
Do While csvName <> ""
    Workbooks.Open (dirPath & csvName)
    '
    '(主程式)
    '
    ActiveWorkbook.Close savechanges:=False            
    csvName = Dir
Loop

Sub Test2()
Application.DisplayAlerts = False
Sheets(1).Activate
Columns("V").Clear
dirPath = ThisWorkbook.Path & "\"
csvName = Dir(dirPath & "*.csv")
n = 0
Do While csvName <> ""
    n = n + 1  
    Cells(n, 22) = csvName               
    csvName = Dir   
Loop
MsgBox "檔案數=" & n
For i = 1 To n
csvfile = Sheets(1).Cells(i, 22)
Workbooks.Open (dirPath & csvfile)   
    '
    '(主程式)
    '
ActiveWorkbook.Close savechanges:=False
next i
End Sub

TOP

這麼說別人無法知道錯誤時顯示什麼及出錯時相對變數的值是否正確,只有你自己一行行run時才會知道的!

TOP

本帖最後由 huang40 於 2010-9-6 20:06 編輯

試過還是卡在csvName=dir這裡

沒法可想只好用最笨的方法

先把檔名列出再一個一個開啟 終於搞定

可是對為什麼會卡在 csvName=dir 還是不瞭

總有個理由吧

Sub Test()
Application.DisplayAlerts = False
Sheets("MK").Activate
Columns("V").Clear
bPath = ThisWorkbook.Path
dirPath = ThisWorkbook.Path & "\"
csvName = Dir(dirPath & "*.csv")
n = 0
Do While csvName <> ""
    n = n + 1  
    Cells(n, 22) = csvName               
    csvName = Dir   
Loop
MsgBox n
For i = 1 To n
csvfile = Sheets(1).Cells(i, 22)
Workbooks.Open (dirPath & csvfile)    '
    '
    'balabalabala
    '
ActiveWorkbook.Close savechanges:=False
next i

TOP

回復 5# huang40
那就慢慢逐行偵錯,看錯誤出在哪?
學海無涯_不恥下問

TOP

本帖最後由 huang40 於 2010-9-6 11:30 編輯

回復 4# Hsieh


這樣是執行OK

但一旦加入中間balabalabala的處理程序

  Workbooks.Open (dirPath & csvName)
    '
    'balabalabala
    '
    '
    ActiveWorkbook.Close savechanges:=False

csvName=dir 這行就還是出現錯誤訊息

有可能因為中間處理的程序碼出問題導致嗎?

TOP

回復 3# huang40


    Sub Test()


Application.DisplayAlerts = False

dirPath = ThisWorkbook.Path & "\"

csvName = Dir(dirPath & "*.csv")

Do While csvName <> ""

    MsgBox csvName
   
    Workbooks.Open (dirPath & csvName)
    '
    'balabalabala
    '
    '
    ActiveWorkbook.Close savechanges:=False
            
    csvName = Dir
   
Loop

End Sub
學海無涯_不恥下問

TOP

        靜思自在 : 人要知福、惜福、再造福。
返回列表 上一主題