【问题标题】:Converting a piece of code into a function, and how to take the function into use. VBA VBA VBA将一段代码转换为函数,以及如何使用该函数。 VBA VBA VBA
【发布时间】:2016-11-17 07:54:59
【问题描述】:

如何将以下代码变成一个函数,这样我就可以通过输入类似Function functionname(Cell1, Cell2) 的内容来调用它?

我想说明我是一个超级磨砂人,如果你能告诉我它是如何处理调用值和所有内容的,我会非常喜欢它。例如,如果我需要编写函数 functionname(Cell1.value, Cell2.value) 以使其工作?
总的来说,我寻求有关如何将此代码转换为函数以及稍后如何在代码中使用该函数的知识?
请记住,我是 VBA 的彻底磨砂,所以请具体说明。最好显示工作示例。

  Arr = Split(Range("G3").Value, ".")
    If Arr(3) = 254 Then
        Arr(3) = 1
        If Arr(2) < 254 Then
            Arr(2) = Arr(2) + 1
        Else
            Arr(2) = 1
            If Arr(1) < 254 Then
                Arr(1) = Arr(1) + 1
            Else
                Arr(1) = 1
                If Arr(0) < 254 Then
                    Arr(0) = Arr(0) + 1
                Else
                    MsgBox "Error! No more IP's available"
                End If
            End If
        End If
    Else
        Arr(3) = Arr(3) + 1
    End If

    Range("G2").Value = Join(Arr, ".")


End Sub

【问题讨论】:

  • 好的...所以你问我如何更改我昨天给你的代码,但接受了别人的回答? |||您是否希望它作为 UDF 或作为宏激活的真正 VBA 代码?或者可能是您单击的工作表上的一个按钮?
  • 是的,对不起,我还是论坛的新手,所以不知道如果我在同一个问题中发布更多问题是否很好。而且我也不知道如何将代码归功于您.. :S 无论如何,我目前正在使用的是将代码作为宏,但宏使该代码适用于 IP 需要更改的几个单元格,而不仅仅是一个。因此,我不想为每个单元格编写这么长的代码,而是想将其缩小到一个函数,在那里我可以只给出 2 个输入,即 row3 中的单元格和 row2 中的单元格。
  • 您在您认为最适合您的答案上使用“接受”按钮,然后可以对那些给您好的答案但不是您喜欢的答案的人投赞成票,而对做出正确答案的人投反对票糟糕的答案。我敢打赌,如果您访问该网站的帮助页面,您可以了解它是如何工作的。第 3 行和第 2 行是什么?你提供的信息很少
  • 澄清一下:在当前示例中,它是 G2 和 G3。我在同一行中有其他几个需要相同的转换,例如 Z2 和 Z3、AB2 和 AB3 等等。我希望做到这一点,以便我可以在代码中调用你的 if/else 语句的函数,而不必一次又一次地编写整段代码,在可能的情况下用数千行代码填充模块变得更简单。
  • 而且它们都是需要相同功能的 IP 加一?

标签: arrays vba function


【解决方案1】:

试试这个。您需要做的就是更改sub newloc() 中的范围。

Sub newloc()

   Range("G2").Value = PlusOne(Range("G2").Value)
   Range("Z2").Value = PlusOne(Range("Z2").Value)
   Range("AB2").Value = PlusOne(Range("AB2").Value)



End Sub



Function PlusOne(IP)
    Arr = Split(IP, ".")
    if(instr(Arr(3), "/")<>0) then
        prefix = mid(Arr(3), instr(Arr(3), "/"))
        Arr(3) = left(Arr(3), instr(Arr(3), "/")-1)
    end if
    If Arr(3) = 254 Then
        Arr(3) = 1
        If Arr(2) < 254 Then
            Arr(2) = Arr(2) + 1
        Else
            Arr(2) = 1
            If Arr(1) < 254 Then
                Arr(1) = Arr(1) + 1
            Else
                Arr(1) = 1
                If Arr(0) < 254 Then
                    Arr(0) = Arr(0) + 1
                Else
                    MsgBox "Error! No more IP's available"
                End If
            End If
        End If
    Else
        Arr(3) = Arr(3) + 1
    End If

    if prefix <>"" then Arr(3) = Arr(3) & prefix
    PlusOne = Join(Arr, ".")
End Function

编辑:添加了 Z 和 AB 列,使代码更清楚地了解如何使用它。

【讨论】:

  • 你永远是冠军,已经接受了你的答案,也接受了你的旧答案
  • @Murgo 您是否希望您随时会用完 IP?如果您的 IP 用完,我可以更改代码以提供更好的错误消息
  • 哦,在翻来覆去之后,由于某种原因它仍然无法正常工作。我似乎找不到错误?,即使我制作了一个新模块并只是复制粘贴您的代码,它仍然会出现不匹配类型错误??
  • 附言。不,我们预计不会很快发生这种情况:P 我更改了我必须更改的代码,并且有些段落我只需要更改第三个甚至第二个八位字节,我想出了如何解决问题。我们不会很快用完 :D 但谢谢询问
  • 嘿,我想你误解了我很难理解为什么你写给我的代码在我对它进行任何更改之前就有运行时错误? :D
【解决方案2】:

只需将您的代码定义为一个函数。检查此网页以获取更多信息... 确保在要使用函数的同一工作表中创建模块。

https://support.office.com/en-us/article/Create-Custom-Functions-in-Excel-2007-2f06c10b-3622-40d6-a1b2-b6748ae8231f

作为示例,我将向您发送我刚刚创建的这个小功能,以说明如何操作...

Function funct_sum(x As Integer, y As Integer)

    funct_sum = x + y

End Function

此功能现在可以在您的 Excel 工作表中使用。

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多