ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

บทนำ

บทความนี้อธิบายวิธีการใช้ตัวแปรในขั้นตอนMicrosoft Excelย่อยใน Microsoft Visual Basic for Applications

ข้อมูลเพิ่มเติม

ตัวแปรในกระบวนงานย่อย

ฟีเจอร์ที่มีประสิทธิภาพของภาษาเขียนโปรแกรมคือความสามารถในการจัดเก็บบางอย่างในตัวแปร เพื่อให้เนื้อหาของตัวแปรสามารถใช้หรือสามารถเปลี่ยนแปลงได้ในภายหลังในกระบวนงาน เอกสารนี้จะอธิบายถึงการใช้ตัวแปรต่อไปนี้ในVisual Basic:

  • วิธีประกาศตัวแปร

  • ขั้นตอนและโครงการที่สามารถใช้ตัวแปร

  • ช่วงอายุใช้งานของตัวแปร

ประกาศตัวแปรในแมโคร

วิธีที่ง่ายที่สุดในการประกาศตัวแปรในแมโครคือการใช้ข้อความ Dim บรรทัดต่อไปนี้ประกาศตัวแปรสองตัวให้เป็นจํานวนเต็ม

    Dim x As Integer, y As Integer

เมื่อระบุ x และ y เป็นจํานวนเต็ม คุณจะบอกให้ Visual Basic เก็บหน่วยความจําไว้อย่างเพียงพอกับตัวแปรจํานวนเต็ม (2 ไบต์ต่อตัว x และ y) และข้อมูลที่เก็บไว้ใน x หรือ y คือจํานวนเต็มระหว่าง -32768 ถึง 32767

หมายเหตุ: ถ้าคุณประกาศตัวแปรมากกว่าหนึ่งตัวแปรโดยใช้ใบแจ้งยอด Dim เดียว คุณต้องระบุชนิดข้อมูลของแต่ละตัวแปร

ถ้าคุณไม่ระบุชนิดข้อมูลของแต่ละตัวแปร ตามในโค้ด Visual Basic ต่อไปนี้ ตัวแปร y จะถูกตั้งค่าเป็นตัวแปรจํานวนเต็ม ตัวแปร x จะเป็นชนิดตัวแปร:

    Dim x, y As Integer

For additional information, see Variant data type below.
 

เมื่อต้องการทดสอบตัวแปร ให้ปฏิบัติตามขั้นตอนเหล่านี้:

  1. บันทึกและปิดเวิร์กบุ๊กใดๆ ที่เปิดอยู่ แล้วเปิดเวิร์กบุ๊กใหม่

  2. เริ่มVisual Basicตัวแก้ไข (กด ALT+F11)

  3. บนเมนูแทรกให้คลิกโมดูล

  4. พิมพ์โค้ดต่อไปนี้:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "ค่าของ x คือ " & x & _
        Chr(13) & "ค่าของ y คือ " & y
    End Sub

  5. เรียกใช้Variable_Testแมโคร คุณได้รับข้อความต่อไปนี้:


    the value of x is 10the value of y is 100

  6. คลิก ตกลง

  7. ในVariable_Testให้เปลี่ยนบรรทัด
    ต่อไปนี้x = 10

  8. ถึง:

    x = "error"

  9. เรียกใช้Variable_Testแมโคร

คุณจะได้รับข้อผิดพลาดขณะเรียกใช้เนื่องจาก "ข้อผิดพลาด" ไม่ใช่จํานวนเต็ม และคุณต้องการกําหนดค่าสตริงนี้ให้กับตัวแปรจํานวนเต็ม x
 

สรุปชนิดข้อมูล

ต่อไปนี้เป็นชนิดข้อมูลตัวแปรทั่วไป:

ชนิดข้อมูลตัวแปรทั่วไป

ชนิดข้อมูลแบบ Variant

ถ้าคุณไม่ระบุชนิดข้อมูลเมื่อคุณประกาศตัวแปร หรือคุณไม่ได้ประกาศตัวแปรเลย Visual Basic จะระบุชนิดข้อมูลของตัวแปรนี้โดยอัตโนมัติ ต่อไปนี้คือข้อดีของตัวแปรที่ประกาศเป็นชนิดข้อมูลนี้:

  • ตัวแปรสามารถมีค่าสตริง วันที่ เวลา บูลีน หรือตัวเลข

  • ตัวแปรสามารถแปลงค่าที่มีอยู่โดยอัตโนมัติได้

ข้อเสียคือตัวแปรต้องการหน่วยความจําอย่างน้อย 16 ไบต์ หน่วยความจํา 16 ไบต์อาจมีนัยสําคัญในขั้นตอนขนาดใหญ่หรือในโมดูลที่ซับซ้อน

