Page 1 of 1

การใช้command bottom การการlink macro

Posted: Thu Aug 23, 2012 10:40 am
by sahavit
command bottom ชื่อ nitrogen link macro ไปที่sheet nitrogen
command bottom ชื่อ oxygen link macro ไปที่sheet oxygen
command bottom ชื่อ hydrogen link macro ไปที่sheet hydrogen
command bottom ชื่อ argon link macro ไปที่sheet argon
command bottom ชื่อclear screen อยากทำการล้างข้อมูลในช่องd1:d6

Re: การใช้command bottom การการlink macro

Posted: Thu Aug 23, 2012 11:11 am
by bank9597
:D การสอบถามเรื่อง VBA จำเป็นต้องเขียนมาก่อนเสมอครับ

คำถามที่ถามมาผมเคยตอบไว้แล้วใน viewtopic.php?f=3&t=3111

เช่น การล้างข้อมูลก็จะใช้โค๊ดแนวนี้

Code: Select all

 Sheets("Sheet1").Range("D2:D6").ClearContents
ส่วนการเปิดหน้าชีทต่างๆ โค๊ดที่ใช้ก็จะประมาณนี้

Code: Select all

Sheets("MySheet").Activate
ลองเขียนมาดูก่อนครับ

Re: การใช้command bottom การการlink macro

Posted: Thu Aug 23, 2012 11:20 am
by sahavit
Sub Macro1()
'
' Macro1 Macro
'
Dim i As Integer
On Error Resume Next
With Sheets("nitrogen")
For i = 1 To 109
If i = 1 Then
Rpipe = InputBox("input rpipe")
.Range("r16") = Rpipe
Pinttank1 = InputBox("input P1int")
.Range("r1") = Pinttank1
r1 = InputBox("input R1")
.Range("r14") = r1
Temperature1 = InputBox("input T1int")
.Range("r3") = Temperature1
.Range("b156") = .Range("r1")
.Range("d156") = .Range("r2")
.Range("f156") = .Range("r3")
Vguess = InputBox("input specificvolumn1")
.Range("D157") = Vguess
.Range("b157").Formula = "=B156"
.Range("b158").Formula = "=m27*F156/D157+B162*m27*F156/D157^2"
.Range("b159").Formula = "=B157-B158"
.Range("b159").Select
.Range("b159").GoalSeek Goal:=0, ChangingCell:=.Range("D157")
.Range("a3") = .Range("d158")
r2 = InputBox("input r2")
.Range("r15") = r2
Temperature2 = InputBox("input T2int")
.Range("r6") = Temperature2
.Range("b165") = .Range("r4")
.Range("d165") = .Range("r5")
.Range("f165") = .Range("r6")
Vguess = InputBox("input specificvolumn2")
.Range("D166") = Vguess
.Range("b166").Formula = "=B165"
.Range("b167").Formula = "=m27*F165/D166+B171*m27*F165/D166^2"
.Range("b159").Formula = "=B166-B167"
.Range("b168").Select
.Range("b168").GoalSeek Goal:=0, ChangingCell:=.Range("D166")
.Range("b3") = .Range("d167")
.Range("b177").Formula = "=A175*B176+(B175*B176^2)/2+(C175*B176^3)/3+(D175*B176^4)/4"
.Range("b178").Formula = "=(F165+273)/2"
.Range("b185").Formula = "=(B178*B184+B181)*(B156-1)/10"
.Range("b186").Formula = "=B177+B185"
.Range("c3") = .Range("b186")
.Range("b190").Formula = "=F165-273"
.Range("b191").Formula = "=A189*B190+(B189*B190^2)/2+(C189*B190^3)/3+(D189*B190^4)/4"
.Range("d3") = .Range("b191")
guessTemp1 = InputBox("input T1")
.Range("c119") = guessTemp1
.Range("b113").Formula = "=a4"
.Range("b114") = .Range("a1") / Range("a4")
.Range("b140").Formula = "= ((C3-D3)/2)*(D1/A4)"
.Range("b138").Formula = "= c3+b140"
.Range("b139").Select
.Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
.Range("g2") = .Range("c119")
.Range("f2") = .Range("b132")
.Range("c4") = .Range("b138")
.Range("b113").Formula = "=b4"
.Range("b114") = Range("b1") / Range("b4")
guessTemp1 = InputBox("input T2")
.Range("c119") = guessTemp1
.Range("b140").Formula = "= ((C3-D3)/2)*(D1/b4)"
.Range("b138").Formula = "= D3+b140"
.Range("b139").Select
.Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
.Range("b146").Formula = "=SQRT((f2-h2)*10^5)"
.Range("i2") = .Range("c119")
.Range("h2") = .Range("b132")
.Range("d4") = .Range("b138")
.Range("j2") = .Range("b151")
Else
If .Range("f" & i) < .Range("h" & i) Then Exit For
.Range("b113") = .Range("a" & i + 3)
.Range("b114") = .Range("a1") / .Range("a" & i + 3)
.Range("a142") = .Range("c" & i + 2)
.Range("a144") = .Range("a" & i + 4)
.Range("b142") = .Range("d" & i + 2)
.Range("b140").Formula = "= ((a142-b142)/2)*(D1/A144)"
.Range("b138").Formula = "= a142+b140"
.Range("b139").Select
.Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
.Range("c" & i + 3) = .Range("b138")
.Range("G" & i + 1) = .Range("c119")
.Range("F" & i + 1) = .Range("b132")
.Range("b144") = .Range("b" & i + 4)
.Range("b113") = .Range("b" & i + 3)
.Range("b114") = Range("b1") / Range("b" & i + 3)
.Range("b140").Formula = "= ((a142-b142)/2)*(D1/b144)"
.Range("b138").Formula = "= b142+b140"
.Range("b139").Select
.Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
.Range("b146").Formula = "=SQRT((a154-b154)*10^5)"
.Range("a154") = .Range("f" & i + 1)
.Range("b154") = .Range("h" & i + 1)
.Range("i" & i + 1) = .Range("c119")
.Range("h" & i + 1) = .Range("b132")
.Range("d" & i + 3) = .Range("b138")
.Range("j" & i + 1) = .Range("j" & i) + .Range("b151")
.Range("r12") = .Range("j" & i + 1)
.Range("r8") = .Range("f" & i + 1)
.Range("r10") = .Range("h" & i + 1)
.Range("r9") = .Range("g" & i + 1)
.Range("r11") = .Range("i" & i + 1)
End If
Next i
End With
End Sub
ไม่รู้ว่าผมเขียนผิดตรงไหนอะครับมันerror

