วิธีการใช้ตัวแปรใน Excel sub-procedures ใน Visual Basic สำหรับโปรแกรมประยุกต์

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 843144 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

บทนำ

บทความนี้อธิบายวิธีการใช้ตัวแปรใน Microsoft Excel sub-procedures ใน Microsoft Visual Basic สำหรับโปรแกรมประยุกต์

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

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

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

กำหนดตัวแปรในแมโคร

วิธีที่ง่ายที่สุดเพื่อกำหนดตัวแปรในแมโครคือการ ใช้การมืดคำสั่ง บรรทัดต่อไปนี้ declares ตัวแปรที่สอง x และ y เป็นจำนวนเต็ม:
Dim x As Integer, y As Integer
ด้วย x และ y ที่ระบุเป็นจำนวนเต็ม คุณจะบอก Visual Basic เพื่อตั้งค่าชขนาดหน่วยความจำที่เพียงพอสำหรับตัวแปรเป็นจำนวนเต็ม (2 ไบต์แต่ละสำหรับ x และ y) และข้อมูลที่เก็บไว้ใน x หรือ y เป็นจำนวนเต็มระหว่าง-32768 ถึง 32767

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

ถ้าคุณไม่ได้ระบุชนิดของข้อมูลสำหรับตัวแปร แต่ละตัวในรหัสต่อไปนี้ของ Visual Basic เฉพาะตัวแปร y ถูกเซ็ตอัพเป็นใช่ตัวแปรจำนวนเต็ม ตัวแปร x จะเป็นชนิดตัวแปร:
Dim x, y As Integer
สำหรับข้อมูลเพิ่มเติม ให้ดูที่ส่วน "ข้อมูลชนิดตัวแปร"

การดำเนินการทดสอบที่ตัวแปร ดำเนินการดังต่อไปนี้:
  1. บันทึก และปิดสมุดงานเปิด แล้วจึง เปิดสมุดงานใหม่
  2. เริ่มตัวแก้ไข Visual Basic (กด ALT + F11)
  3. ในการแทรกเมนู คลิกโมดูล.
  4. พิมพ์รหัสต่อไปนี้:
    Sub Variable_Test()
    Dim x As Integer, y As Integer
    x = 10
    y = 100
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
    End Sub
  5. เรียกใช้การVariable_Testแมโคร คุณได้รับข้อความต่อไปนี้::
    ค่าของ x คือ 10
    ค่า y ที่เป็น 100
  6. คลิกตกลง.
  7. ในการVariable_Testแมโครเปลี่ยนบรรทัดต่อไปนี้:
    x = 10
    

    เมื่อต้องการไป:
    x = "error"
    
  8. เรียกใช้การVariable_Testแมโคร
คุณจะได้รับข้อผิดพลาดในการทำได้เนื่องจาก "ข้อผิดพลาด" ไม่ใช่จำนวนเต็ม และคุณพยายามกำหนดค่าสายอักขระนี้ x ตัวแปรของจำนวนเต็ม

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

ตารางต่อไปนี้แสดงรายการชนิดข้อมูลที่ตัวแปรที่ทั่วไป:

ยุบตารางนี้ขยายตารางนี้
ชนิดข้อมูล:ขนาดการเก็บข้อมูลช่วงที่อนุญาต
Booleanไบต์ที่ 2จริง หรือเท็จ
จำนวนเต็มไบต์ที่ 2-32,768 ไป 32,767
Longไบต์ที่ 4-2,147,483,648 ไป 2,147,483,647
ขีดเส้นใต้คู่ไบต์ที่ 8-1.79769313486232E308 ไป - 4.94065645841247E - 324 สำหรับค่าที่เป็นค่าลบ 4.94065645841247E - 324 1.79769313486232E308 สำหรับค่าบวก
สกุลเงินไบต์ที่ 8-922,337,203,685,477.5808 ไป 922,337,203,685,477.5807
วันที่ไบต์ที่ 81 มกราคม 100 ถึงวันที่ 31 ธันวาคม 9999
stringไบต์ที่ 10 + ความยาวของสายอักขระ

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

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

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

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

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

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

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

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

เมื่อต้องการตรวจสอบว่า ตัวแปรกับขอบเขตของระดับกระบวนการไม่ได้ถูกเห็นนอกกระบวนการที่จะประกาศ ดำเนินการดังต่อไปนี้:
  1. Insert a new module into your project.
  2. Type both of the following macros into this module:
    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. คลิกตกลง.
Macro2does not display a value for the variable x because the variable x is local toMacro1.

Private and public module-level scope

You can define variables in the declarations section of a module (at the top of a module, above all sub procedures), and set the scope of your variable by using theสาธารณะstatement, theDimstatement, or thePrivateคำสั่ง If you put theสาธารณะstatement in front of your variable, your variable will be available to all the macros in all the modules in the project. If you put either theDimstatement or thePrivatestatement in front of your variable, your variable is available only to macros in the module where it is being declared.

To see the difference between theสาธารณะstatement and theDimstatement, follow these steps:
  1. Save and close any open workbooks and then open a new workbook.
  2. Start the Visual Basic Editor.
  3. Insert a module into your project.
  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. Insert another module into your project.
  6. Type the following code into this module:
    Sub Macro2()
    x = x * 3
    MsgBox x
    End Sub
    
  7. เรียกใช้การMacro_1amacro in the first module.

    With the variable x declared as "Public x As Integer", all three macros in the project have access to the value of x. The first message box displays a value of 10. The second message box displays a value of 20 (because x is multiplied by 2 inMacro_1b). The third message box displays a value of 60 (because the value of x was changed to 20 inMacro_1band then it was multiplied by 3 inMacro2).
  8. Change the declaration line in the first module from:
    Public x As Integer

    เมื่อต้องการไป:
    Dim x As Integer
  9. เรียกใช้การMacro_1amacro.

    With the variable x declared as "Dim x As Integer", only the macros in the first module have access to the value of x. So the first message box displays a value of 10, the second message box displays a value of 20, (because x is multiplied by 2 inMacro_1b) and the third message box displays a value of 0 (becauseMacro2does not see the value of x and the uninitialized value of zero is used byMacro 2).
  10. Change the declaration line in the first module from:
    Dim x As Integer

    เมื่อต้องการไป:
    Private x As Integer
  11. เรียกใช้การMacro_1amacro.
