返回列表 上一主題 發帖

請幫忙翻譯一下程式

請幫忙翻譯一下程式

有兩個excel,分別是a.xlsx 和b.xlsx
我想在a.xlsx些vba, 讀取b.xlsx的資料。
請問我應該如何寫
for i = b.xlsx的最後一筆 to 1
因為我想用b.xlsx最後一欄開始往上檢查a.xlsx
但不知道怎樣寫才可以知道b.xlsx的最後一筆

Sub ex()
Dim FRng As Range
Dim A As Range, Rng As Range
  fs = "c:\user\destop\b.xlsx"
'fs = ThisWorkbook.Path & "\b.xlsx"
set wb = Workbooks.Open(fs)
     Set FRng = wb.Sheets("sheet1").Range("k:k").Find(today(), lookat:=xlWhole, SearchDirection:=xlPrevious) 在b.xlsx 的K欄尋找等當日的日期的一列
     If Not FRng Is Nothing Then 假如找到
        If FRng.Offset(, -3).Value >= 0.95 Then 假如b.xlsx 這列的H欄的值大過或等於0.95
set rng = workbooks(a).range("a:a").find(Frng.offset(,-9), lookat:=xlWhole, SearchDirection:=xlPrevious)     在a.xlsx 的A欄尋找b.xlsx 這列的B欄的值是否存在
If FRng Is Nothing Then  假如找不到
                在a.xlsx 的A欄最後一列加上b.xlsx 這列的B欄的值,及   在a.xlsx 的F欄最後一列加上b.xlsx 這列的K欄的值

end sub

回復 2# GBKEE


Sub ex()
Dim FRng As Range
Dim A As Range, Rng As Range
Dim fs As String, xi As Integer
   fs = "C:\Documents and Settings\USER\桌面\b.xlsx"
  set wb = Workbooks.Open(fs)
     Set FRng = wb.Sheets("sheet1").Range("k:k").Find(today(), lookat:=xlWhole, SearchDirection:=xlPrevious) 在b.xlsx 的K欄尋找等當日的日期的一列
        If Not FRng Is Nothing Then 假如找到
        If FRng.Offset(, -3).Value >= 0.95 Then 假如b.xlsx 這列的H欄的值大過或等於0.95
  set rng = workbooks(a).range("a:a").find(Frng.offset(,-9), lookat:=xlWhole, SearchDirection:=xlPrevious)     在a.xlsx 的A欄尋找b.xlsx 這列的B欄的值是否存在
         If FRng Is Nothing Then  假如找不到
          With Workbooks.Open("a.xlsm").Sheets("outstanding payments")    在a.xlsx 的A欄最後一列加上b.xlsx 這列的B欄的值,及   在a.xlsx 的F欄最後一列加上b.xlsx 這列的K欄的值
           xi = .UsedRange.Cells(.UsedRange.Count).Row
             .UsedRange.Cells(xi, "A") = FRng.offset(, -9).value
           .UsedRange.Cells(xi, "F") = FRng.value
         End With
         End If
     End If
End If
End Sub

請問程式文化有問題嗎?

TOP

回復 4# GBKEE


    請問除了Today的語法有問題外,還有沒有其他地方有語法問題?

TOP

回復 6# GBKEE


    還沒試!因為我在外面用手機上網無法測試!雖然明白概念但因為自己語法能力弱,難以表達,所以先問清楚,回去試可以輕鬆些

TOP

回復 4# GBKEE

桌面.rar (473.14 KB)

只是打開了另外一個Excel,其他完全沒有反應。   
是不是有那些地方出錯了?

TOP

本帖最後由 198188 於 2012-12-9 09:22 編輯

回復 9# c_c_lai

C:\Documents and Settings\USER\桌面
    我是用user的名稱來命名這台電腦,所以這句沒錯。
我要開的另一個excel (b.xlsx)是打開了,但是執行沒有什麼做出來

TOP

回復 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

回復 12# c_c_lai


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

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

        靜思自在 : 靜坐常恩己過、閒談莫論人非。
返回列表 上一主題