Re: การใช้command bottom การการlink macro

Posted: Thu Aug 23, 2012 11:58 am
by bank9597
sahavit wrote:Sub Macro1()
'
' Macro1 Macro
'
Dim i As Integer
On Error Resume Next
With Sheets("nitrogen")
For i = 1 To 109
If i = 1 Then
Rpipe = InputBox("input rpipe")
.Range("r16") = Rpipe
Pinttank1 = InputBox("input P1int")
.Range("r1") = Pinttank1
r1 = InputBox("input R1")
.Range("r14") = r1
Temperature1 = InputBox("input T1int")
.Range("r3") = Temperature1
.Range("b156") = .Range("r1")
.Range("d156") = .Range("r2")
.Range("f156") = .Range("r3")
Vguess = InputBox("input specificvolumn1")
.Range("D157") = Vguess
.Range("b157").Formula = "=B156"
.Range("b158").Formula = "=m27*F156/D157+B162*m27*F156/D157^2"
.Range("b159").Formula = "=B157-B158"
.Range("b159").Select
.Range("b159").GoalSeek Goal:=0, ChangingCell:=.Range("D157")
.Range("a3") = .Range("d158")
r2 = InputBox("input r2")
.Range("r15") = r2
Temperature2 = InputBox("input T2int")
.Range("r6") = Temperature2
.Range("b165") = .Range("r4")
.Range("d165") = .Range("r5")
.Range("f165") = .Range("r6")
Vguess = InputBox("input specificvolumn2")
.Range("D166") = Vguess
.Range("b166").Formula = "=B165"
.Range("b167").Formula = "=m27*F165/D166+B171*m27*F165/D166^2"
.Range("b159").Formula = "=B166-B167"
.Range("b168").Select
.Range("b168").GoalSeek Goal:=0, ChangingCell:=.Range("D166")
.Range("b3") = .Range("d167")
.Range("b177").Formula = "=A175*B176+(B175*B176^2)/2+(C175*B176^3)/3+(D175*B176^4)/4"
.Range("b178").Formula = "=(F165+273)/2"
.Range("b185").Formula = "=(B178*B184+B181)*(B156-1)/10"
.Range("b186").Formula = "=B177+B185"
.Range("c3") = .Range("b186")
.Range("b190").Formula = "=F165-273"
.Range("b191").Formula = "=A189*B190+(B189*B190^2)/2+(C189*B190^3)/3+(D189*B190^4)/4"
.Range("d3") = .Range("b191")
guessTemp1 = InputBox("input T1")
.Range("c119") = guessTemp1
.Range("b113").Formula = "=a4"
.Range("b114") = .Range("a1") / Range("a4")
.Range("b140").Formula = "= ((C3-D3)/2)*(D1/A4)"
.Range("b138").Formula = "= c3+b140"
.Range("b139").Select
.Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
.Range("g2") = .Range("c119")
.Range("f2") = .Range("b132")
.Range("c4") = .Range("b138")
.Range("b113").Formula = "=b4"
.Range("b114") = Range("b1") / Range("b4")
guessTemp1 = InputBox("input T2")
.Range("c119") = guessTemp1
.Range("b140").Formula = "= ((C3-D3)/2)*(D1/b4)"
.Range("b138").Formula = "= D3+b140"
.Range("b139").Select
.Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
.Range("b146").Formula = "=SQRT((f2-h2)*10^5)"
.Range("i2") = .Range("c119")
.Range("h2") = .Range("b132")
.Range("d4") = .Range("b138")
.Range("j2") = .Range("b151")
Else
If .Range("f" & i) < .Range("h" & i) Then Exit For
.Range("b113") = .Range("a" & i + 3)
.Range("b114") = .Range("a1") / .Range("a" & i + 3)
.Range("a142") = .Range("c" & i + 2)
.Range("a144") = .Range("a" & i + 4)
.Range("b142") = .Range("d" & i + 2)
.Range("b140").Formula = "= ((a142-b142)/2)*(D1/A144)"
.Range("b138").Formula = "= a142+b140"
.Range("b139").Select
.Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
.Range("c" & i + 3) = .Range("b138")
.Range("G" & i + 1) = .Range("c119")
.Range("F" & i + 1) = .Range("b132")
.Range("b144") = .Range("b" & i + 4)
.Range("b113") = .Range("b" & i + 3)
.Range("b114") = Range("b1") / Range("b" & i + 3)
.Range("b140").Formula = "= ((a142-b142)/2)*(D1/b144)"
.Range("b138").Formula = "= b142+b140"
.Range("b139").Select
.Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
.Range("b146").Formula = "=SQRT((a154-b154)*10^5)"
.Range("a154") = .Range("f" & i + 1)
.Range("b154") = .Range("h" & i + 1)
.Range("i" & i + 1) = .Range("c119")
.Range("h" & i + 1) = .Range("b132")
.Range("d" & i + 3) = .Range("b138")
.Range("j" & i + 1) = .Range("j" & i) + .Range("b151")
.Range("r12") = .Range("j" & i + 1)
.Range("r8") = .Range("f" & i + 1)
.Range("r10") = .Range("h" & i + 1)
.Range("r9") = .Range("g" & i + 1)
.Range("r11") = .Range("i" & i + 1)
End If
Next i
End With
End Sub
ไม่รู้ว่าผมเขียนผิดตรงไหนอะครับมันerror
:shock: โค๊ดที่โพสต์มา กับคำถามที่ถามข้างบนสุด มีความเกี่ยวข้องกันอย่างไร

