2016-11-17 121 views
0

如何将以下代码转换为函数,以便我可以通过输入如Function functionname(Cell1, Cell2)之类的名称来调用它?将一段代码转换为函数,以及如何使用该函数。 VBA VBA VBA

我想指定我是一个超级磨砂,如果能够完全告诉我它是如何完成调用值和所有事情的,我会非常喜欢它。如果我需要编写函数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 
+0

好的...所以你问我如何改变我昨天给你的代码,但接受别人的答案? |||你是否想要它作为一个UDF和一个真正的VBA代码来激活它作为一个宏?或者可能是您点击的表单上的一个按钮? – Andreas

+0

对不起,我还是新来的论坛,所以不知道如果我在同一个问题中发布更多的问题是否是好的。而且我不知道如何将代码归功于你:无论如何,我目前正在使用的代码是作为一个宏,但是宏使得这个代码适用于IP需要改变的几个单元,而不只是一个。所以我没有为每个单元格编写这么长的代码,而是想将其缩小到一个函数,在那里我可以给出2个输入,这将是row3中的单元格和row2中的单元格。 – Murgo

+0

你对你认为最适合的答案使用接受按钮,然后可以使用upvote给那些给你一个很好的答案,但不是你喜欢的答案,并且减少那些答案不佳的答案。我敢打赌,如果你访问网站的帮助页面,你可以了解它的工作原理。 row3和row2是什么?你给的信息很少 – Andreas

回答

0

试试这个。你所需要做的就是改变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列,使代码更清楚如何使用它。

+0

你总是冠军男子thx一堆已接受你的答案,并接受你的旧 – Murgo

+0

谢谢:-),欢迎您! – Andreas

+0

@Murgo您是否期望随时可以用完IP?我可以改变代码给你一个更好的错误信息,以防你用尽IP地址 – Andreas