0

我是另一个脚本新手。我进行了很多搜索,但无法找到适合我的问题的解决方案。

  • 我有一个包含不同数量 CSV 的文件夹,每个 CSV 在相同的单元格(A2 和 B2)中包含 1 个工作表和 2 个值。
  • 工作表名称不相同。

从逻辑上讲,我需要创建一个脚本,该脚本会转到此文件夹中的每个 CSV,获取 2 个值并将它们放入名为 MonthlyAvg 的 XLS 中的单个工作表中,分为 2 列

即第一个范围进入主文档中的 A2 和 B2,第二个 A2 和 B2 进入主文档中的 A3 和 B3。我的想法是这应该在一个数组中处理。唉,这就是我被困的地方,因为我无法将我在创建数组时发现的逻辑逻辑地放入我迄今为止所收集的内容中。任何帮助或指导将不胜感激。

strPath = "D:\MacWP\MacWork\Thermometers\TOT\MonthlyAvg\"      
Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 
objExcel.DisplayAlerts = False 

Set objFso = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFso.GetFolder (strPath) 

 For Each objFile In objFolder.Files      
    If objFso.GetExtensionName (objFile.Path) = "csv" Then 
        Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)
        'Find the first worksheet name
        FirstSheetName = objExcel.Activeworkbook.Worksheets(1).Name         

        'Set the first worksheet name
        Set objSheet = objWorkbook.Sheets (FirstSheetname)

        'Display the value in B2 of the first worksheet     
        MsgBox objSheet.Range("B2").Value
        'Display the value in A2 of the first worksheet
        MsgBox objSheet.Range ("A2").Value          

        objWorkbook.Close False 'Save changes 
    End If      
Next 
objExcel.Quit 
4

2 回答 2

0

如果我理解,您的文件搜索已经完成,您唯一的问题是如何将部分值存储在主 excel 文件中,对吗?

为此,您可以使用带有“索引”的 For 循环。

Dim i As Integer, j As Integer, n As Integer   
Dim filesOpen As Long

With Application.FileSearch

    .LookIn = "C:\Examples"

    .FileType = msoFileTypeExcelWorkbooks

      'There are wb's

      If .Execute > 0 Then

        For n = 1 To .FoundFiles.Count

          Workbooks.Open (.FoundFiles(i))

        Next n

filesOpen = n

end With

For i = 2 To filesOpen

'i = 2 'fila
j = 1 'columna    

'column A2        
Application.Workbooks("MasterFile").Worksheets("nameOfYourMasterSheet").Cells(i, j).Value = Application.Workbooks("Book1.cvs").Worksheets("nameOfYourSheet").Cells(2, j).Value

'column B2
Application.Workbooks("MasterFile").Worksheets("nameOfYourMasterSheet").Cells(i, j+1).Value = Application.Workbooks("Book1.cvs").Worksheets("nameOfYourSheet").Cells(2, j+1).Value

next i

因此,最后一个 for 循环是为您的主文件提供值。在没有更多工作簿之前,“i”索引是唯一递增的。

您不必使用数组,只需注意“i”值。

于 2012-08-29T02:22:08.387 回答
0

您可以使用下面的将所有值直接写入csv文件。output.csv下面的代码在下面创建一个文件strPath

Dim objExcel
Dim objFSO
Dim objTF
Dim objWB

strpath = "c:\temp"

Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strpath)
Set objTF = objFSO.CreateTextFile(strpath & "\output.csv", True, False)
objExcel.DisplayAlerts = False

For Each objFile In objFolder.Files
If objFSO.GetExtensionName(objFile.Path) = "csv" Then
Set objWB = objExcel.Workbooks.Open(objFile.Path)
objTF.WriteLine objWB.Sheets(1).Range("B2") & "," & objWB.Sheets(1).Range("A2")
objWB.Close False 'Save changes
End If
Next

objTF.Close
With objExcel
.DisplayAlerts = True
.Quit
End With
于 2012-08-29T03:04:06.167 回答