返回列表 上一主題 發帖

[發問] 請高人幫忙除錯,謝謝~

回復 11# 198188
我的file 名是 Outstanding Payments  12-4-2012
run 是出現run-time error '53': file not found

請檢查檔名
  1. Option Explicit
  2. Sub txet1()
  3.   Dim P As String, xfile As String
  4.   '我的file 名是 "Outstanding Payments  12-4-2012"
  5.   xfile = "Outstanding Payments  12-4-2012"  '
  6.   P = Format(Date, "M-D-YYYY")
  7.   P = "Outstanding Payments " & P & ".xls"
  8.   MsgBox xfile = P   '經比對 是 False 兩字串不相同
  9. End Sub
複製代碼

TOP

本帖最後由 GBKEE 於 2012-12-4 13:54 編輯

回復 1# 198188
試試看
  1. Option Explicit
  2. Sub EX()
  3.    Dim Rng(1 To 2) As Range
  4.    'With Workbooks.Open("C:\USER\DESTOP\E.XLSX").Sheets("2012") '檔案未開啟時用此程式碼
  5.    With Workbooks("E.XLSX").Sheets("2012")                      '檔案已開啟時用此程式碼
  6.         
  7.        .Range("A1").CurrentRegion.Offset(1) = ""                '清除舊資料
  8.         
  9.         'A2:AM2 to A100:AM100 是Y:\2012\A.XLSX (2012) 的資料
  10.         Set Rng(1) = .[A2]                                      '第一個Rng(1)
  11.         With Workbooks.Open("Y:\2012\A.XLSX").Sheets("2012")    '檔案開啟
  12.             Set Rng(2) = .[A2:AM2]
  13.             Set Rng(2) = .Range(Rng(2), .[A2].End(xlDown))     '資料不停增加: 到最後的資料
  14.             Rng(2).Copy Rng(1)
  15.            .Parent.Close False                                  '檔案關閉
  16.         End With
  17.         'A101:AM101 to A150:AM150是C:\2012\B.XLSX (Nov)的資料
  18.         Set Rng(1) = Rng(1).End(xlDown).Offset(1)               '第二個Rng(1)
  19.         With Workbooks.Open("Y:\2012\A.XLSX").Sheets("Nov")     '檔案開啟
  20.             Set Rng(2) = .[A101:AM101]
  21.             Set Rng(2) = .Range(Rng(2), .[AM101].End(xlDown))   '資料不停增加: 到最後的資料
  22.             Rng(2).Copy Rng(1)
  23.            .Parent.Close False                                  '檔案關閉
  24.         End With
  25.         'A151:AM151 to A270:AM270是Z:\2012\C.XLSX (2012) 的資料
  26.         Set Rng(1) = Rng(1).End(xlDown).Offset(1)              '第三個Rng(1)
  27.         With Workbooks.Open("Y:\2012\A.XLSX").Sheets("2012")    '檔案未開啟
  28.             Set Rng(2) = .[A151:AM151]                          '第二列 開始
  29.             Set Rng(2) = .Range(Rng(2), .[AM151].End(xlDown))   '資料不停增加: 到最後的資料
  30.            .Parent.Close False                                  '檔案關閉
  31.         End With
  32.     End With
  33. End Sub
複製代碼

TOP

本帖最後由 GBKEE 於 2012-12-4 14:05 編輯

回復 15# 198188
你的檔案名稱最好不要有空格,容易在輸入檔名造成不正確,所以系統會找不到檔案
將檔案名稱修正好,再測試看看

TOP

回復 22# 198188
錯在這裡
  1. Option Explicit
  2. Sub EX()
  3.     Dim P
  4.     P = Format(Date, "m") & "-" & Format(Date, "d") & "-" & Format(Date, "Y")
  5.     MsgBox P
  6.     P = Format(Date, "m-D-YYYY")
  7.     MsgBox P
  8. End Sub
複製代碼

TOP

