Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA-增量变量值不更改_Vba_Variables_Macros_Increment - Fatal编程技术网

VBA-增量变量值不更改

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

我正在编写一个用于在浏览器选项卡中打开链接的小宏。每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 = "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推送到函数。