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

การสอบถามเรื่อง VBA จำเป็นต้องเขียนมาก่อนเสมอครับ
คำถามที่ถามมาผมเคยตอบไว้แล้วใน
viewtopic.php?f=3&t=3111
เช่น การล้างข้อมูลก็จะใช้โค๊ดแนวนี้
Code: Select all
Sheets("Sheet1").Range("D2:D6").ClearContents
ส่วนการเปิดหน้าชีทต่างๆ โค๊ดที่ใช้ก็จะประมาณนี้
ลองเขียนมาดูก่อนครับ
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

โค๊ดที่โพสต์มา กับคำถามที่ถามข้างบนสุด มีความเกี่ยวข้องกันอย่างไร
คุณถามเรื่องการเรียกชีทต่างๆให้แสดง กับ การล้างข้อมูล หรือว่าผมเข้าใจอะไรผิดไปเหรอครับ
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 อื่นครับผมว่าคุณน่าจะเข้าใจครับ ขอบคุณล่วงหน้าครับ

ขออภัยจริงๆครับ ผมยังไม่เข้าใจจริงๆ เดี๋ยวรอท่านอื่นเข้ามาช่วยแนะนำอีกครั้งน่ะครับ
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

ให้นำ Code ด้านล่างไว้ใน Module1 สำหรับ Code ในชีทอื่น ๆ ให้ลบทิ้งไปให้หมดครับ จากนั้น สร้างปุ่มขึ้นมาใหม่จาก Form Control ปุ่มเดิมที่สร้างจาก ActiveX Control ให้ลบทิ้ง แล้ว Assign Macro CommandButton1- CommandButton4 ให้กับปุ่มที่สร้างขึ้นใหม่โดยคลิกขวาที่ปุ่มแล้วเลือก Assign Macro สำหรับการ Post Code ให้แสดงเป็น Code ดูได้จากที่นี่ จะได้ง่ายต่อการอ่าน
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

ลองเลยครับ ลองแล้วติดปัญหาตรงไหนสามารถถามมาได้ครับ
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

ลองตรวจสอบง่าย ๆ ด้วย MessageBox ว่ามันมีค่าอะไรครับ เช่น