2017-09-09 159 views
0

自從我學習了一點VBA之後已經過了幾年了,而且我確實生鏽了。VBA - 調用其他函數的函數

我想在Sub中定義變量,然後從那個Sub調用各種函數,其中一些函數會調用其他函數等等。

到目前爲止,代碼如下:

'AREAS 

Public Sub Areas() 

Dim h, btf, bbf, tw, ttf, tbf As Double 

h = 300 
btf = 150 
bbf = 150 
tw = 7.1 
tbf = 10.7 
ttf = 10.7 

Call TotalArea(h, btf, bbf, tw, ttf, tbf) 
Call Sum_of_Areas(h, btf, bbf, tw, ttf, tbf) 

End Sub 


Function TotalArea(h, btf, bbf, tw, ttf, tbf As Double) As Double 

TotalArea = btf * ttf + bbf * tbf + (h - ttf - tbf) * tw 

End Function 

Function Area_tf(btf, ttf As Double) As Double 

Area_tf = btf * ttf 

End Function 

Function Area_bf(bbf, tbf As Double) As Double 

Area_bf = bbf * tbf 

End Function 

Function Area_w(h, ttf, tbf, tw As Double) As Double 

Area_w = (h - ttf - tbf) * tw 

End Function 

Function Sum_of_Areas(h, btf, bbf, tw, ttf, tbf As Double) As Double 

Sum_of_Areas = Area_tf + Area_bf + Area_w 

End Function 

第一位運行正常,即TotalArea功能,但另一個(Sum_of_Areas)只是給我的錯誤。我試圖找到做這件事的適當方式,以及我需要聲明哪些變量以及在哪裏。我需要將哪些變量傳遞給函數。

謝謝!

+0

您必須將每個參數傳遞給不是可選的函數(或子)。因此'Sum_of_Areas'中的'Area_tf + Area_bf + Area_w'缺少它們的參數!請記住,Dim h,btf,bbf,tw,ttf,tbf As Double'只聲明'tbf'爲'Double',其他則是'Variant'類型。沒有錯誤信息? – BitAccesser

回答

1

您必須使用sub和function的相同類型變量。 並且不要求功能。

Public Sub Areas() 

Dim h As Double, btf As Double, bbf As Double, tw As Double, ttf As Double, tbf As Double 
Dim Total As Double, mySum As Double 
h = 300 
btf = 150 
bbf = 150 
tw = 7.1 
tbf = 10.7 
ttf = 10.7 

Total = TotalArea(h, btf, bbf, tw, ttf, tbf) 
mySum = Sum_of_Areas(h, btf, bbf, tw, ttf, tbf) 
Range("a1") = Total 
Range("a2") = mySum 
End Sub 


Function TotalArea(h As Double, btf As Double, bbf As Double, tw As Double, ttf As Double, tbf As Double) As Double 

TotalArea = btf * ttf + bbf * tbf + (h - ttf - tbf) * tw 

End Function 

Function Area_tf(btf As Double, ttf As Double) As Double 

Area_tf = btf * ttf 

End Function 

Function Area_bf(bbf As Double, tbf As Double) As Double 

Area_bf = bbf * tbf 

End Function 

Function Area_w(h, ttf, tbf, tw As Double) As Double 

Area_w = (h - ttf - tbf) * tw 

End Function 

Function Sum_of_Areas(h As Double, btf As Double, bbf As Double, tw As Double, ttf As Double, tbf As Double) As Double 

'Sum_of_Areas = Area_tf + Area_bf + Area_w 
Sum_of_Areas = Area_tf(btf, ttf) + Area_bf(bbf, tbf) + Area_w(h, ttf, tbf, tw) 

End Function 
+0

謝謝你們! 我會嘗試儘可能地組織,在sub中聲明所有變量一次,然後從那裏調用我需要的函數。這是繼續這一點的正確方法嗎? 買,一旦我開始添加更多的東西,它可能會變得有點令人生畏。有什麼辦法可以讓pyhton更容易嗎?像在python中有所有的處理,只是發送變量從vba到python獲得其他變量(結果)回來? – Miguel

+0

@Miguel,這取決於你的數據結構是如何。 –

+0

我的想法是讓用戶輸入一些數字。然後用這些數字進行一些處理(基本上檢查土木工程規範),最後在處理完畢後給用戶更多的數字。 python會有用嗎?如果是這樣,用戶是否必須在其機器上安裝python? – Miguel