【问题标题】:Modify variable using a sub/function使用子/函数修改变量
【发布时间】:2017-01-06 10:14:08
【问题描述】:

如果它们是正数,我会尝试在某些变量前面添加一个 + 号。 例如:

Sub mySub()
    Dim cash As Variant 
End Sub

如果我这样做效果很好:

Dim plus As String
plus = "+"


If cash > 0 Then
  cash = plus & cash
  Else
  cash= cash
End If

但我一直在寻找一个子函数或函数,它可以获取我的所有变量,如果它们是正数,则在它们前面添加一个 + 号。

sub NewSub(i As Variant)
    If i > 0 Then
       i = plus & i
       Else
       i = i
    End If
End sub

但它似乎不起作用,因为它没有向我显示任何内容(然后我在 excel 的单元格中显示我的变量)。而且一个函数也不起作用。

关于如何创建子/函数来做到这一点的任何想法?我可以以任何方式遍历我的变量吗?

【问题讨论】:

  • 您是否设想过使用单元格格式?

标签: vba function excel user-defined-functions


【解决方案1】:

首先,开始使用 Option Explicit,它会强制您显式声明每个变量,并将在 VBA 编辑器中而不是在运行时捕获不匹配错误。

接下来,如果您要通过在左端添加“加号”来将数字变量更改为字符串,则原始变量必须是变体类型。如果您想将参数传递给子过程并让子过程更改它,那么参数必须是ByRef

或者,您可以将变量推送到函数中并返回新值。

Option Explicit

Sub main()
    Dim cash As Variant, cash2 As Variant

    cash = 10
    Debug.Print cash    '10 (as number)

    AddPlus cash
    Debug.Print cash    '+10 (as string)

    cash = 10
    Debug.Print cash    '10 (as number)

    cash = udfAddPlus(cash)
    Debug.Print cash    '+10 (as string)

End Sub

Sub AddPlus(ByRef i As Variant)
    If i > 0 Then
       i = "+" & i
    Else
       i = i
    End If
End Sub

Function udfAddPlus(i As Variant)
    If i > 0 Then
       udfAddPlus = "+" & i
    Else
       udfAddPlus = i
    End If
End Function

Debug.Print 命令将输出发送到 VBE 的 Immediate window

【讨论】:

  • 效果很好,谢谢!现在你知道如何用函数遍历不同的变量了吗(比如告诉函数从 cash1 开始,在 cashn 停止)?
  • 如果我有许多 cash 变量要声明,我会使用一个数组。 dim cash(3) as variant 产生 4 个变体变量;现金(0),现金(1),现金(2)和现金(3)。从LBound 循环到UBound
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2020-11-03
  • 2014-03-25
相关资源
最近更新 更多