เมื่อต้องการดูว่าวิธีนี้ใช้งานอย่างไรในแมโคร Variable_Testให้ปฏิบัติตามขั้นตอนต่อไปนี้:

เปลี่ยนโค้ดในแมโครVariable_Testเป็น:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

เรียกใช้Variable_Testแมโคร

คุณจะไม่ได้รับข้อผิดพลาดเนื่องจากคุณสามารถกําหนดอะไรให้กับตัวแปร x และ y

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

    Dim x, y

ขอบเขตของตัวแปร

เมื่อคุณประกาศตัวแปร แมโครอื่นในโมดูลเดียวกันอาจเห็นหรือไม่เห็นในโมดูลอื่น ในโมดูลอื่นๆ หรือในโครงการอื่น ความพร้อมใช้งานของตัวแปรในโมดูลนี้เรียกว่า ขอบเขต ขอบเขตสามชนิดคือระดับกระบวนงาน ระดับโมดูลส่วนตัว และระดับโมดูลสาธารณะ ขอบเขตจะขึ้นอยู่กับวิธีการและที่ที่คุณประกาศตัวแปรหรือตัวแปรของคุณ

ขอบเขตระดับกระบวนงาน

ตัวแปรที่มีขอบเขตระดับกระบวนงานจะไม่สามารถมองเห็นได้ภายนอกกระบวนงานที่มีการประกาศ ถ้าคุณตั้งค่าของตัวแปรที่มีขอบเขตระดับกระบวนงาน เนื้อหาของตัวแปรนั้นจะไม่สามารถมองเห็นได้โดยแมโครอื่น

เมื่อต้องการตรวจสอบว่าตัวแปรที่มีขอบเขตระดับกระบวนงานไม่สามารถมองเห็นได้ภายนอกกระบวนงานที่มีการประกาศ ให้ปฏิบัติตามขั้นตอนเหล่านี้

  1. แทรกโมดูลใหม่ลงในโครงการของคุณ

  2. พิมพ์แมโครทั้งสองรายการต่อไปนี้ลงในมอดูลนี้:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, as seen by Macro1 is " & x 'the next line runs Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, as seen by Macro2 is " & x End Sub

  3. เรียกใช้ Macro1 และคุณจะได้รับข้อความต่อไปนี้:

    x, as seen by Macro1 is 10

  4. คลิกตกลง และคุณจะได้รับข้อความต่อไปนี้:

    x, as seen by Macro2 is

  5. คลิก ตกลง

Macro2 จะไม่แสดงค่าของตัวแปร x เนื่องจากตัวแปร x อยู่ในเครื่องของ Macro1

ขอบเขตระดับโมดูลส่วนตัวและสาธารณะ

คุณสามารถกําหนดตัวแปรในส่วนการประกาศของโมดูล (ที่ด้านบนของมอดูล เหนือกระบวนงานย่อยทั้งหมด) และตั้งค่าขอบเขตตัวแปรของคุณโดยใช้คําชี้แจง Public คําชี้แจง Dim หรือคําชี้แจง Private ถ้าคุณใส่ข้อความ สาธารณะ ไว้หน้าตัวแปรของคุณ ตัวแปรของคุณจะพร้อมใช้งานกับแมโครทั้งหมดในโมดูลทั้งหมดในโครงการ ถ้าคุณใส่ประกาศ Dim หรือ Private ไว้หน้าตัวแปรของคุณ ตัวแปรของคุณจะพร้อมใช้งานเฉพาะกับแมโครในโมดูลที่มีการประกาศตัวแปรเท่านั้น

