簡體   English   中英

如何在VBA中的另一個函數中調用一個函數?

[英]How do I call a function inside another function in VBA?

我有一個函數1,看起來像這樣:

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function

我需要在這樣的單獨函數中調用此函數:

Function myOtherFunction(myVar as Variant) As Variant
Dim Some_Column As Range
Some_Column = Range("B4").Address

If Range((myFirstFunction(Some_Column.Column) & 65536)).End(xlUp) <> Range(myFirstFunction(Some_Column.Column) & 1) Then
...some code
End If

我想這是一個錯誤,因為我無法在第二個功能中使用第一個功能。 有沒有辦法解決這個問題?

您的功能沒有傳遞任何東西。

您可能希望在第一個函數中將Col_Letter更改為myFirstFunction。

同樣在第二個函數中,將65536更改為rows.count。

然后它將在這里錯誤:

Some_Column = Range("B4").Address

更改為此:

Set Some_Column = Range("B4")

這是因為它被定義為一個范圍,因此您不能在其中傳遞地址(它是字符串),而在其中傳遞對象(必須使用Set作為對象)

在那之后應該一切都很好。

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
myFirstFunction = vArr(0)
End Function

Function myOtherFunction(myVar As Variant) As Variant
Dim Some_Column As Range
Set Some_Column = Range("B4")

If Range((myFirstFunction(Some_Column.Column) & rows.count)).End(xlUp) <> Range(myFirstFunction(Some_Column.Column) & 1) Then
'...some code
End If
End Function

有問題的部分是Some_Column = Range("B4").Address

  1. Dim Some_Column As Range將變量聲明為引用類型,這意味着您需要通過聲明Set Some_Column = ...對象的引用,並最好在Set Some_Column = Nothing最后釋放它。
  2. .Address返回一個String而不是一個對象,因此應將您的代碼Set Some_Column = Range("B4")以將Some_Column設置為Range。

在第一個函數中還有一個錯誤,即Col_Letter = vArr(0)可能是myFirstFunction = vArr(0) ,或者myFirstFunction = vArr(0) 此行設置函數的返回值function_name = ...

您從該問題復制了解決方案,但是如果您更改函數名稱,則必須在整個過程中進行更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM