返回列表 上一主題 發帖

請幫忙翻譯一下程式

回復 9# c_c_lai
  1. Option Explicit

  2. Sub ex()

  3.     Dim FRng As Range, Wb As Workbook

  4.     Dim A As Range, Rng As Range

  5.     Dim fs As String, xi As Integer
  6.     fs = "C:\Documents and Settings\USER\桌面\payment report 2012.xlsx"

  7.     Set Wb = Workbooks.Open(fs)

  8.     Set FRng = Wb.Sheets("New form of payment report").Range("k:k").Find(Date, lookat:=xlWhole, SearchDirection:=xlPrevious) '在b.xlsx 的K欄尋找等當日的日期的一列

  9.     If Not FRng Is Nothing Then                 '假如找到

  10.         If FRng.Offset(, -3).Value >= 0.95 Then '假如b.xlsx 這列的H欄的值大過或等於0.95

  11.             '*** Workbooks(A)-> A這變數字串沒有見到  ****

  12.             Set Rng = Workbooks("outstanding payments").Sheets("outstanding payments").Range("a:a").Find(FRng.Offset(, -9), lookat:=xlWhole, SearchDirection:=xlPrevious)   ' 在a.xlsx 的A欄尋找b.xlsx 這列的B欄的值是否存在

  13.             If FRng Is Nothing Then             '假如找不到

  14.                 With Workbooks.Open("outstanding payments.xlsm").Sheets("outstanding payments")  '   在a.xlsx 的A欄最後一列加上b.xlsx 這列的B欄的值,及   在a.xlsx 的F欄最後一列加上b.xlsx 這列的K欄的值

  15.                     xi = .UsedRange.Cells(.UsedRange.Count).Row

  16.                     .UsedRange.Cells(xi, "A") = FRng.Offset(, -9).Value

  17.                     .UsedRange.Cells(xi, "F") = FRng.Value
  18.                   
  19.                 End With

  20.             End If

  21.         End If

  22.     End If
  23. Wb.Close 0
  24. End Sub
複製代碼
效果是想當payment report 2012 內K欄是今天的日期,而H欄的%達到95%或以上,加上B欄的 SO#在outstanding payments 表內沒有的話,就把payment report 2012 內H欄的%達到95%或以上,及B欄的 SO#在outstanding payments 表內沒有的SO# 放在outstanding payments 表內的A欄的最後一列上 及F欄的日期copy過去相應位置。
如圖中outstanding payment 黃色的部分。

TOP

回復 10# 198188
假設 K 欄原本之日期為  12/8, 為配合測試將它們均改成 12/9 今日。
Set FRng = Wb.Sheets("New form of payment report").Range("k:k").Find(Date, lookat:=xlWhole, SearchDirection:=xlPrevious)
則 FRng 搜尋結果是指向 FRng.Address : "$K$28" 該條件吻合之最後一項,
而該列 H 欄 FRng.Offset(, -3).Value : 0 (該欄係空白欄),
結論是 If FRng.Offset(, -3).Value >= 0.95 Then 不成立。

TOP

回復 12# c_c_lai


    有空列就無法運行?但是我之前也用這句尋找B欄如有而H欄百份比達九十五或以上就將K欄日期傳回!同樣有空列但運作就無問題,是何處出錯?

TOP

回復 13# 198188

TOP

回復 14# c_c_lai


    我試過將H28改成20% 或者100%,但是仍然沒有反應。
另外Set FRng = Wb.Sheets("New form of payment report").Range("k:k").Find(Date, lookat:=xlWhole, SearchDirection:=xlPrevious) 是不是不停地向上找?那麼K28一列達不到要求,不是會再向上尋找嗎?

TOP

回復 4# GBKEE
  1. ption Explicit

  2. Sub ex()

  3.     Dim FRng As Range, Wb As Workbook

  4.     Dim A As Range, Rng As Range

  5.     Dim fs As String, xi As Integer
  6.     fs = "C:\Documents and Settings\USER\桌面\payment report 2012.xlsx"

  7.     Set Wb = Workbooks.Open(fs)

  8.     Set FRng = Wb.Sheets("New form of payment report").Range("k:k").Find(Date, lookat:=xlWhole, SearchDirection:=xlPrevious) '在b.xlsx 的K欄尋找等當日的日期的一列

  9.     If Not FRng Is Nothing Then                 '假如找到

  10.         If FRng.Offset(, -3).Value >= 0.95 [color=Red]And FRng.Offset(, -3).Value <> " "[/color] Then  '假如b.xlsx 這列的H欄的值大過或等於0.95

  11.             Set Rng = Workbooks("outstanding payments").Sheets("outstanding payments").Range("a:a").Find(FRng.Offset(, -9), lookat:=xlWhole, SearchDirection:=xlPrevious)   ' 在a.xlsx 的A欄尋找b.xlsx 這列的B欄的值是否存在

  12.             [color=Red]If Rng Is Nothing Then             [/color]'假如找不到

  13.                 [color=Red]With Workbooks("outstanding payments").[/color]Sheets("outstanding payments")  '   在a.xlsx 的A欄最後一列加上b.xlsx 這列的B欄的值,及   在a.xlsx 的F欄最後一列加上b.xlsx 這列的K欄的值

  14.                     xi = .UsedRange.Cells(.UsedRange.Count).Row

  15.                     .UsedRange.Cells(xi, "A") = FRng.Offset(, -9).Value

  16.                     .UsedRange.Cells(xi, "F") = FRng.Value
  17.                   
  18.                 End With

  19.             End If
  20.            
  21.         End If

  22.     End If
  23.    Wb.Close 0
  24. End Sub