เมื่อต้องการดูความแตกต่างระหว่างงบสาธารณะและใบแจ้งยอดความสว่าง ให้ปฏิบัติตามขั้นตอนเหล่านี้:

  1. บันทึกและปิดเวิร์กบุ๊กใดๆ ที่เปิดอยู่ แล้วเปิดเวิร์กบุ๊กใหม่

  2. เริ่มVisual Basicตัวแก้ไข

  3. แทรกโมดูลลงในโครงการของคุณ

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
        x = 10
        MsgBox x
        Macro_1b
    End Sub
    Sub Macro_1b()
        x = x * 2
        MsgBox x
        Macro2
    End Sub
  5. แทรกโมดูลอื่นลงในโครงการของคุณ

  6. พิมพ์โค้ดต่อไปนี้ลงในมอดูลนี้:


    Sub Macro2()     x = x * 3
        MsgBox x
    End Sub

  7. เรียกใช้ Macro_1aแมโครในโมดูลแรก

  8. เมื่อตัวแปร x ถูกประกาศเป็น "Public x As Integer" แมโครทั้งสามตัวในโครงการจะมีสิทธิ์เข้าถึงค่าของ x กล่องข้อความแรกแสดงค่า 10 กล่องข้อความที่สองจะแสดงค่า 20 (เนื่องจาก x ถูกคูณด้วย 2 ใน Macro_1b) กล่องข้อความที่สามแสดงค่า 60 (เนื่องจากค่าของ x ถูกเปลี่ยนเป็น 20 ใน Macro_1b แล้วจึงคูณด้วย 3 ใน Macro2)

  9. เปลี่ยนบรรทัดการประกาศในโมดูลแรกจาก:

       Public x As Integer

    ถึง:

       Dim x As Integer

  10. เรียกใช้Macro_1aแมโคร

  11. เมื่อตัวแปร x ถูกประกาศเป็น "Dim x As Integer" เฉพาะแมโครในโมดูลแรกเท่านั้นที่สามารถเข้าถึงค่าของ x ได้ ดังนั้นกล่องข้อความแรกจะแสดงค่า 10 กล่องข้อความที่สองจะแสดงค่า 20 (เนื่องจาก x คูณด้วย 2 ใน Macro_1b) และกล่องข้อความที่สามแสดงค่า 0 (เนื่องจาก Macro2 ไม่เห็นค่าของ x และแมโคร 2 ใช้ค่าที่ไม่ใช่ศูนย์)

  12. เปลี่ยนบรรทัดการประกาศในโมดูลแรกจาก:

      Dim x As Integer

    ถึง:

        Private x As Integer

  13. เรียกใช้Macro_1aแมโคร

  14. กล่องข้อความเดียวกันจะแสดงโดยใช้ขอบเขตใบแจ้งยอดส่วนบุคคลขณะที่ใช้ใบแจ้งยอดจางลง ตัวแปร x มีขอบเขตเดียวกัน ส่วนตัวไปยังโมดูลที่ประกาศตัวแปรนั้น


หมายเหตุ: ถ้าคุณต้องการจํากัดขอบเขตตัวแปรของคุณไว้เพียงโมดูลที่ประกาศตัวแปรนั้น ให้ใช้ Privatestatement แทนการกล่าว Dim They both achieve the same effect, but the scope is clearer when you read the code if you use the Private statement.
 

อายุการใช้งานของตัวแปร

เวลาที่ตัวแปรเก็บรักษาค่าได้เรียกว่าอายุการใช้งาน ค่าของตัวแปรอาจเปลี่ยนแปลงตลอดช่วงอายุใช้งาน แต่จะยังคงค่าไว้ นอกจากนี้ เมื่อตัวแปรสูญเสียขอบเขต ตัวแปรนั้นจะไม่มีค่าอีกต่อไป
 

เตรียมใช้งานค่าของตัวแปร

เมื่อคุณเรียกใช้แมโคร ตัวแปรทั้งหมดจะถูกเตรียมใช้งานเป็นค่า ตัวแปรตัวเลขถูกเตรียมใช้งานเป็นศูนย์ สตริงความยาวตัวแปรจะถูกเตรียมใช้งานเป็นสตริงที่มีความยาวเป็นศูนย์ ("") และสตริงความยาวคงที่จะถูกเติมด้วยโค้ด ASCII 0 ตัวแปรตัวแปรถูกเตรียมใช้งานเป็น ว่างเปล่า ตัวแปรว่างจะแสดงด้วยศูนย์ในบริบทตัวเลขและสตริงที่มีความยาวเป็นศูนย์ ("") ในบริบทสตริง

ตัวแปรระดับกระบวนงาน

ถ้าคุณมีตัวแปรที่ประกาศในแมโครโดยใช้ใบแจ้งยอด Dim ตัวแปรจะรักษาค่าไว้ตราบเท่าที่แมโครยังถูกเรียกใช้อยู่ ถ้าแมโครนี้เรียกแมโครอื่นๆ ค่าของตัวแปรจะถูกเก็บรักษาไว้ (ไม่สามารถใช้ได้กับแมโครอื่น) ตราบเท่าที่แมโครอื่นๆ ยังสามารถใช้งานได้

เมื่อต้องการสาธิตวิธีการใช้งานตัวแปรระดับกระบวนการ ให้ปฏิบัติตามขั้นตอนเหล่านี้:

  1. แทรกโมดูลใหม่ลงในโครงการของคุณ

  2. พิมพ์แมโครทั้งสองรายการต่อไปนี้ลงในโมดูลนี้:

    Sub Macro1()
        'ตั้งค่า x เป็นตัวแปรระดับกระบวนงาน
       Dim x As Integer
       MsgBox "ค่าที่เตรียมใช้งานของ x คือ " & x
       x = 10
        MsgBox "x is " & x
        'บรรทัดถัดไปเรียกใช้ Macro2
        Macro2
        MsgBox "x จะยังคง " & x
    End Sub
    Sub Macro2()
        MsgBox "x ตามที่เห็นโดย Macro2 คือ " & x
    End Sub

  3. เรียกใช้แมโคร1.

  4. คุณได้รับข้อความต่อไปนี้:

        the initialized value of x is 0

  5. คลิกตกลง และคุณจะได้รับข้อความ:

     x is 10

  6. คลิกตกลง และคุณจะได้รับข้อความต่อไปนี้:

    x, as seen by Macro2 is

  7. คลิกตกลง

  8. Macro2 จะไม่แสดงค่าของตัวแปร x เนื่องจากตัวแปร x อยู่ในเครื่องของ Macro1 คุณได้รับข้อความต่อไปนี้:

    x is still 10

  9. คลิก ตกลง

  10. เรียกใช้แมโคร1

