【问题标题】:Wrong number of arguments or invalid property assignment错误数量的参数或无效的属性分配
【发布时间】:2015-02-25 03:15:16
【问题描述】:

我在调试代码中的错误 450 时遇到问题。有 17 个范围,代码运行良好,但是当添加更多范围时,它显示错误 450 参数数量错误或属性分配无效。请看一下代码。第一行高亮显示,并且在显示错误时也显示“Union”。

Sub Set_PrintArea()


Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Dim rng4 As Range
Dim rng5 As Range
Dim rng6 As Range
Dim rng7 As Range
Dim rng8 As Range
Dim rng9 As Range
Dim rng10 As Range
Dim rng11 As Range
Dim rng12 As Range
Dim rng13 As Range
Dim rng14 As Range
Dim rng15 As Range
Dim rng16 As Range
Dim rng17 As Range
Dim rng18 As Range
Dim rng19 As Range
Dim rng20 As Range
Dim rng21 As Range
Dim rng22 As Range
Dim rng23 As Range
Dim rng24 As Range
Dim rng25 As Range
Dim rng26 As Range
Dim rng27 As Range
Dim rng28 As Range
Dim rng29 As Range
Dim rng30 As Range
Dim rng31 As Range
Dim rng32 As Range
Dim rng33 As Range
Dim rng34 As Range
Dim rng35 As Range


With Sheets("Performance")

    Set rng1 = .Range("$A$1:$U$13")
    Set rng2 = .Range("$B$15:$Z$52")
    Set rng3 = .Range("$B$55:$Z$92")
    Set rng4 = .Range("$B$95:$Z$132")
    Set rng5 = .Range("$B$135:$Z$172")
    Set rng6 = .Range("$B$175:$Z$212")
    Set rng7 = .Range("$B$215:$Z$252")
    Set rng8 = .Range("$B$255:$Z$292")
    Set rng9 = .Range("$B$295:$Z$332")
    Set rng10 = .Range("$B$335:$Z$372")
    Set rng11 = .Range("$B$374:$Z$407")
    Set rng12 = .Range("$B$410:$Z$443")
    Set rng13 = .Range("$B$446:$Z$479")
    Set rng14 = .Range("$B$482:$Z$515")
    Set rng15 = .Range("$B$518:$Z$551")
    Set rng16 = .Range("$B$554:$Z$587")
    Set rng17 = .Range("$B$590:$S$610")
    Set rng18 = .Range("$B$613:$V$642")
    Set rng19 = .Range("$B$650:$U$662")
    Set rng20 = .Range("$B$664:$Z$701")
    Set rng21 = .Range("$B$704:$Z$741")
    Set rng22 = .Range("$B$744:$Z$781")
    Set rng23 = .Range("$B$784:$Z$821")
    Set rng24 = .Range("$B$824:$Z$861")
    Set rng25 = .Range("$B$864:$Z$901")
    Set rng26 = .Range("$B$904:$Z$941")
    Set rng27 = .Range("$B$944:$Z$981")
    Set rng28 = .Range("$B$984:$Z$1021")
    Set rng29 = .Range("$B$1023:$AD$1066")
    Set rng30 = .Range("$B$1069:$AD$1112")
    Set rng31 = .Range("$B$1115:$AD$1158")
    Set rng32 = .Range("$B$1161:$AD$1204")
    Set rng33 = .Range("$B$1207:$AD$1250")
    Set rng34 = .Range("$B$1253:$AD$1296")
    Set rng35 = .Range("$B$1299:$S$1323")


    With .PageSetup
        .PrintArea = Union(rng1, rng2, rng3, rng4, rng5, rng6, rng7, rng8, rng9, rng10, rng11, rng12, rng13, rng14, rng15, rng16, rng17, rng18, rng19, rng20, rng21, rng22, rng23, rng24, rng25, rng26, rng27, rng28, rng29, rng30, rng31, rng32, rng33, rng34, rng35).Address
        .Orientation = xlLandscape
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With

    .PrintPreview

End With


End Sub

提前致谢。

【问题讨论】:

  • 看来这个问题是PrintArea 的字符串字符限制为 255 个字符。 See this Q

标签: vba debugging excel


【解决方案1】:

根据msdn,http://msdn.microsoft.com/en-us/library/office/ff834621(v=office.14).aspx

Union只能接受30个参数

语法

expression .Union(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)

要克服这个问题,您可以将 35 个范围分成 2 组。 例如

union1 = union(rng1, rng2, ... , rng30)
union2 = union(rng31, rng32, ... , rng35)
unionFinal = union(union1, union2)

【讨论】:

  • 哦!有什么方法可以打印所有 35 个范围? @sam092
  • @Raul 尝试将其拆分为 2 组,然后再次应用联合(就像我在回答中所做的那样)。这有帮助吗?
  • 'unionFinal = Union(union1, union2) With .PageSetup .PrintArea = Union(unionFinal).Address .Orientation = xlLandscape .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With' 这是代码看起来如何,现在错误是“Argument not optional”在 pageSetup 中突出显示 Union。
  • @raul 应该是 .PageSetup .PrintArea = unionFinal.Address
  • 是的,我更正了它,然后我收到错误 424:需要对象,突出显示 'unionFinal = Union(union1, union2)' @sam092
