2015-03-31 46 views
0
Sub Value() 


Dim fName As String 
Dim fld As String 
Set wb1 = ThisWorkbook 
Set ws1 = wb1.Worksheets("Profit") 
Set ws2 = wb1.Worksheets("Loss") 

With ws1 
Lastrow = .Cells(.Rows.Count, "B").End(xlUp).Row 
End With 

For i = 1 To Lastrow 
    **fld = ws1.Cells.Value(i, "B") 
    fName = Dir(fld & .Cells(i, "C").Value + "*.xls*")** 
    Set wb2 = Workbooks.Open(fld & fName, ReadOnly:=True) 
    wb1.Worksheets("Revenues").UsedRange.Clear 
    wb2.Worksheets("Latest").UsedRange.Copy Destination:=wb1.Worksheets("Revenues").Range("A1") 
    wb2.Close savechanges:=False 

    With ws2 
    Lastrow2 = .Cells(.Rows.Count, "P").End(xlUp).Row 
    End With 

    **ws1.Cells(i, "E").Value = Excel.WorksheetFunction.Sum(ws2.Range("P2" & Lastrow2))** 

Next i 
End Sub 

我在兩個地方面臨小錯誤。首先,將文件從我得到的最新數據是使用目錄打開文件名B中& C色譜柱提供的字符串,但是編譯器不把它當我使用。其次,當我總結整個列總是給零值,不知道爲什麼。總之,我將文件名和目錄放在一個輸出號碼(總結欄)之外。 SUM(P:P)也不起作用。總結整列,並使用輸入的字符串路徑

回答

0
fld = ws1.Cells.Value(i, "B") 

兩個問題與此:

  1. .cells需要的單元格引用,不能.value
  2. 你與A1在單元格引用混合R1C1

試試吧這種方式:

或:

fld = ws1.Range("B" & i).Value 

你重複的錯誤,#2你的所有引用您正在使用.cells()其中

其他錯誤:

fName = Dir(fld & .Cells(i, "C").Value + "*.xls*") 

除了錯誤#2,上面,您使用+進行串聯。 VBA使用&

fName = Dir(fld & .Cells(i, 3).Value & "*.xls*") 

注:

你可能要考慮把一些錯誤繞Set wb2 = Workbooks.Open(fld & fName, ReadOnly:=True)線處理,因爲你依賴於用戶輸入正確的路徑(你假設它在結束一個\)和一個文件名。絲毫的錯字和你的.Open()將失敗。

您也可以考慮尋找FileSystemObject呈現給用戶的Windows標準文件對話框,以便他們可以選擇他們想要打開文件。這將確保你得到一個(如果他們取消)或擔保的有效路徑\文件名,因爲他們選擇現有的東西,並沒有給它的輸入。

+0

感謝。你也可以告訴我,hpow我可以列入的* .xls *爲我得到那邊」 – Jain 2015-03-31 19:18:05

+0

@Jain錯誤,請參閱我的回答補充說明。 – FreeMan 2015-03-31 19:25:17

相關問題