【问题标题】:Long Array VBA Issue长数组 VBA 问题
【发布时间】:2017-05-03 22:28:41
【问题描述】:

我正在尝试在 VBA 中输入一个大于 255 个字符的长数组公式。我已按照过去的建议将公式的两半变暗并稍后合并它们。我仍然在让数组正常运行时遇到错误,希望有人可以帮助检查代码。

这是超出我正在尝试工作的字符限制的原始代码:

Sub TestMacro()

Range("AZ7").Select
Selection.FormulaArray = _
    "=SUM(IF(CONCATENATE(R3C3,[@Route],[@[Assumed Coating Type]],[@Diameter],[@[Year Installed (Coating)]])=CONCATENATE(HCA!R26C[86]:R13642C[86],HCA!R26C[-48]:R13642C[-48],HCA!R26C[87]:R13642C[87],HCA!R26C[-19]:R13642C[-19],HCA!R26C[88]:R13642C[88]),HCA!R26C[-36]:R13642C[-36]))"

结束子

这是我根据过去的建议将代码分成两半的最新尝试:https://www.mrexcel.com/forum/excel-questions/853889-long-array-visual-basic-applications-issue.html

http://dailydoseofexcel.com/archives/2005/01/10/entering-long-array-formulas-in-vba/

Sub LongArrayFormula()
 Dim theFormulaPart1 As String
 Dim theFormulaPart2 As String
 theFormulaPart1 = "=SUM(IF(CONCATENATE(R3C3,[@Route],[@[Assumed Coating Type]],[@Diameter],[@[Year Installed (Coating)]])""X_X_X)"")"

 theFormulaPart2 = "=CONCATENATE(HCA!R26C[86]:R13642C[86],HCA!R26C[-48]:R13642C[-48],HCA!R26C[87]:R13642C[87],HCA!R26C[-19]:R13642C[-19],HCA!R26C[88]:R13642C[88]),HCA!R26C[-36]:R13642C[-36]))"

 With ActiveSheet.Range("AZ7")
     .FormulaArray = theFormulaPart1
    .Replace """X_X_X)"")", theFormulaPart2

End With

感谢您的帮助。

【问题讨论】:

  • 你真的想在theFormulaPart2的开头有一个等号吗?似乎在连接公式中有 2 个等号会出错...
  • 嗨@Wolfie,不,但我两种方法都试过了,结果还是一样。

标签: arrays vba excel


【解决方案1】:

你应该保持你的截断公式语法正确。试试这样:

theFormulaPart1 = "=SUM(IF(CONCATENATE(R3C3,[@Route],[@[Assumed Coating Type]],
[@Diameter],[@[Year Installed (Coating)]])=X_X_X,HCA!R26C[-36]:R13642C[-36]))"
'                                          ^^^^^
theFormulaPart2 = "CONCATENATE(HCA!R26C[86]:R13642C[86],HCA!R26C[-48]:R13642C[-48],HCA!R26C[87]:R13642C[87],HCA!R26C[-19]:R13642C[-19],HCA!R26C[88]:R13642C[88])"

With ActiveSheet.Range("AZ7")
  .FormulaArray = theFormulaPart1
  .Replace "X_X_X", theFormulaPart2
End With

在这里,我插入了X_X_X(可以是其他任何东西)来代替公式中的一些“封闭表达式”。从语法的角度来看,这使截断的公式保持正确,因此语句 .FormulaArray = theFormulaPart1 可以接受它。然后可以在第二步进行替换。

【讨论】:

  • 嗨,ASH,感谢您的帮助!脚本遇到了一个小问题,脚本正在粘贴 '=SUM(IF(CONCATENATE($C$3,[@Route],[@[Assumed Coating Type]],[@Diameter],[@[Year Installed (涂层)]])="X_X_X",HCA!P$26:P$13642))' 在 AZ7 中。它似乎没有取代“X_X_X”。有什么想法吗?
  • 我认为 .Replace 函数有问题。我尝试了一些变体,但未能成功更换 X_X_X。
  • @WilliamC。在您取消选择然后选择单元格之前,替换的表单不会出现在编辑栏中(我不知道为什么)。此外,生成的公式也必须正确,否则不会成功。调试这个公式非常困难,所以我认为它是正确的,并用较小的“正确”公式测试了我的代码。
  • @WilliamC。但是我很确定问题的本质,你不能只是截断公式的任何部分,你应该从语法的角度保持它的正确性,否则 Excel 不会接受它。
  • 嗨 ASH,感谢您的建议。是的,如果输入正常,公式是准确的。早上我会调整一些东西,看看我能不能让它工作。同时,我会将其标记为已回答,因为您提供了很多有用的信息。再次感谢您。
【解决方案2】:

你也可以试试这个(
请不要从 VBE 运行它,尝试从工作表环境运行它。转到 Developer-Macros-Your Macro -Run 或从按钮或快捷方式运行它,它将毫无问题地工作):

Range("AZ7").Select
Selection.Formula = _
    "=SUM(IF(CONCATENATE(R3C3,[@Route],[@[Assumed Coating Type]],[@Diameter],[@[Year Installed (Coating)]])=CONCATENATE(HCA!R26C[86]:R13642C[86],HCA!R26C[-48]:R13642C[-48],HCA!R26C[87]:R13642C[87],HCA!R26C[-19]:R13642C[-19],HCA!R26C[88]:R13642C[88]),HCA!R26C[-36]:R13642C[-36]))"

SendKeys "{F2}"
SendKeys "^+{ENTER}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多