複製代碼
之前If Rng Is Nothing Then   寫錯成 If FRng Is Nothing Then ,但是改完了也沒有反應,只是打開另一個excel後就沒有什麼反應,是哪裡出現問題了,請指定迷津。 不管最後一列是否H欄是否空格或者百份之幾都沒有反應,另外 Set FRng = Wb.Sheets("New form of payment report").Range("k:k").Find(Date, lookat:=xlWhole, SearchDirection:=xlPrevious) 是否會不停地往上尋找,直到第一列為止?

TOP

回復 16# 198188
你可以參考 kai6929 先進提供的:
銷售管理完成版
#19 附件內有關的 AdvancedFilter  的過濾條件的處理。
之後再來思維 Outstanding Payments 接下來的動作。

TOP

回復 16# 198188
對函數(Find)用法不清楚時 , 可以自己先查詢Excel說明 ,
這樣可以更了解它的各參數用途 , 裡面也有例子可參考

Set FRng = Wb.Sheets("New form of payment report").Range("k:k").Find(Date, lookat:=xlWhole, SearchDirection:=xlPrevious)
這行只是 在K欄找到最後一筆符合Date的儲存格 ,
有找到 -> FRng設為該儲存格
沒找到 -> FRng = nothing
就只找一次而已

你要在每個符合Date的儲存格都另外判斷條件
可以參考 Excel說明的範例去改寫
範例 :
        這個範例會在第一張工作表上的 A1:A500 範圍內尋找值為 2 的所有儲存格,並將這些儲存格的值變更為 5。
  1. With Worksheets(1).Range("a1:a500")
  2.     Set c = .Find(2, lookin:=xlValues)
  3.     If Not c Is Nothing Then
  4.         firstAddress = c.Address
  5.         Do
  6.             c.Value = 5
  7.             Set c = .FindNext(c)
  8.         Loop While Not c Is Nothing And c.Address <> firstAddress
  9.     End If
  10. End With
複製代碼

TOP

回復 18# stillfish00
  1. Option Explicit

  2. Sub ex()
  3.    
  4.     Dim FRng As Range, Wb As Workbook
  5.     Dim FirstAddress As String
  6.     Dim A As Range, Rng As Range

  7.     Dim fs As String, xi As Integer
  8.     fs = "C:\Documents and Settings\USER\桌面\payment report 2012.xlsx"

  9.     Set Wb = Workbooks.Open(fs)

  10.     Set FRng = Wb.Sheets("New form of payment report").Range("k:k").Find(Date, lookat:=xlWhole, SearchDirection:=xlPrevious) '在b.xlsx 的K欄尋找等當日的日期的一列

  11.     If Not FRng Is Nothing Then '假如找到

  12.         
  13.         If FRng.Offset(, -3).Value >= 0.95 And FRng.Offset(, -3).Value >= 0.95 Then '假如b.xlsx 這列的H欄的值大過或等於0.95

  14.            
  15.             Set Rng = Workbooks("outstanding payments").Sheets("outstanding payments").Range("a:a").Find(FRng.Offset(, -9), lookat:=xlWhole, SearchDirection:=xlPrevious)   ' 在a.xlsx 的A欄尋找b.xlsx 這列的B欄的值是否存在

  16.             If Rng Is Nothing Then             '假如找不到

  17.                 With Workbooks.Open("outstanding payments.xlsm").Sheets("outstanding payments")  '   在a.xlsx 的A欄最後一列加上b.xlsx 這列的B欄的值,及   在a.xlsx 的F欄最後一列加上b.xlsx 這列的K欄的值

  18.                     xi = .UsedRange.Cells(.UsedRange.Count).Row

  19.                     .UsedRange.Cells(xi, "A") = FRng.Offset(, -9).Value

  20.                     .UsedRange.Cells(xi, "F") = FRng.Value
  21.                   
  22.                 End With

  23.             End If

  24.         End If
  25.      
  26.     End If
  27. Wb.Close 0
  28. End Sub
  29.    
複製代碼
但是我現在連第一個都沒有反應,是不是程式有錯?
我把它的日期寫上當天,然後百份比填上100% ,照常理應該209514 會出現在outstanding payments sheet的A21儲存格上,但是沒有,是不是程式有錯?
209514        Argentia        MEIKE         7,936.50                         100.00%                        12/11        Lily Chan

TOP

本帖最後由 stillfish00 於 2012-12-12 00:57 編輯

回復 19# 198188
1. 你的code是放在哪個檔案?
2. 第22行:  Set Rng = Workbooks("outstanding payments").Sheets("outstanding payments").Range("a:a").Find(FRng.Offset(, -9), lookat:=xlWhole, SearchDirection:=xlPrevious)
     改outstanding payments.xlsm
3.  第26行:  With Workbooks.Open("outstanding payments.xlsm").Sheets("outstanding payments")
     改用完整路徑看看
4. 程式不如預期 , 可以學習下中斷點或逐行跑 , 搭配區域變數視窗&即時運算視窗 , debug會更有效率

TOP

        靜思自在 : 受人點水之恩,須當湧泉以報。
返回列表 上一主題