使用宏访问启用宏的文件

时间:2016-01-14 17:56:49

标签: excel vba excel-vba

我有启用宏的Excel文件,我想将这些文件中的值合并到一个新文件中。我写了下面的宏,它导航到每个文件中的特定单元格,并将其汇总成一个新的合并文件。

Sub SumWB()
  Dim Arr(2) As Long, MyWB As Workbook, fStr As String
  Const Folder = "C:\Users\user123\Downloads\New folder\"
  file = Dir(Folder)
  While (file <> "")

    If file <> "Consolidated.xlsm" Then
       Set MyWB = Workbooks.Open(Folder & file, , True)
       ThisWorkbook.Sheets(2).Range("B4") = Arr(0) + MyWB.Sheets(1).Range("B4").Value
       ThisWorkbook.Sheets(2).Range("C4") = Arr(0) + MyWB.Sheets(1).Range("C4").Value
       ThisWorkbook.Sheets(2).Range("D4") = Arr(0) + MyWB.Sheets(1).Range("D4").Value
       ThisWorkbook.Sheets(2).Range("E4") = Arr(0) + MyWB.Sheets(1).Range("E4").Value
       ThisWorkbook.Sheets(2).Range("F4") = Arr(0) + MyWB.Sheets(1).Range("F4").Value
       ThisWorkbook.Sheets(2).Range("G4") = Arr(0) + MyWB.Sheets(1).Range("G4").Value
       ThisWorkbook.Sheets(2).Range("H4") = Arr(0) + MyWB.Sheets(1).Range("H4").Value
       ThisWorkbook.Sheets(2).Range("I4") = Arr(0) + MyWB.Sheets(1).Range("I4").Value
       ThisWorkbook.Sheets(2).Range("J4") = Arr(0) + MyWB.Sheets(1).Range("J4").Value
       ThisWorkbook.Sheets(2).Range("K4") = Arr(0) + MyWB.Sheets(1).Range("K4").Value
       ThisWorkbook.Sheets(2).Range("L4") = Arr(0) + MyWB.Sheets(1).Range("L4").Value
       ThisWorkbook.Sheets(2).Range("M4") = Arr(0) + MyWB.Sheets(1).Range("M4").Value
       ThisWorkbook.Sheets(2).Range("N4") = Arr(0) + MyWB.Sheets(1).Range("N4").Value
       MyWB.Save
       MyWB.Close
    End If
    file = Dir
  Wend

End Sub

我得到Run time error '13' : Type Mismatch。错误指向范围(“C4”)行。

另一个问题是,一旦打开宏启用文件,在保存它的同时,“the file is a read only. To save a copy, click OK, then give the workbook a new name in the Save as dialog box”。这违背了自动化整个过程的目的。因为我不想手动打开和关闭所有这些文件。有没有办法可以避免这种情况?

1 个答案:

答案 0 :(得分:0)

如果您只是从文件中提取信息,我不确定您为什么需要保存它们。由于您将它们打开为只读,因此会阻止您保存并生成该消息。我只想删除myWB.Save行。如果它仍然提示保存更改,请将myWB.Close替换为myWB.Close(False)以关闭而不保存更改。

关于类型不匹配,工作簿中的值可能不是数字吗? (添加5 + "5 "会导致类型不匹配,而不是10