คุณถามเรื่องการเรียกชีทต่างๆให้แสดง กับ การล้างข้อมูล หรือว่าผมเข้าใจอะไรผิดไปเหรอครับ

Re: การใช้command bottom การการlink macro

Posted: Thu Aug 23, 2012 12:06 pm
by sahavit
ขอโทษครับที่ผมอธิบายไม่ละเอียดครับโดยอย่างที่คุณเคยบอกครับมันจาเป็นเพียงแค่การเอาค่ามาป้อนสู้หน้าสุดท้ายที่ลิงค์ไปแต่ในmacro แต่ละsheetครับจะมีการป้อนรับค่าเพื่อคำนวณหาค่าP Tไหม่เสมอครับคือถ้าผมใช้codeตามคุณว่ามันจะไม่มีการรับค่าไหม่ครับ ผมขอความกรุณาคุณลองrunในsheet อื่นครับผมว่าคุณน่าจะเข้าใจครับ ขอบคุณล่วงหน้าครับ

Re: การใช้command bottom การการlink macro

Posted: Thu Aug 23, 2012 12:46 pm
by bank9597
sahavit wrote:ขอโทษครับที่ผมอธิบายไม่ละเอียดครับโดยอย่างที่คุณเคยบอกครับมันจาเป็นเพียงแค่การเอาค่ามาป้อนสู้หน้าสุดท้ายที่ลิงค์ไปแต่ในmacro แต่ละsheetครับจะมีการป้อนรับค่าเพื่อคำนวณหาค่าP Tไหม่เสมอครับคือถ้าผมใช้codeตามคุณว่ามันจะไม่มีการรับค่าไหม่ครับ ผมขอความกรุณาคุณลองrunในsheet อื่นครับผมว่าคุณน่าจะเข้าใจครับ ขอบคุณล่วงหน้าครับ
:D ขออภัยจริงๆครับ ผมยังไม่เข้าใจจริงๆ เดี๋ยวรอท่านอื่นเข้ามาช่วยแนะนำอีกครั้งน่ะครับ

