VBA-增量变量值不更改
我正在编写一个用于在浏览器选项卡中打开链接的小宏。每10个链接在新窗口中打开一次。你能告诉我为什么变量索引没有改变它的值吗VBA-增量变量值不更改,vba,variables,macros,increment,Vba,Variables,Macros,Increment,我正在编写一个用于在浏览器选项卡中打开链接的小宏。每10个链接在新窗口中打开一次。你能告诉我为什么变量索引没有改变它的值吗 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 = "KutoolsforExc
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
感谢您的帮助:)索引值没有立即增加的原因。“On Error Resume Next”可能掩盖了阻止调用增量代码的错误条件。我会暂时删除或注释掉错误处理程序,以进一步诊断这种可能性
没有理由将递增“index”的代码移动到单独的函数中。替换
inc(index)
使用index=index+1
并消除递增函数。此外,Inc
函数实际上作为子
而不是函数运行,因为它不会向调用者返回值。索引值不递增没有直接的原因“错误恢复下一步”可能掩盖了阻止调用增量代码的错误条件。我会暂时删除或注释掉错误处理程序,以进一步诊断这种可能性
没有理由将递增“索引”的代码移动到单独的函数中。将
inc(Index)
替换为Index=Index+1
,并消除增量函数。此外,Inc
函数实际上是作为子函数而不是函数运行的,因为它不会向调用者返回值 必须删除括号
Inc index
原因是:由于“您对函数的返回值不感兴趣,因此可以用调用子过程的方式调用函数。省略括号,列出参数,不要将函数指定给变量”必须删除括号
Inc index
原因是:因为“您对函数的返回值不感兴趣,所以可以用调用子过程的相同方式调用函数。省略括号,列出参数,不要将函数指定给变量”+1同意最好的方法是在子例程本身内递增,而不是使用单独的函数。另一个选项是声明一个公共变量,例如,public index为整数
,然后获取单独的sub
,以增加它的有效性:)谢谢!现在是下一个问题:为什么新的浏览器窗口没有打开?这不是“你能告诉我为什么变量索引没有改变它的值吗?”的答案。相反,这是一个不面对争论的变通办法。要了解真正的答案,请参阅我的帖子ByRef参数被忽略的具体原因是,括号强制执行一个计算,该计算会导致参数按值传递,而不管函数本身的显式声明如何。+1同意最好的方法是在子例程内递增,而不是使用单独的函数。另一个选项是声明一个公共变量,例如,public index为整数
,然后获取单独的sub
,以增加它的有效性:)谢谢!现在是下一个问题:为什么新的浏览器窗口没有打开?这不是“你能告诉我为什么变量索引没有改变它的值吗?”的答案。相反,这是一个不面对争论的变通办法。要了解真正的答案,请参阅我的帖子ByRef参数被忽略的具体原因是,括号强制执行一个计算,该计算导致参数按值传递,而不管函数本身的显式声明如何。原因并不是因为函数的返回值不感兴趣。原因是,不管参数的ByRef声明如何,圆括号强制将参数按ByVal推送到函数。原因并不是因为函数返回值不感兴趣。原因是,不管参数的ByRef声明如何,圆括号强制将参数按ByVal推送到函数。