回復 24# 198188
試試看
  1. Sub copyfile()
  2.     '單純複製更名
  3.     Dim xlfile As String
  4.     xlfile = "Y:\2012\payment 2012\Outstanding payment ss 2012\Dec 2012\Outstanding Payments" & Format(Date, "m-D-YYYY") & ".xlsm"
  5.     If Dir(xlfile) = "" Then
  6.         MsgBox "找不到 檔案"
  7.     Else
  8.         FileCopy xlfile, "C:\users\patrick.hkg\desktop\outstanding payments.xlsm"
  9.     End If
  10. End Sub
複製代碼

TOP

回復 29# 198188
由於我的data base沒有是E欄才可以check到最後一筆,請問我應該如何改。
沒有是E欄 是何意

TOP

回復 31# 198188
  1. Set Rng(2) = .[A2:AL2]
  2.     'Set Rng(2) = .Range(Rng(2), .[AL2].End(xlDown))
  3.     Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
  4.     'Resize 屬性 調整指定的範圍。傳回 Range 物件,該物件代表調整後的範圍。
複製代碼

TOP

本帖最後由 GBKEE 於 2012-12-7 09:47 編輯

回復 34# 198188
修改錯誤點
  1.      If  Rng(1).End(xlDown).Row <> Rng(1).Parent.Rows.Count Then
  2.         Set Rng(1) = Rng(1).End(xlDown).Offset(1)
  3.     Else
  4.         MsgBox "已到檔案底部 無法新增資料"
  5.        Exit Sub
  6.     End If
複製代碼

TOP

回復 38# 198188
  1. Option Explicit
  2. Sub Ex() '程序名稱不要用 copy 這是vba方法的關鍵字
  3.    Dim Rng(1 To 2) As Range
  4.      With Workbooks("payment.XLSM").Sheets("2012")
  5.          .Range("A1").CurrentRegion.Offset(1) = ""
  6.         Set Rng(1) = .[E2]  'E欄資料有連續
  7.        'MsgBox Rng(1).Cells(1, -3).Address '回到A欄
  8.          With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jenny.XLSX").Sheets("SHEET1")
  9.              Set Rng(2) = .[A2:L2]
  10.              Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
  11.              Rng(2).copy Rng(1).Cells(1, -3)   'A欄
  12.             .Parent.Close False
  13.          End With
  14.         Set Rng(1) = Rng(1).End(xlDown).Offset(1)
  15.          With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Jane.XLSX").Sheets("SHEET1")
  16.             Set Rng(2) = .[A2:L2]
  17.            ' **** Set Rng(2) = .Range(Rng(2), .[a2].End(xlDown))  ***** 這行不要用
  18.             Set Rng(2) = Rng(2).Resize(.[E1].End(xlDown).Row - 1)
  19.             Rng(2).copy Rng(1).Cells(1, -3)
  20.             .Parent.Close False
  21.         End With
  22.         '
  23.         '
  24.         ' 以下同
  25.         '
  26.         '
  27.         

  28.       End With
  29. End Sub
複製代碼

TOP

回復 40# 198188
With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Patrick.XLSX").Sheets("SHEET1")
將此檔案與未出錯檔案對調看是否一樣的出錯,可依下方程序看看

回復 41# 198188
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng(1 To 2) As Range
  4.     With Workbooks("payment.XLSM").Sheets("2012")
  5.         Set Rng(1) = .[E1000].End(xlUp).Offset(, -4) '這 Rng(1)的位置
  6.         With Workbooks.Open("C:\Users\patrick.HKG\Desktop\Patrick.XLSX").Sheets("SHEET1")
  7.             Set Rng(2) = .[A2:L2]
  8.             Set Rng(2) = .Range(Rng(2), .[A2].End(xlDown))
  9.             MsgBox .Rows.Count - Rng(2).Rows.Count < .Rows.Count - Rng(1).Row 'True: Rng(2)範圍大於 Rng(1) 就有錯誤
  10.             Rng(2).Copy Rng(1)
  11.             .Parent.Close False
  12.         End With
  13.     End With
  14. End Sub
複製代碼

TOP

        靜思自在 : 有時當思無時苦,好天要積雨來糧。
返回列表 上一主題