gpt4 book ai didi

vba - Excel Visual Basic 调用函数作为独立例程

转载 作者:行者123 更新时间:2023-12-04 21:38:53 25 4
gpt4 key购买 nike

我会直奔主题;我试图在 Visual Basic 中定义一个函数,可以简单地调用它,而不必在“等式的另一边”有一些东西。本质上,我希望能够定义一个可以传递一系列变量并基于这些变量执行例程的例程。

我目前定义了以下函数:

Function ImportData(WebAddress As String, OutputCell As Range)

With ActiveSheet.QueryTables.Add(Connection:= _
"URL;" & WebAddress & _
"bin/excelget.exe?TICKER=msft", _
Destination:=OutputCell)

.BackgroundQuery = True
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=False
.SaveData = True
End With

End Function

我想要做的只是简单地调用这个函数,但不一定使某些东西等于或使用这个函数来操作某些东西。因此,例如,我希望能够执行以下操作:
Private Sub ExampleButton_Click()

ImportData("http://www.exampleURL.com/examplejsonhtmlformat","A3")

End Sub

调用此函数时,它只是使用定义的变量逐步执行函数。 OutputCell 中已经定义了一个输出,因此单元格不需要“等于”此函数的输出。

如果有人有任何意见,将不胜感激。

谢谢。

最佳答案

你想让它成为 Sub - 这正是您所描述的:可以调用但不返回值的代码。请注意,调用时不要将 sub 的参数放在括号中。如果你有

Sub myTest(a,b)

然后你用
myTest thing1, thing2

而不是
myTest(thing1, thing2)

更新 基于来自@hnk 和@Ioannis 的出色评论:

可以调用 Sub
Call myTest(thing1, thing2)

但是有一个微妙之处,它与通过值或通过引用传递变量之间的区别有关。当你通过值传递时,你做了一个副本:在程序中改变参数不会改变原来的。但是,当您通过引用传递时,可以更改子内部参数的值 - 并且在子返回后成为参数的新值。我希望原型(prototype)说您希望通过引用传递值:
Sub MyTest(ByRef a)

然后您可以按如下方式覆盖此行为:
Call with                 Passing by
MyTest a Reference
MyTest (a) Value
Call MyTest(a) Reference
Call MyTest((a)) Value

一般来说,最好在函数原型(prototype)中明确说明 - 指定是否需要 byValbyRef如果调用程序出错了,你会收到编译器的警告。更多信息请访问 Hidden features of VBA

如果你在这之后对微软没有一点困惑或者至少对微软感到恼火,那么你没有注意......

后记 Rory 指出,可以在不分配返回值的情况下调用函数。所以你可以有
X = myFunc(y)

或者
myFunc y

两者都将调用该函数 - 但请注意,当您不期望返回值时,您不使用括号。哦,微软,你在想什么……

关于vba - Excel Visual Basic 调用函数作为独立例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24520504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com