คุณได้รับข้อความเดียวกับที่อธิบายไว้ในขั้นตอนที่ 3 ถึง 6 เนื่องจากแมโคร1 หยุดการเรียกใช้งานในขั้นตอนที่ 6 ค่าของตัวแปร x หายไป ดังนั้น เมื่อคุณเรียกใช้ Macro1 อีกครั้งในขั้นตอนที่ 7 ข้อความแรกแสดงค่าของ x เป็นศูนย์ (ค่าที่เตรียมใช้งาน)

คีย์เวิร์ดแบบคงที่

ถ้าตัวแปรระดับกระบวนงานมีการประกาศโดยใช้คีย์เวิร์ด Static ตัวแปรจะรักษาค่าไว้จนกว่าโครงการของคุณจะถูกตั้งค่าใหม่ ดังนั้น ถ้าคุณมีตัวแปรคงที่ ในครั้งถัดไปที่คุณเรียกใช้กระบวนงานของคุณ ตัวแปรคงที่จะถูกเตรียมใช้งานเป็นค่าสุดท้าย

เมื่อต้องการดูวิธีการใช้งานของคีย์เวิร์ดคงที่ ให้ปฏิบัติตามขั้นตอนเหล่านี้:

  1. Change the code in Macro1 to:
    
    Sub Macro1()
        'set x as a procedure level variable
        Static x As Integer
           MsgBox "the initialized value of x is " & x
        x = x + 10
        MsgBox "x is " & x
    End Sub
  2. เรียกใช้แมโคร1.

  3. คุณจะได้รับข้อความ:the initialized value of x is 0

  4. คลิกตกลง และคุณจะได้รับข้อความ:

    x is 10

  5. คลิก ตกลง

  6. เรียกใช้ Macro1 และคุณได้รับข้อความต่อไปนี้:

    the initialized value of x is 10

  7. คลิกตกลง และคุณจะได้รับข้อความต่อไปนี้:

    x is 20

  8. คลิก ตกลง

ค่าที่ปรากฏในข้อความจะแตกต่างกันในครั้งที่สอง เนื่องจากตัวแปร x ถูกประกาศเป็นตัวแปรคงที่ และตัวแปรจะรักษาค่าหลังจากคุณเรียกใช้ Macro1 ในครั้งแรก

หมายเหตุ:  ถ้าคุณมีตัวแปรระดับโมดูล อายุการใช้งานจะเหมือนกับว่าตัวแปรนั้นคือตัวแปรระดับกระบวนการแบบคงที่

เมื่อต้องการตรวจสอบอายุการใช้งานของตัวแปรระดับโมดูล ให้ปฏิบัติตามขั้นตอนเหล่านี้:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. เรียกใช้ Macro1 และคุณจะได้รับข้อความต่อไปนี้:

    the initialized value of x is 0

  3. คลิก ตกลง และคุณจะได้รับข้อความต่อไปนี้:

    x is 10

  4. คลิก ตกลง

  5. เรียกใช้ Macro1 และคุณจะได้รับข้อความนี้:

    the initialized value of x is 10

  6. คลิก ตกลง

  7. คุณได้รับข้อความต่อไปนี้:

    x is 20

  8. คลิก ตกลง

ค่าที่ปรากฏในข้อความจะแตกต่างกันในครั้งที่สอง เนื่องจากตัวแปร x ถูกประกาศเป็นตัวแปรคงที่ และจะยังคงค่าหลังจากคุณเรียกใช้Macro1ในครั้งแรก
 

ตั้งค่าโครงการใหม่เพื่อตั้งค่าตัวแปรใหม่

ถ้าคุณต้องการรีเซ็ตค่าตัวแปรคงที่หรือตัวแปรระดับมอดูลให้คลิกปุ่มรีเซ็ต บน
แถบเครื่องมือมาตรฐาน หรือคลิก รีเซ็ตบนเมนู เรียกใช้

ถ้าคุณตั้งค่านี้ให้กับโครงการMacro1แล้วเรียกใช้Macro1อีกครั้ง ค่าของตัวแปร x จะถูกเตรียมใช้งานกลับไปเป็นศูนย์ และคุณได้รับข้อความแรก:

    the initialized value of x is 0

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×