Board logo

標題: [發問] 檔案操作疑問請教 [打印本頁]

作者: huang40    時間: 2010-9-6 10:21     標題: 檔案操作疑問請教

在操作檔案時一直重覆在第一個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
作者: Hsieh    時間: 2010-9-6 10:31

On Error Resume Next拿掉偵錯看看
基本上字串連結語法已經錯誤
csvName = Dir(dirpath & "*.csv")
作者: huang40    時間: 2010-9-6 10:43

回復 2# Hsieh
On Error Resume Next 已mark掉
csvName = Dir(dirpath & "*.csv")  中的&已加上
偵錯是出現在  csvName=dir   這一行
怎麼辦呢
作者: Hsieh    時間: 2010-9-6 11:03

回復 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
作者: huang40    時間: 2010-9-6 11:21

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

回復 4# Hsieh


這樣是執行OK

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

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

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

有可能因為中間處理的程序碼出問題導致嗎?
作者: Hsieh    時間: 2010-9-6 14:15

回復 5# huang40
那就慢慢逐行偵錯,看錯誤出在哪?
作者: huang40    時間: 2010-9-6 20:04

本帖最後由 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
作者: oobird    時間: 2010-9-6 21:11

這麼說別人無法知道錯誤時顯示什麼及出錯時相對變數的值是否正確,只有你自己一行行run時才會知道的!
作者: huang40    時間: 2010-9-7 11:33

本帖最後由 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
作者: Hsieh    時間: 2010-9-7 18:00

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

回復 9# huang40

要學習VBA就要學會偵錯
逐行(F8)
一行一行跑程式看變數值的變化找出錯誤
作者: luhpro    時間: 2010-9-7 22:57

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

回復 9# huang40

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

在我的經驗中 Excel VBA 裡有時候其區域變數內容是會與我們的預期值不同的,
尤其是有呼叫到某些的程序或方法時.
作者: huang40    時間: 2010-9-8 10:08

回復 11# luhpro


原來還有區域變數的因素

雖然我的問題已經解決

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

再來提問 謝謝各位的回答




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)