收集单元格并将其写入活动工作表

时间:2013-10-28 11:34:04

标签: excel-vba vba excel

CollectTimesheetData.xlsm在A1,B1和C1单元格中具有以下标题:

Employee Name  Project Name    Grand Billable Hours

我创建了一个Run按钮,其中包含以下宏。我想做的是:

  1. 要求用户选择文件夹
  2. 逐个运行该文件夹中的所有.xls文件
  3. 从所选文件夹内的所有xls文件中读取单元格值B7,B14和R28
  4. 在A2中写入B7,在B2中写入B14,在第二个xls文件中写入C2中的R28,
  5. 在A3中写入B7,在B3中写入B14,在第二个xls文件中写入C3中的R28,
  6. 在A4中写入B7,在B4中写入B14,在第三个xls文件中写入C4中的R28,依此类推。
  7. 我所拥有的是下面的宏:

    Sub Button1_Click()
    
    Dim fd As Object, myfiles As String, result, tempfile As Workbook, j As Long, i As Long
    
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show <> -1 Then Exit Sub
    
    ChDir (fd.SelectedItems(1))
    
    myfiles = Dir(fd.SelectedItems(1) & Application.PathSeparator & "*.xls")
    
    ReDim result(1 To Rows.Count, 1 To 1)
    
    Application.ScreenUpdating = 0
    j = 2
    
    Do While myfiles <> ""
    
        Set tempfile = Workbooks.Open(myfiles)
        ActiveSheet.Cells(j, 1).Value = tempfile.Sheets(1).Range("B7")
        ActiveSheet.Cells(j, 2).Value = tempfile.Sheets(1).Range("B14")
        ActiveSheet.Cells(j, 3).Value = tempfile.Sheets(1).Range("R28")
    
        j = j + 1
        tempfile.Close 0
        myfiles = Dir
    
    Loop
    
    Application.DisplayAlerts = 1
    Application.ScreenUpdating = 1
    
    End Sub
    

    问题是它运行,没有错误,没有异常但是当前活动工作表中没有写入任何内容。

    请问我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

你意识到这一次

Set tempfile = Workbooks.Open(myfiles)

执行,ActiveSheet成为新打开的工作簿中的一些工作表?该代码仅将值从tempfile中的第一个工作表传输到同一文件中的某个任意工作表。