【问题标题】:Method "Range" of object _Global" failed对象 _Global 的方法“范围”失败
【发布时间】:2016-06-03 02:09:26
【问题描述】:

有人问过这个问题,但我无法为我的案例找到答案。我知道当未指定 Range 时会发生此错误。但是,我已经指定了范围,或者我认为我做了并且它不想工作。

该代码旨在从编码脚本创建两个新工作表,然后添加不同的公式以两种不同的方式计算代码。 “LastRow”代码适用于第一张纸,但不适用于第二张纸,我不知道为什么或如何修复它。

感谢任何建议。

代码如下:

    Sub FullDurationCoding()
    ' Format the file to run the Duration Codes on two new worksheets.
      ActiveWorkbook.Worksheets(1).Name = "Transcript"
      Sheets("Transcript").Select
        Sheets("Transcript").Copy After:=Sheets("Transcript")
          ActiveSheet.Name = "TopicDuration"
      Sheets("Transcript").Select
        Sheets("Transcript").Copy After:=Sheets("TopicDuration")
          ActiveSheet.Name = "TurnDuration"

    ' Count number of lines till "@End"
       Dim LastRow As Single
       LastRow = Range("A" & Rows.Count).End(xlUp).Row

 ' Add TopicDuration formulas.
    ' Add Topic Duration Count formula to column C
        Sheets("TopicDuration").Select
        Range("C2:C" & LastRow).Formula = "=IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:NON:0"",""$TOP:SLF:NON:MIX"",""$TOP:OTH:NON:0"",""$TOP:OTH:NON:MIX"",""$TOP:OTH:OVR:NON:MIX"",""$TOP:OTH:OVR:NON:0""},B2))),1,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:UNT"",""$TOP:SLF:SPL"",""$TOP:OTH:UNT"",""$TOP:OTH:OVR:SPL""},B2))),C1+0,IF(OR(ISNUMBER(SEARCH({""TOP:SLF:CON:0"",""TOP:SLF:CON:MIX"",""TOP:OTH:CON:0"",""TOP:OTH:CON:MIX"",""TOP:OTH:OVR:CON:0"",""TOP:OTH:OVR:CON:MIX"",""TOP:OTH:OVR:FLW:0"",""TOP:OTH:OVR:FLW:MIX""},B2))),C1+1,C1+0)))"
        Range("C1").Value = 1
    ' Add Topic Duration Calculation formula to column D
        Range("D2:D" & LastRow).Formula = "=IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:NON:0"",""$TOP:SLF:NON:MIX"",""$TOP:OTH:NON:0"",""$TOP:OTH:NON:MIX"",""$TOP:OTH:OVR:NON:MIX"",""$TOP:OTH:OVR:NON:0""},B2))),C1,""NO"")"
        Range("D1").Value = "Calculation"
    ' Add Subtotal Calulation to Cell E1 through E15
        Range("E1").Formula = "=SUBTOTAL(1,D:D)"
    ' Filter Column D.
        Range("A1:E" & LastRow).AutoFilter Field:=4, Criteria1:="<>0", Operator:=xlAnd, Criteria2:="<>NO"