Re: การใช้command bottom การการlink macro

Posted: Thu Aug 23, 2012 12:51 pm
by sahavit
ครับผม ขอบคุณครับที่ช่วยดูให้ผม

Re: การใช้command bottom การการlink macro

Posted: Thu Aug 23, 2012 8:58 pm
by snasui
:D ให้นำ Code ด้านล่างไว้ใน Module1 สำหรับ Code ในชีทอื่น ๆ ให้ลบทิ้งไปให้หมดครับ จากนั้น สร้างปุ่มขึ้นมาใหม่จาก Form Control ปุ่มเดิมที่สร้างจาก ActiveX Control ให้ลบทิ้ง แล้ว Assign Macro CommandButton1- CommandButton4 ให้กับปุ่มที่สร้างขึ้นใหม่โดยคลิกขวาที่ปุ่มแล้วเลือก Assign Macro สำหรับการ Post Code ให้แสดงเป็น Code ดูได้จากที่นี่ จะได้ง่ายต่อการอ่าน :arrow: viewtopic.php?f=3&t=1187

Code: Select all

Sub Macro1(x)
Dim i As Integer
On Error Resume Next
With Sheets(x)
    For i = 1 To 109
        If i = 1 Then
            Rpipe = InputBox("input rpipe")
            .Range("r16") = Rpipe
            Pinttank1 = InputBox("input P1int")
            .Range("r1") = Pinttank1
            r1 = InputBox("input R1")
            .Range("r14") = r1
            Temperature1 = InputBox("input T1int")
            .Range("r3") = Temperature1
            .Range("b156") = .Range("r1")
            .Range("d156") = .Range("r2")
            .Range("f156") = .Range("r3")
            Vguess = InputBox("input specificvolumn1")
            .Range("D157") = Vguess
            .Range("b157").Formula = "=B156"
            .Range("b158").Formula = "=m27*F156/D157+B162*m27*F156/D157^2"
            .Range("b159").Formula = "=B157-B158"
            .Range("b159").Select
            .Range("b159").GoalSeek Goal:=0, ChangingCell:=.Range("D157")
            .Range("a3") = .Range("d158")
            r2 = InputBox("input r2")
            .Range("r15") = r2
            Temperature2 = InputBox("input T2int")
            .Range("r6") = Temperature2
            .Range("b165") = .Range("r4")
            .Range("d165") = .Range("r5")
            .Range("f165") = .Range("r6")
            Vguess = InputBox("input specificvolumn2")
            .Range("D166") = Vguess
            .Range("b166").Formula = "=B165"
            .Range("b167").Formula = "=m27*F165/D166+B171*m27*F165/D166^2"
            .Range("b159").Formula = "=B166-B167"
            .Range("b168").Select
            .Range("b168").GoalSeek Goal:=0, ChangingCell:=.Range("D166")
            .Range("b3") = .Range("d167")
            .Range("b178").Formula = "=(F165+273)/2"
            .Range("b185").Formula = "=(B178*B184+B181)*(B156-1)/10"
            .Range("b186").Formula = "=B177+B185"
            .Range("c3") = .Range("b186")
            .Range("b190").Formula = "=F165-273"
             .Range("d3") = .Range("b191")
            guessTemp1 = InputBox("input T1")
            .Range("c119") = guessTemp1
            .Range("b113").Formula = "=a4"
            .Range("b114") = .Range("a1") / Range("a4")
            .Range("b140").Formula = "= ((C3-D3)/2)*(D1/A4)"
            .Range("b138").Formula = "= c3+b140"
            .Range("b139").Select
            .Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
            .Range("g2") = .Range("c119")
            .Range("f2") = .Range("b132")
            .Range("c4") = .Range("b138")
            .Range("b113").Formula = "=b4"
            .Range("b114") = Range("b1") / Range("b4")
            guessTemp1 = InputBox("input T2")
            .Range("c119") = guessTemp1
            .Range("b140").Formula = "= ((C3-D3)/2)*(D1/b4)"
            .Range("b138").Formula = "= D3+b140"
            .Range("b139").Select
            .Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
            .Range("b146").Formula = "=SQRT((f2-h2)*10^5)"
            .Range("i2") = .Range("c119")
            .Range("h2") = .Range("b132")
            .Range("d4") = .Range("b138")
            .Range("j2") = .Range("b151")
        Else
            If .Range("f" & i) < .Range("h" & i) Then Exit For
            .Range("b113") = .Range("a" & i + 3)
            .Range("b114") = .Range("a1") / .Range("a" & i + 3)
            .Range("a142") = .Range("c" & i + 2)
            .Range("a144") = .Range("a" & i + 4)
            .Range("b142") = .Range("d" & i + 2)
            .Range("b140").Formula = "= ((a142-b142)/2)*(D1/A144)"
            .Range("b138").Formula = "= a142+b140"
            .Range("b139").Select
            .Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
            .Range("c" & i + 3) = .Range("b138")
            .Range("G" & i + 1) = .Range("c119")
            .Range("F" & i + 1) = .Range("b132")
            .Range("b144") = .Range("b" & i + 4)
            .Range("b113") = .Range("b" & i + 3)
            .Range("b114") = Range("b1") / Range("b" & i + 3)
            .Range("b140").Formula = "= ((a142-b142)/2)*(D1/b144)"
            .Range("b138").Formula = "= b142+b140"
            .Range("b139").Select
            .Range("b139").GoalSeek Goal:=0, ChangingCell:=.Range("c119")
            .Range("b146").Formula = "=SQRT((a154-b154)*10^5)"
            .Range("a154") = .Range("f" & i + 1)
            .Range("b154") = .Range("h" & i + 1)
            .Range("i" & i + 1) = .Range("c119")
            .Range("h" & i + 1) = .Range("b132")
            .Range("d" & i + 3) = .Range("b138")
            .Range("j" & i + 1) = .Range("j" & i) + .Range("b151")
            .Range("r12") = .Range("j" & i + 1)
            .Range("r8") = .Range("f" & i + 1)
            .Range("r10") = .Range("h" & i + 1)
            .Range("r9") = .Range("g" & i + 1)
            .Range("r11") = .Range("i" & i + 1)
        End If
    Next i
