【问题标题】:excel vba call subroutine with variables带有变量的excel vba调用子程序
【发布时间】:2011-06-06 12:52:09
【问题描述】:

我定义了以下子程序:

Sub EnterCellValueMonthNumber(cells As range, number As Integer)

range(cells).Select
ActiveCell.FormulaR1C1 = number

End Sub

当我这样调用子程序时:

EnterCellValueMonthNumber ("N23:Q23",1)

我收到以下错误消息:

Compile error Expected: =

我不知道为什么会收到此消息。有谁知道我错过了什么?

【问题讨论】:

    标签: excel vba subroutine


    【解决方案1】:

    您可以将 sub 称为

    EnterCellValueMonthNumber "N23:Q23", 1
    

    没有括号。或者

    Call EnterCellValueMonthNumber("N23:Q23", 1)
    

    括号,前面是Call。

    此外,您的 Sub 期望 Range 对象作为第一个参数,并且您提供了一个字符串;您应该将 sub 的签名更改为:

    Sub EnterCellValueMonthNumber(cells As String, number As Integer)
    

    另外,我不确定你想用这段代码实现什么,因为它只会将范围的左上角单元格设置为 1。像

    Range(cells).Value = number
    ' Or, if you're going to be passing in something more complex later...
    Range(cells).FormulaR1C1 = number
    

    更合适?

    我也会非常谨慎地使用Range("...") 而不指定您所指的工作表。这将作用于活动工作表,因此可能导致意外问题,几乎总是更喜欢SheetX.Range("...")。同样使用.Select,也没有必要,只会给你以后带来麻烦。

    【讨论】:

    • 虽然我定义了另一个子程序: Sub EnterCellValue(cells As range) range(cells).Select ActiveCell.FormulaR1C1 = "M" End Sub 并这样称呼它: EnterCellValue ("N23:Q23")并且没有问题。这很烦人。
    【解决方案2】:

    您实际上有 2 个问题。

    首先是您问题的实际答案。你需要说:

    Call EnterCellValueMonthNumber("N23:Q23",1)
    

    但是如果你运行它仍然行不通,因为你已经设置了 cells 类型的 range... 将它设置为类型 string 使用这个代替:

    Sub EnterCellValueMonthNumber(cells As String, number As Integer)
        Range(cells).Select
        ActiveCell.FormulaR1C1 = number
    End Sub
    

    【讨论】:

      【解决方案3】:

      试试下面的代码:

      Sub EnterCellValueMonthNumber(ByVal cells As String, number As Integer)
      
          Range(cells).Select
      
          ActiveCell.FormulaR1C1 = number
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 2016-03-18
        • 2011-11-16
        • 2015-04-12
        • 1970-01-01
        相关资源
        最近更新 更多