有兩個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欄的值
[attach]13451[/attach][attach]13452[/attach]
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
請問程式文化有問題嗎?作者: GBKEE 時間: 2012-12-8 12:55
回復 3#198188
是文法不是文化.
當日的日期: today()這是工作表函數 ,VBA -> Date
Option Explicit
Sub ex()
Dim FRng As Range, Wb As Workbook
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(Date, 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
之前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) 是否會不停地往上尋找,直到第一列為止?作者: c_c_lai 時間: 2012-12-10 08:05
由於我對語法運用不太熟悉,所以就算明白原理,但是不知道怎樣用程式語法表達,所以經常想不通。
比如要對比兩個檔案的資料,A.xlsx 和B.xlsx
程式是放在A.xlsx �堶�
同時要知道A.xlsx 和B.xlsx的最後一筆應該如何寫
sub ex()
Dim i as integer
Dim j as integer
workbooks(A.xlsx ).Worksheets("Sheet1").Range("A1").Select
ActiveCell.End(xlDown).Select
i = ActiveCell.Row
我下面的寫法對嗎?
若程式是寫在 A.xlsx 時
Sub EX()
Dim i as integer
Dim j as integer
Worksheets("Sheet1")
i = .Range("A" & .rows.count).end(xlup).value 'i等於A.xlsx A欄的最後一筆
With Workbooks("B.xlsx" ).Worksheets("Sheet1")
j = .Range("A" & .rows.count).end(xlup).value 'j等於A.xlsx A欄的最後一筆
End With
End Sub
另外如果是最後一筆加1是不是這樣寫
Sub EX()
Dim i as integer
Dim j as integer
Worksheets("Sheet1")
i = .Range("A" & .rows.count).end(xlup).value + 1 'i等於A.xlsx A欄的最後一筆加一
With Workbooks("B.xlsx" ).Worksheets("Sheet1")
j = .Range("A" & .rows.count).end(xlup).value + 1 'j等於A.xlsx A欄的最後一筆加一
End With
End Sub作者: stillfish00 時間: 2012-12-12 13:37
回復 24#198188
不是 , 應該是
i = Worksheets("Sheet1").Range("A" & Worksheets("Sheet1").rows.count).end(xlup).value + 1
或寫成
with Worksheets("Sheet1")
i = .Range("A" & .rows.count).end(xlup).value + 1
end with
i = Worksheets("outstanding payments").Range("A" & Worksheets("outstanding payments").Rows.Count).End(xlUp).Row
fs = "C:\Documents and Settings\USER\桌面\payment report 2012.xlsx"
Set Wb = Workbooks.Open(fs)
With Worksheets("New form of payment report")
j = Worksheets("New form of payment report").Range("E" & Worksheets("New form of payment report").Rows.Count).End(xlUp).Row
End With
Do
If Wb.Worksheets("New form of payment report").Range("k" & j).Value = Date And Wb.Worksheets("New form of payment report").Range("h" & j).Value >= 0.95 Then
If IsError(Application.VLookup(Wb.Worksheets("New form of payment report").Range("B" & j).Value, Worksheets("outstanding payments").Range("A:A"), 1, False)) Then
Worksheets("outstanding payments").Range("A" & i + 1) = Wb.Worksheets("New form of payment report").Range("B" & j).Value
Worksheets("outstanding payments").Range("F" & i + 1) = Wb.Worksheets("New form of payment report").Range("H" & j).Value
End If
j = j - 1
i = i + 1
End If
Loop While j = 1
Wb.Close 0
End Sub
複製代碼
請問下面這句哪裡出錯了? 執行階段錯誤‘9’:陣列索引超出範圍
If IsError(Application.VLookup(Wb.Worksheets("New form of payment report").Range("B" & j).Value, Worksheets("outstanding payments").Range("A:A"), 1, False)) Then作者: stillfish00 時間: 2012-12-13 17:36
回復 28#198188
最簡單的方法就是15行底下加上ThisWorkbook.Activate ,
或你都改成寫 ThisWorkBook.Worksheets("New form of payment report") 也可以
因為 Workbooks.Open 會改變當前作用中的活頁簿
我寫了code測試
Dim fs As String, xi As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
i = Worksheets("outstanding payments").Range("A" & Worksheets("outstanding payments").Rows.Count).End(xlUp).Row
fs = "C:\Users\patrick.HKG\Desktop\payment report 2012.xlsx"
Set Wb = Workbooks.Open(fs)
With Worksheets("New form of payment report")
j = Worksheets("New form of payment report").Range("E" & Worksheets("New form of payment report").Rows.Count).End(xlUp).Row
End With
Do
ThisWorkbook.Activate
If Wb.Worksheets("New form of payment report").Range("k" & j).Value = Date And Wb.Worksheets("New form of payment report").Range("h" & j).Value >= 0.95 Then
If IsError(Application.VLookup(Wb.Worksheets("New form of payment report").Range("B" & j).Value, Worksheets("outstanding payments").Range("A:A"), 1, False)) Then
Worksheets("outstanding payments").Range("A" & i + 1) = Wb.Worksheets("New form of payment report").Range("B" & j).Value
Worksheets("outstanding payments").Range("F" & i + 1) = Wb.Worksheets("New form of payment report").Range("K" & j).Value
End If
i = i + 1
End If
j = j - 1
Loop While j = 2
Wb.Close 0
End Sub
可以vlookup 出來了,但是只有最後一個?
DO
Loop While
這句是不是我寫錯了?作者: 198188 時間: 2013-4-17 15:44
If Worksheets("Oracle").Cells(I, 5).Value = customer And Worksheets("Oracle").Cells(I, 20).Value = 0 And Worksheets("Oracle").Cells(I, 28).Value >= Date Then
Set FRng = Worksheets(customer).Range("B:B").Find(Worksheets("Oracle").Cells(I, 1).Value, lookat:=xlWhole, SearchDirection:=xlPrevious)
If FRng Is Nothing Then
Set Rng = Worksheets("Filter").Range("A:A").Find(Worksheets("Oracle").Cells(I, 1), lookat:=xlWhole)