【解决方案2】:

您在 Excel 中达到了两个限制:Union 的最大参数(正如其他人所说)和 PrintArea 的 255 个字符的字符串长度限制。

如果您不使用绝对寻址,则您的打印区域地址长度

试试这个

Sub Demo()
    ReDim rng(1 To 35)
    Dim rngPrintArea As Range
    Dim i As Long
    With Sheets("Performance")
        Set rng(1) = .Range("$A$1:$U$13")
        Set rng(2) = .Range("$B$15:$Z$52")
        Set rng(3) = .Range("$B$55:$Z$92")
        Set rng(4) = .Range("$B$95:$Z$132")
        Set rng(5) = .Range("$B$135:$Z$172")
        Set rng(6) = .Range("$B$175:$Z$212")
        Set rng(7) = .Range("$B$215:$Z$252")
        Set rng(8) = .Range("$B$255:$Z$292")
        Set rng(9) = .Range("$B$295:$Z$332")
        Set rng(10) = .Range("$B$335:$Z$372")
        Set rng(11) = .Range("$B$374:$Z$407")
        Set rng(12) = .Range("$B$410:$Z$443")
        Set rng(13) = .Range("$B$446:$Z$479")
        Set rng(14) = .Range("$B$482:$Z$515")
        Set rng(15) = .Range("$B$518:$Z$551")
        Set rng(16) = .Range("$B$554:$Z$587")
        Set rng(17) = .Range("$B$590:$S$610")
        Set rng(18) = .Range("$B$613:$V$642")
        Set rng(19) = .Range("$B$650:$U$662")
        Set rng(20) = .Range("$B$664:$Z$701")
        Set rng(21) = .Range("$B$701:$Z$741")
        Set rng(22) = .Range("$B$744:$Z$781")
        Set rng(23) = .Range("$B$784:$Z$821")
        Set rng(24) = .Range("$B$824:$Z$861")
        Set rng(25) = .Range("$B$864:$Z$901")
        Set rng(26) = .Range("$B$904:$Z$941")
        Set rng(27) = .Range("$B$944:$Z$981")
        Set rng(28) = .Range("$B$984:$Z$1021")
        Set rng(29) = .Range("$B$1023:$AD$1066")
        Set rng(30) = .Range("$B$1069:$AD$1112")
        Set rng(31) = .Range("$B$1115:$AD$1158")
        Set rng(32) = .Range("$B$1161:$AD$1204")
        Set rng(33) = .Range("$B$1207:$AD$1250")
        Set rng(34) = .Range("$B$1253:$AD$1296")
        Set rng(35) = .Range("$B$1299:$S$1323")

        Set rngPrintArea = rng(1)
        For i = 2 To 35
            Set rngPrintArea = Union(rngPrintArea, rng(i))
        Next

        With .PageSetup
            .PrintArea = rngPrintArea.Address(False, False)
            .Orientation = xlLandscape
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = 1
        End With

    End With
End Sub

【讨论】:

  • 谢谢你,@chrisneilsen。该代码工作正常,除了一个问题。它最多只能打印 rng(26)。可以做什么?
  • 看来我错了:Range.Address 属性似乎在连续范围边界 $,您的整个范围地址实际上也是 > 255 个字符.我认为你别无选择。我在对您的 Q 的评论中发布的链接建议在循环中打印部分范围,也许您可​​以尝试一下?
  • 我明白了。我尝试通过您提供的链接,但我不是专家,对此一无所知。无论如何,谢谢你的帮助。我可能不得不将范围分成不同的工作表。
  • 该链接中的想法是将打印区域设置为一个范围(例如您的范围 1..10),打印该区域,然后设置打印另一个区域(例如您的范围 11..20) .像这样继续,直到打印所有区域。
【解决方案3】:

更短...

Sub Set_PrintArea()

Dim rng As Range, x As Long, arr

    'add all your ranges here...
    arr = Array("$A$1:$U$13", "$B$15:$Z$52", "$B$55:$Z$92", "$B$95:$Z$132")

    With Worksheets("Performance")

        Set rng = .Range(arr(LBound(arr)))
        For x = LBound(arr) + 1 To UBound(arr)
           Set rng = Application.Union(rng, .Range(arr(x)))
        Next x

        With .PageSetup
            .PrintArea = rng.Address
            .Orientation = xlLandscape
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = 1
        End With

        .PrintPreview

    End With


End Sub

【讨论】:

  • 显示运行时错误 1004:无法设置 PageSetup 类的 PrintArea 属性。可能是因为范围大吗? @蒂姆威廉姆斯
  • 看起来Address() 最多包含大约 256 个字符:范围已正确构建,但您无法获取其地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多