编辑多个* .xlsx文件

时间:2018-03-15 23:14:48

标签: vba excel-vba excel

目标:对多个文件进行相同的修改。

错误:(运行时错误'13':类型不匹配)在行> Enter_Formulas wb

Option Explicit

Sub ProcessFiles()

Dim Filename, Pathname As String
Dim wb As Workbook

Pathname = "C:\Users\E\Desktop\macro2\"
Filename = Dir(Pathname)
Do While Filename <> ""
    Set wb = Workbooks.Open(Pathname & Filename)
    Enter_Formulas wb

    wb.Close SaveChanges:=True
    Filename = Dir()
Loop    
End Sub


Sub Enter_Formulas(wb As Workbooks)
With wb
    .Worksheets(1).Range("G19", Range("F19").End(xlDown).Offset(0, 1)).FormulaR1C1 = "=IF(R[0]C[-2]<0,R[-1]C[-5])"
    .Worksheets(1).Range("H19", Range("F19").End(xlDown).Offset(0, 2)).FormulaR1C1 = "=IF(R[0]C[-3]<0,R[-1]C[-5])"
    .Worksheets(1).Range("I19", Range("F19").End(xlDown).Offset(0, 3)).FormulaR1C1 = "=IF(R[0]C[-4]<0,R[-1]C[-5])"

    .Worksheets(1).Range("H7").FormulaR1C1 = "=ROUND(R[10]C,0)=ROUND(RC[-6],0)"
End With
End Sub

注意:如果Enter_Formulas()的正文是: .Worksheets(1).Range("A1").Value = "pointless"

2 个答案:

答案 0 :(得分:1)

更改

   Sub Enter_Formulas(wb As Workbooks)

   Sub Enter_Formulas(wb As Workbook)

(在声明的最后有一个额外的&#34; s&#34;)

答案 1 :(得分:1)

您不能依赖默认的活动工作表进行父工作表引用。

.Worksheets(1).Range("G19", Range("F19").End(xlDown).Offset(0, 1)).FormulaR1C1 = "=IF(R[0]C[-2]<0,R[-1]C[-5])"

如果Worksheets(1)是活动工作表,则范围(&#34; F19&#34;)仅属于工作表(1)。完全限定父工作表很容易。

Sub Enter_Formulas(wb As Workbooks)
    With wb.Worksheets(1)
        .Range(.cells(19, "G"), .cells(19, "F").End(xlDown).Offset(0, 1)).FormulaR1C1 = "=IF(R[0]C[-2]<0,R[-1]C[-5])"
        .Range(.cells(19, "H"), .cells(19, "F").End(xlDown).Offset(0, 2)).FormulaR1C1 = "=IF(R[0]C[-3]<0,R[-1]C[-5])"
        .Range(.cells(19, "I"), .cells(19, "F").End(xlDown).Offset(0, 3)).FormulaR1C1 = "=IF(R[0]C[-4]<0,R[-1]C[-5])"

        .Range("H7").FormulaR1C1 = "=ROUND(R[10]C,0)=ROUND(RC[-6],0)"
    End With
End Sub

现在注意.Range("F19"),而不是Range("F19")