【问题标题】:VBA - Increment variable value not changingVBA - 增量变量值不变
【发布时间】:2017-03-04 16:04:25
【问题描述】:

我正在编写一个用于在浏览器选项卡中打开链接的小宏。每 10 个链接在新窗口中打开。你能告诉我为什么变量 index 没有改变它的值吗?

Sub OpenHyperLinks()

Dim xHyperlink As Hyperlink
Dim WorkRng As Range
Dim MaxTabs As Integer
MaxTabs = 10
Static index As Integer
index = 0

On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)

For Each xHyperlink In WorkRng.Hyperlinks
    If index Mod MaxTabs = 0 Then
        xHyperlink.Follow NewWindow:=True
    Else
        xHyperlink.Follow NewWindow:=False
    End If
    Inc (index)
Next
End Sub

及自增函数:

Function Inc(ByRef i As Integer)
   i = i + 1
End Function

感谢您的帮助:)

【问题讨论】:

    标签: vba variables macros increment


    【解决方案1】:

    没有立即增加索引值的原因。 “On Error Resume Next”可能掩盖了阻止调用增量代码的错误情况。我会暂时删除或注释掉错误处理程序以进一步诊断这种可能性。

    没有理由将递增“索引”的代码移动到单独的函数中。将inc(Index) 替换为index=index+1 并消除增量功能。此外,Inc 函数实际上作为Sub 运行,而不是函数,因为它不会向调用者返回值。

    【讨论】:

    • +1 同意最好的方法是在子程序本身内递增,而不是单独的函数。其他选择是声明一个公共变量,例如Public index as Integer 然后得到单独的sub 来增加它
    • 它正在工作:) 谢谢!现在是下一个问题:为什么新的浏览器窗口没有打开?
    • 这不是的答案“你能告诉我为什么变量索引没有改变它的值吗?”。相反,不面对争论是一种解决方法。真正的答案见我的帖子
    • 忽略 ByRef 参数的具体原因是括号强制进行评估,导致参数按值传递,而不管函数本身的显式声明。
    【解决方案2】:

    你必须删除括号

    Inc index
    

    原因是here:由于“你对函数的返回值不感兴趣,你可以像调用Sub过程一样调用函数。省略括号,列出参数,并且不要将函数分配给变量"

    【讨论】:

    • 原因并不是特别是因为对函数的返回值不感兴趣。原因是括号强制将参数的 ByVal 推送到函数,而不考虑参数的 ByRef 声明。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    相关资源
    最近更新 更多