【问题标题】:VBA To Perform CalculationVBA 执行计算
【发布时间】:2016-12-06 23:00:23
【问题描述】:

我正在尝试使用 VBA 将计算添加到多个工作表的使用范围。问题是,我一直收到这个错误

'类型不匹配'

在线阅读ws.Cells(countie, 12).FormulaR1C1 =...

这是我的语法 - 什么会解决这个问题以便执行此语法?

Function JunctionTest()
Dim ws As Worksheet, countie As Long
For Each ws In ActiveWorkbook.Worksheets
  With ws
    If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
    LastRow = .Cells.Find(What:="*",After:=.Range("A1"),LookAt:=xlPart, _
                  LookIn:=xlFormulas, SearchOrder:=xlByRows,SearchDirection:=xlPrevious, _
                  MatchCase:=False).Row
  Else
    LastRow = 1
  End If
  For countie = 1 To LastRow
        ws.Cells(countie, 12).FormulaR1C1 = "=RC7+RC8" / "=VLookup(A2, Totals!B2:R100, 3, False)"
Next countie
End Function

编辑 --

Download Sample Workbook - Garbagedata.xlsx

【问题讨论】:

  • 看起来你试图错误地使用工作表形式 - 不过我可能是错的

标签: vba excel excel-2013 worksheet-function


【解决方案1】:

"=RC7+RC8" / "=VLookup(A2, Totals!B2:R100, 3, False)"

"=VLookup( 中删除等号。

您不能将R1C1 表示法与A1 表示法混用:RC7+RC8 & A2 不要混用

与其杀死自己试图在 VBA 中构建 FormulaR1C1,不如让公式在工作表上正常工作,然后将工作公式打印到即时窗口

更新

ws.Cells(countie, 12).FormulaR1C1 = "=RC7+RC8/VLOOKUP(RC1, Totals!R2C2:R100C18, 3, FALSE)"

Sub JunctionTest()
    Dim ws As Worksheet
    Dim lastRow As Long
    For Each ws In ActiveWorkbook.Worksheets
        With ws
            lastRow = .Range("B" & .Rows.Count).End(xlUp).Row
            .Range("L2:L" & lastRow).FormulaR1C1 = "=RC7+RC8/VLOOKUP(RC1, Totals!R2C2:R100C18, 3, FALSE)"
        End With
    Next
End Sub

【讨论】:

  • 我得到一个编译错误。语法错误。感谢您在尝试将公式放在 VBA 中之前让公式在工作表中正常工作的宝贵见解!
  • 我将引用从 Totals 之前移到了结束括号之后,它编译并运行,但工作表显示#Name?为一切。
  • 是的,如果重要的话,那就是工作簿中的第一张工作表
  • 刚刚添加的垃圾数据文件
  • @StarsFlyFreeFromCozyNights 我更新了我的答案。我的公式有点偏离。
猜你喜欢
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多