ในกล่องข้อความเดียวกันจะแสดงขึ้น โดยใช้การส่วนตัวงบดุล scope ตามที่ผู้ใช้นั้นมืดคำสั่ง x ที่ตัวแปรมีขอบเขตเดียวกัน ส่วนตัวเพื่อที่จะประกาศโมดูล

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

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

เวลาซึ่งตัวแปร retains มูลค่าเรียกว่าการหมดอายุการใช้งาน ค่าของตัวแปรอาจเปลี่ยนแปลงได้ผ่านหมดอายุการใช้งาน แต่คุณจะเก็บค่า นอกจากนี้ เมื่อตัวแปรหมดขอบเขต ไม่มีค่า

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

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

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

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

เมื่อต้องการแสดงให้เห็นถึงตัวแปรว่าขั้นตอนระดับควบคุมงาน การทำตามขั้นตอนเหล่านี้:
  1. แทรกโมดูลใหม่ลงในโครงการของคุณ
  2. พิมพ์ทั้งสองอย่างแมโครดังต่อไปนี้ลงในโมดูลนี้:
    Sub Macro1()
    'set x as a procedure level variable
    Dim x As Integer
       MsgBox "the initialized value of x is " & x
    x = 10
    MsgBox "x is " & x
    'the next line runs Macro2
    Macro2
    MsgBox "x is still " & x
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. เรียกใช้Macro1.

    คุณได้รับข้อความต่อไปนี้::
    ค่าเริ่มของ x เป็น 0
  4. คลิกตกลง.

    คุณได้รับข้อความต่อไปนี้::
    x คือ 10
  5. คลิกตกลง.

    คุณได้รับข้อความต่อไปนี้::
    มี x ตามที่เห็นได้ โดยการ Macro2
  6. คลิกตกลง.

    Macro2ไม่แสดงค่าสำหรับตัวแปร x เนื่องจาก x ที่ตัวแปรเฉพาะให้Macro1. คุณได้รับข้อความต่อไปนี้::
    x ยังคงเป็น 10
  7. คลิกตกลง.
  8. เรียกใช้Macro1.
คุณได้รับข้อความแสดงข้อความเดียวกันกับที่อธิบายไว้ในขั้นตอนที่ 3 ถึง 6 เพราะทันทีMacro1หยุดการทำงานในขั้นตอนที่ 6 ค่าของตัวแปร x ไม่สูญหาย รันใหม่อีก ดังนั้น เมื่อคุณครั้งMacro1ในขั้นตอนที่ 7 ข้อความแรกแสดงค่าของ x เป็นศูนย์ (เริ่มค่า)

คำสำคัญแบบคงที่

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

เมื่อต้องการดูวิธีการทำงานกับคำสำคัญคง ดำเนินการดังต่อไปนี้:
  1. เปลี่ยนรหัสในMacro1เมื่อต้องการไป:
    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. เรียกใช้Macro1.

    คุณได้รับข้อความต่อไปนี้::
    ค่าเริ่มของ x เป็น 0
  3. คลิกตกลง.

    คุณได้รับข้อความต่อไปนี้::
    x คือ 10
  4. คลิกตกลง.
  5. เรียกใช้Macro1.

    คุณได้รับข้อความต่อไปนี้::
    ค่าเริ่มของ x คือ 10
  6. คลิกตกลง.

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

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

เมื่อต้องการตรวจสอบอายุการใช้งานของตัวแปรระดับโมดูล ดำเนินการดังต่อไปนี้:
  1. รหัสในโมดูลที่ประกอบด้วยการเปลี่ยนแปลงMacro1เมื่อต้องการต่อไปนี้:
    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.

    คุณได้รับข้อความต่อไปนี้::
    ค่าเริ่มของ x เป็น 0
  3. คลิกตกลง.

    คุณได้รับข้อความต่อไปนี้::
    x คือ 10
  4. คลิกตกลง.
  5. เรียกใช้Macro1.

    คุณได้รับข้อความต่อไปนี้::
    ค่าเริ่มของ x คือ 10
  6. คลิกตกลง.

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

การตั้งค่าใหม่เป็นโครงการการตั้งค่าตัวแปร

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

ถ้าคุณทำเช่นนี้สำหรับการMacro1โครงการและ rerun แล้วMacro1ค่า x ที่ตัวแปรถูกเตรียมใช้งานกลับเป็นศูนย์ และคุณได้รับข้อความแสดงข้อความแรก:
ค่าเริ่มของ x เป็น 0
สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
843145คำอธิบายของ Excel sub-procedures ใน Visual Basic สำหรับโปรแกรมประยุกต์ (อาร์เรย์)
กลับสู่ด้านบน

คุณสมบัติ

หมายเลขบทความ (Article ID): 843144 - รีวิวครั้งสุดท้าย: 20 กันยายน 2554 - Revision: 4.0
ใช้กับ
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
Keywords: 
kbvba kbprogramming kbinfo kbmt KB843144 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:843144

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com