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和B中提供的字符串和文件名打开从中获取最新数据的文件。 C列,但编译器在我使用时没有采用它。其次,当我对整个列进行求和时,它总是给出零值,不知道为什么。简而言之,我取文件名和目录,并在其旁边放置一个输出编号(Sum up column)。 SUM(P:P)也不起作用。
答案 0 :(得分:0)
fld = ws1.Cells.Value(i, "B")
有两个问题:
.cells
,而不是.value
R1C1
与A1
混合在您的小区参考以这种方式尝试:
或:
fld = ws1.Range("B" & i).Value
您在所有使用.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)
行周围进行一些错误处理,因为您依靠用户正确输入路径(您假设它以{{1}结尾和文件名。最轻微的错字和你的\
将失败。
您也可以考虑搜索.Open()
向用户显示Windows标准文件对话框,以便他们可以选择要打开的文件。这将确保您返回(如果他们取消)或保证有效路径\文件名,因为他们选择了现有的东西,并且不必输入。