End With
End Sub

Sub CommandButton1_Click()
Call Macro1("nitrogen")
End Sub

Sub CommandButton2_Click()
Call Macro1("oxygen")
End Sub

Sub CommandButton3_Click()
Call Macro1("hydrogen")
End Sub

Sub CommandButton4_Click()
Call Macro1("argon")
End Sub

Re: การใช้command bottom การการlink macro

Posted: Mon Aug 27, 2012 11:08 am
by sahavit
รบกวนถามอีกหน่อยครับถ้าผมอยากให้มันรับค่าจากrange("r8")ไปแสดงที่range("d1")
ผมพิมcodeแบบนี้ได้ไหมครับ

Code: Select all

Sheets(Sheet3).Range("d1") = Sheets(x).Range("r8")

Re: การใช้command bottom การการlink macro

Posted: Mon Aug 27, 2012 3:10 pm
by snasui
:D ลองเลยครับ ลองแล้วติดปัญหาตรงไหนสามารถถามมาได้ครับ

Re: การใช้command bottom การการlink macro

Posted: Mon Aug 27, 2012 3:14 pm
by sahavit
ลองแล้วครับมันดูรู้ว่าrun นะครับแต่ค่าไม่ได้ถูกส่งมาครับ

Re: การใช้command bottom การการlink macro

Posted: Mon Aug 27, 2012 3:48 pm
by snasui
:shock: ลองตรวจสอบง่าย ๆ ด้วย MessageBox ว่ามันมีค่าอะไรครับ เช่น

Code: Select all

MsgBox Sheets(x).Range("R8")