' Add TurnDurationFormulas()
    ' Add Turn Duration Count formula to column C
        Sheets("TurnDuration").Select
        Range("C1").Value = 1
        Range("C2").Formula = "=IF(A1=""CHI"",0,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:NON:0"",""$TOP:SLF:NON:MIX"",""$TOP:OTH:NON:0"",""$TOP:OTH:NON:MIX"",""$TOP:OTH:OVR:NON:MIX"",""$TOP:OTH:OVR:NON:0"",""$TOP:OTH:CON:0"",""$TOP:OTH:CON:MIX"",""$TOP:OTH:OVR:CON:MIX"",""$TOP:OTH:OVR:CON:0""},B2))),1,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:UNT"",""$TOP:SLF:SPL"",""$TOP:OTH:UNT"",""$TOP:OTH:OVR:SPL""},B2))),C1+0,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:CON:0"",""$TOP:SLF:CON:MIX""},B2))),C1+1,IF(A2=""com"",C1+0,IF(A1=""cod"",C1+0,IF(A1=""MOT"",C1+1,C1+0)))))))"
        Range("C3").Formula = "=IF(A2=""CHI"",0,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:NON:0"",""$TOP:SLF:NON:MIX"",""$TOP:OTH:NON:0"",""$TOP:OTH:NON:MIX"",""$TOP:OTH:OVR:NON:MIX"",""$TOP:OTH:OVR:NON:0"",""$TOP:OTH:CON:0"",""$TOP:OTH:CON:MIX"",""$TOP:OTH:OVR:CON:MIX"",""$TOP:OTH:OVR:CON:0""},B3))),1,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:UNT"",""$TOP:SLF:SPL"",""$TOP:OTH:UNT"",""$TOP:OTH:OVR:SPL""},B3))),C2+0,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:CON:0"",""$TOP:SLF:CON:MIX""},B3))),C2+1,IF(OR(ISNUMBER(SEARCH({""$TOP:OTH:OVR:FLW:0"",""$TOP:OTH:OVR:FLW:MIX""},B3))),C1+1,IF(A3=""com"",C2+0,IF(A2=""cod"",C2+0,IF(A2=""MOT"",C2+1,C2+0))))))))"
        Range("C4").Formula = "=IF(A3=""CHI"",0,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:NON:0"",""$TOP:SLF:NON:MIX"",""$TOP:OTH:NON:0"",""$TOP:OTH:NON:MIX"",""$TOP:OTH:OVR:NON:MIX"",""$TOP:OTH:OVR:NON:0"",""$TOP:OTH:CON:0"",""$TOP:OTH:CON:MIX"",""$TOP:OTH:OVR:CON:MIX"",""$TOP:OTH:OVR:CON:0""},B4))),1,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:UNT"",""$TOP:SLF:SPL"",""$TOP:OTH:UNT"",""$TOP:OTH:OVR:SPL""},B4))),C3+0,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:CON:0"",""$TOP:SLF:CON:MIX""},B4))),C3+1,IF(OR(ISNUMBER(SEARCH({""$TOP:OTH:OVR:FLW:0"",""$TOP:OTH:OVR:FLW:MIX""},B4))),C1+1,IF(A4=""com"",C3+0,IF(A3=""cod"",C3+0,IF(A3=""MOT"",C3+1,C3+0))))))))"
 *****  Range("C5:C" & LastRow).Formula = "=IF(A4=""CHI"",0,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:NON:0"",""$TOP:SLF:NON:MIX"",""$TOP:OTH:NON:0"",""$TOP:OTH:NON:MIX"",""$TOP:OTH:OVR:NON:MIX"",""$TOP:OTH:OVR:NON:0"",""$TOP:OTH:CON:0"",""$TOP:OTH:CON:MIX"",""$TOP:OTH:OVR:CON:MIX"",""$TOP:OTH:OVR:CON:0""},B5))),1,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:UNT"",""$TOP:SLF:SPL"",""$TOP:OTH:UNT"",""$TOP:OTH:OVR:SPL""},B5))),C4+0,IF(OR(""$TOP:SLF:CON:0"",""$TOP:SLF:CON:MIX""},B5))),C4+1,IF(OR(ISNUMBER(SEARCH({""$TOP:OTH:OVR:FLW:0"",""$TOP:OTH:OVR:FLW:MIX""},B5))),C1+1,IF(A5=""com"",C4+0,IF(A4=""cod"",C4+0,IF(A4=""MOT"",C4+1,C4+0))))))))"
    ' Add Turn Duration Calculation formula to column D
  ***   Range("D2:D" & LastRow).Formula = "=IF(C2=0,C1,IF(OR(ISNUMBER(SEARCH({""$TOP:SLF:NON:0"",""$TOP:SLF:NON:MIX"",""$TOP:OTH:NON:0"",""$TOP:OTH:NON:MIX"",""$TOP:OTH:OVR:NON:MIX"",""$TOP:OTH:OVR:NON:0""},B2))),C1,""NO"")"
        Range("D1").Value = "Calculation"
    ' Add Subtotal Calulation to Cell E1 through E15
        Range("E1").Formula = "=SUBTOTAL(1,D:D)"
    ' Filter Column D.
        Range("A1:E" & LastRow).AutoFilter Field:=4, Criteria1:="<>0", Operator:=xlAnd, Criteria2:="<>NO"
    End Sub

带有 ***** 的行是引发错误的行,但是带有 *** 的行在我通过调试系统时也会出现错误。我猜它一定与尝试在两个不同的工作表上定义 Lastrow 有关,但即使我将它们拆分为单独的 Sub 操作并将 Dim 代码放在第二个 sub 中,它仍然会导致错误。这段代码之前工作过,但我需要稍微改变一下公式,一旦我做了,现在它什么也做不了。 (但我知道这不是公式,因为我在前几行以及主题持续时间部分以相同的方式修复了这个公式。

请帮忙。谢谢。

【问题讨论】:

  • 第一个错误行上有 19 个开括号和 21 个闭括号。第二个错误行有 5 个打开和 4 个关闭。
  • 另外,尽量远离Select并使用With ... End With语句。
  • 谢谢。查看我所有的括号非常紧密地固定它,因为我有一个部分有错误的 If 语句。你们真棒。 ^_^

标签: vba excel


【解决方案1】:
  1. 为什么要将 Dim LastRow 声明为 Single 而不是 Long?单可以存储小数-无用-。
  2. LastRow 无关,问题在于您的公式。
  3. 您正在使用数组公式

... .Formula = "=IF(A4=""CHI"",0,IF(OR(ISNUMBER(SEARCH({..

尝试将这些行更改为: .FormulaArray
PS:不要自己输入字符{}。

【讨论】:

  • 为什么第一张纸(也有花括号)的代码可以工作,那么,正如她所指出的那样?
  • 嗯,你是对的。问题依赖于这些公式。我在 excel 中独立粘贴了公式,这些行中的公式在某处缺少括号,根据 Excel,您可能想查看这一行 C4+0,IF(OR("$TOP:SLF:CON:0 ","$TOP:SLF:CON:MIX",... 在此之后,您将为先前的 if @kat shanks 键入额外的语句
猜你喜欢
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多