使用子/函数修改变量

时间:2016-08-30 08:16:24

标签: excel vba function excel-vba user-defined-functions

我试图在某些变量前加一个+号,如果它们是正数的话。 例如:

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的单元格中显示我的变量)。功能也不起作用。

有关如何创建子/函数的任何想法吗?我可以以任何方式遍历我的变量吗?

1 个答案:

答案 0 :(得分:3)

首先,开始使用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