Page 1 of 1

ต้องการนำค่าจาก sub อื่นมาใช้ในอีก sub ต้องทำยังไงครับ

Posted: Tue Jan 21, 2020 4:55 pm
by nuttanan2140
คือผมต้องการนำค่าในตัวแปร suminfo จาก sub cmbsave มาใช้ใน function ถัดมา โดยจะเริ่มทำงานด้วยการกดปุ่ม คำนวณ
นำค่า suminfo จากsub นี้

Code: Select all

Option Explicit
Dim info(300) As Variant
Dim l As Long
Private Sub cmbsave_Click()
    Dim suminfo As Double
    Dim suminfosec As Double
    Dim i As Integer
    If l >= CLng(txtnum.Value) Then
        MsgBox "Not record"
        Exit Sub
    End If
    If txtinfo <> "" Then
        l = l + 1
        info(l) = CLng(txtinfo)
        Call Reset
    Else
        MsgBox "please fill information", vbOKOnly + vbInformation, "information"
        txtinfo.BackColor = vbRed
    End If
    
    suminfosec = 0
    suminfo = 0
    For i = 1 To UBound(info)
        suminfo = suminfo + info(i)
        suminfosec = suminfosec + ((info(i)) ^ 2)
    Next i
    
End Sub 
มาใช้ในfunction นี้ครับ

Code: Select all

Function calculate()
Dim numtotal As Double
Dim up As Double
Dim inup As Double

inup = (txtnum * suminfosec) - suminfo ^ 2
up = Power(inup, 1 / 2)
numtotal = (40 * (up / suminfo)) ^ 2

End Function
และfunction นี้ครับ

Code: Select all

Function calculate_sec()
Dim numtotal As Double
Dim sqrt As Double
Dim inup As Double
Dim front As Double
Dim inlow As Double
Dim inall As Double

front = (40 * txtnum) / suminfo
inup = suminfosec - ((suminfo ^ 2) / txtnum)
inlow = txtnum - 1
inall = inup / inlow
sqrt = Power(inall, 1 / 2)
numtotal = front * (sqrt) ^ 2
End Function

โดยจะให้เริ่มคำนวณเมื่อกดปุ่ม คำนวณ ตาม code นี้ครับ

Code: Select all

Private Sub CommandButton1_Click()
If CLng(txtnum.Value) >= 30 Then
Call calculate
ElseIf CLng(txtnum.Value) < 30 Then
Call calculate_sec
End If
Label6 = calculate Or calculate_sec
End Sub
รบกวนด้วยนะครับ ขอบคุณครับ :D :D

Re: ต้องการนำค่าจาก sub อื่นมาใช้ในอีก sub ต้องทำยังไงครับ

Posted: Tue Jan 21, 2020 7:23 pm
by snasui
:D ทำได้ 2 อย่างเป็นอย่างน้อยครับ

แบบแรก ประกาศตัวแปรเป็นระดับ Module คือต้องประกาศตัวแปรไว้บนสุด เช่นตัวแปร l ใน Code ชุดแรก ใน Module ถัด ๆ ไปค่อยนำตัวแปรนั้นไปใช้

แบบสอง ส่งตัวแปรนั้นไปใช้ใน Function, Procedure ถัดไป

ยกตัวอย่างเช่นด้านล่างตรง Debug.Print จะส่งตัวแปรไปให้กับฟังก์ชั่น calculate โดยฟังก์ชั่น calculate จะต้องเขียนให้รับตัวแปรได้ด้วย

สำหรับการตั้งชื่อฟังก์ชั่น, Procedure, Variable พยายามเลือกค่าใด ๆ ที่ไม่ตรงกับคำสั่งของ VBA

คำว่า calculate เป็น Method หนึ่งของ Object ใน Excel เช่น Sheet1.Calculate, Range("a1:a10").calculate การที่ไปเขียนให้ตรงกันจะเกิด Error ที่ไม่คาดหมายได้ครับ

Code: Select all

Private Sub cmbsave_Click()
    'Other code
    For i = 1 To UBound(info)
        suminfo = suminfo + info(i)
        suminfosec = suminfosec + ((info(i)) ^ 2)
    Next i
    debug.print calculate(suminfosec)
End Sub

Function calculate(x as long)
    Dim numtotal As Double
    Dim up As Double
    Dim inup As Double

    inup = (txtnum * x) - suminfo ^ 2
    up = Power(inup, 1 / 2)
    numtotal = (40 * (up / suminfo)) ^ 2

End Function