Page 1 of 1
ต้อง set ตัวแปร ครั้งเดียวให้เรียกใช้ได้หลายๆ sub ต้องทำอย่างไรครับ
Posted: Sat Jul 02, 2022 12:37 am
by 10idlnw
ผมต้องการให้ตัวแปรที่จะสร้างครั้งเดียว แล้วเรียกใช้ได้ตลอด module ตามตัวอย่าง เพราะเวลาแก้ จะได้แก้ที่เดียวทีเดียว ผมต้องปรับโค้ดอย่างไรครับ
Code: Select all
'------- {Module1} ------------
Public Test as String
Test = "สวัสดีครับนี่คือ Sub "
Sub MyA()
msgbox Test & "A"
End Sub
Sub MyB()
msgbox Test & "B"
End Sub
Sub MyC()
msgbox Test & "C"
End Sub
'------- {Module1} ------------
Re: ต้อง set ตัวแปร ครั้งเดียวให้เรียกใช้ได้หลายๆ sub ต้องทำอย่างไรครับ
Posted: Sat Jul 02, 2022 6:42 am
by snasui

ปรับตรง
Public Test as String
Test = "สวัสดีครับนี่คือ Sub "
เป็นด้านล่างครับ
Public Const Test as String = "สวัสดีครับนี่คือ Sub "
Re: ต้อง set ตัวแปร ครั้งเดียวให้เรียกใช้ได้หลายๆ sub ต้องทำอย่างไรครับ
Posted: Sat Jul 02, 2022 7:35 am
by 10idlnw
ขอบคุณครับ อาจารย์ ผมทดสอบแล้ว ใช้งานได้สมบูรณ์แบบครับ แต่ถ้าตัวแปรเก็บ path ของไฟล์ละครับครับ จะต้องปรับปรุงโค้ดเป็นแบบไหนครับ ... ผมลองดู คือ ถ้า ตัวแปร
TestPath เก็บ path ที่อยู่ใน "" ทั้งหมด มันใช้งานได้ แต่พอผมใช้เป็น
ThisWorkbook.Path มันก็ขึ้น Error ตามภาพเลยครับ ผมอยากใส่
ThisWorkbook.Path ยังไงไม่ให้ขึ้น Error ครับ เพื่อความยืดหยุ่นครับ
Code: Select all
Public Const TestPath As String = ThisWorkbook.Path & "\"
Sub MyA()
Range("a1") = TestPath & " MyA"
End Sub
Sub MyB()
Range("a2") = TestPath & " MyB"
End Sub
Sub MyC()
Range("a3") = TestPath & " MyC"
End Sub
ผมลองแล้วมันขึ้น Error ตามภาพครับอาจารย์
2022-07-02_7-29-54.jpg
test.xlsm
Re: ต้อง set ตัวแปร ครั้งเดียวให้เรียกใช้ได้หลายๆ sub ต้องทำอย่างไรครับ
Posted: Sat Jul 02, 2022 8:01 am
by 10idlnw
ผมลองหาวิธีทำดูได้แล้วครับ ได้ความรู้ว่า Cons คือค่าคงที่ ส่วน Thisworkbook.path มันไม่ใช่ค่าคงที่เลยใส่ใน cons ไม่ได้ ต้องประกาศตัวแปรเป็น public แล้วเอาค่าของตัวแปรไปวางใน sub ใด sub หนึ่ง ปรากฎว่าใช้งานได้ ขอบพระคุณแนวทางของอาจารย์ครับ
Code: Select all
Public TestPath As String
Sub MyA()
Range("a1") = TestPath & " MyA"
End Sub
Sub MyB()
TestPath = ThisWorkbook.Path & "\"
Range("a2") = TestPath & " MyB"
End Sub
Sub MyC()
Range("a3") = TestPath & " MyC"
End Sub
ผลลัพธ์ที่ได้