求和整列并在路径中使用输入字符串

时间:2015-03-31 18:40:06

标签: excel vba excel-vba

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)也不起作用。

1 个答案:

答案 0 :(得分:0)

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

有两个问题:

  1. 需要单元格引用的.cells,而不是.value
  2. 您正在将R1C1A1混合在您的小区参考
  3. 以这种方式尝试:

    或:

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

    您在所有使用.cells()

    的参考文献中重复错误#2

    其他错误:

    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标准文件对话框,以便他们可以选择要打开的文件。这将确保您返回(如果他们取消)或保证有效路径\文件名,因为他们选择了现有的东西,并且不必输入。