ขอบเขตของตัวแปรใน Visual Basic สำหรับโปรแกรมประยุกต์

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

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

สรุป

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

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

ขอบเขตของกระบวนการ (ภายใน)

มีรู้จักตัวแปรเฉพาะกับขอบเขตของขั้นตอนภายในกระบวนการนั้นถูกประกาศเท่านั้น ตัวแปรภายในสามารถถูกประกาศกับมิติหรือคงงบ
Dim
				
เมื่อมีประกาศตัวแปรเฉพาะกับคำสั่งขนาด ตัวแปรอยู่ในที่มีอยู่เท่านั้นตราบเรียกใช้กระบวนการนั้นถูกประกาศ โดยทั่วไป เมื่อกระบวนการนี้เสร็จสิ้นแล้วรัน ค่าของตัวแปรภายในของกระบวนการไม่ถูกรักษาไว้ และนำออกใช้หน่วยความจำปันส่วนไปยังตัวแปรเหล่านั้น ในครั้งถัดไปที่กระบวนการจะดำเนินการ ทั้งหมดของตัวแปรของเครื่องเป็น reinitialized

ตัวอย่างเช่น ในแมต่อไปนี้อย่างโค "Example1" และ "Example2," X ที่ตัวแปรถูกประกาศในแต่ละโมดูลที่การ X แต่ละตัวแปรจะขึ้นอยู่กับอีก--เท่านั้นมีรู้จักตัวแปรภายในของขั้นตอนที่เกี่ยวข้อง
   Sub Example1()
      Dim X As Integer
      ' Local variable, not the same as X in Example2.
      X = 100
      MsgBox "The value of X is " & X
   End Sub
				
   Sub Example2()
      Dim X As String
      ' Local variable, not the same as X in Example1.
      X = "Yes"
      MsgBox "The answer is " &X
   End Sub
				
คง:

ตัวแปรเฉพาะที่ประกาศ ด้วยใบแจ้งยอดคงเหลืออยู่ในเวลาทั้งหมดใน Visual Basic กำลังเรียกใช้การมีอยู่ ตัวแปรจะตั้งค่าใหม่เมื่อใดอย่างหนึ่งต่อไปนี้เกิดขึ้น:
  • แมโครสร้างข้อผิดพลาดขณะเรียกใช้ untrapped
  • visual Basic ถูกยกเลิก
  • คุณออกจาก Microsoft Excel
  • คุณเปลี่ยนแปลงในโมดูล
ตัวอย่างเช่น ในตัวอย่าง RunningTotal ตัวแปร Accumulate retains ค่าของทุกครั้งที่มีดำเนินงาน ในครั้งแรกในโมดูลรัน ถ้าคุณป้อนหมายเลข2กล่องข้อความจะแสดงค่า "2" ในครั้งถัดไปที่มีการเรียกใช้โมดูล ถ้ามีป้อนค่า 3 กล่องข้อความจะแสดงค่าทั้งหมดที่ทำงานเป็น 5
   Sub RunningTotal()
      Static Accumulate
      ' Local variable that will retain its value after the module
      ' has finished executing.
      num = Application.InputBox(prompt:="Enter a number: ", Type:=1)
      Accumulate = Accumulate + num
      MsgBox "The running total is " & Accumulate
   End Sub
				

ขอบเขตของโมดูล

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

ที่ระดับโมดูล ไม่มีความแตกต่างระหว่างมิติและส่วนตัว โปรดสังเกตว่า ตัวแปรระดับโมดูลไม่สามารถประกาศภายในกระบวนการ

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

ในตัวอย่างต่อไปนี้ ตัวสองแปร A และ B กำลังประกาศที่ระดับโมดูล ตัวแปรสองเหล่านี้พร้อมใช้งานใด ๆ ของขั้นตอนการดำเนินการบนแผ่นงานโมดูล ตัวแปรสาม C ซึ่งถูกประกาศในแมโคร Example3 เป็นตัวแปรภายในเครื่อง และใช้ได้เฉพาะกับกระบวนการนั้น

โปรดสังเกตว่า ใน Example4 เมื่อแมโครพยายามที่จะใช้ C ตัวแปร กล่องข้อความว่างเปล่า กล่องข้อความว่างเปล่าได้เนื่องจากเป็นตัวแปรภายใน และไม่พร้อมใช้ Example4 ในขณะที่ตัวแปร A และ B คือ C
   Dim A As Integer        ' Module-level variable.
   Private B As Integer    ' Module-level variable.

   Sub Example1()
       A = 100
       B = A + 1
   End Sub

   Sub Example2()
       MsgBox "The value of A is " & A
       MsgBox "The value of B is " & B
   End Sub

   Sub Example3()
        Dim C As Integer    ' Local variable.
        C = A + B
        MsgBox "The value of C is " & C
   End Sub

   Sub Example4()
        MsgBox A
        ' The message box displays the value of A.
        MsgBox B
        ' The message box displays the value of B.
        MsgBox C
        ' The message box displays nothing because C was a local variable.
   End Sub
				

ขอบเขตสาธารณะ

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

เป็นไปได้สำหรับแผ่นงานโมดูลหลายที่มีตัวแปรสาธารณะ มีชื่อเดียวกัน To avoid confusion and possible errors, it is a good idea to use unique names or to precede each variable name with a module qualifier (for example, in a module named "Feb_Sales" you may want to precede all public variables with the letters "FS").

To create the macros, follow these steps:
  1. Create a new workbook and name itCDSales.xls.

    หมายเหตุ:In Excel 2007, save the file as an Excel Macro-Enabled Workbook. The file name will be CDSales.xlsm.
  2. In the CDSales workbook, insert a module sheet. Name the module sheet CDSales.

    In Microsoft Excel 97 and in later versions of Excel, follow these steps to insert a new module sheet and to name the module sheet:
    1. In the CDSales workbook, press ALT+F11 to open the visual Basic Editor.
    2. ในการแทรกเมนู คลิกโมดูล.
    3. In Microsoft Excel for Windows (version 97 and later), you can rename a module by activating the module, clicking to the right of "(Name)" in theคุณสมบัติwindow of the Visual Basic Editor, type a new module name, and then press ENTER.
  3. In the CDSales module sheet, type the following code:
          Public SalesPrice As Integer
          Public UnitsSold As Integer
          Public CostPerUnit As Integer
          Private Markup As Long
    
          Sub CDSales()
             Dim X as String
             SalesPrice = 12
             UnitsSold = 1000
             CostPerUnit = 5
             Markup = 1.05
             X = "yes"
             MsgBox "The Gross Profit for CD Sales is $" & (SalesPrice _
                * UnitsSold) -(UnitsSold * CostPerUnit * Markup)
             ' Displays the value of 7000 as the gross profit.
          End Sub
    						
  4. Create a new workbook and name itVideoSales.xls.

    หมายเหตุ:In Excel 2007, save the file as an Excel Macro-Enabled Workbook. The file name will be VideoSales.xlsm.
  5. ในการVideoSalesworkbook, insert a module sheet. Name the module sheetVideoSales.

    In Microsoft Excel 97 or later follow these steps to insert a new module sheet and name the module sheet:
    1. In the CDSales workbook, press ALT+F11 to open the Visual Basic Editor.
    2. ในการแทรกเมนู คลิกโมดูล.
    3. In Microsoft Excel for Windows (version 97 and later), you can rename a module by activating the module, clicking to the right of "(Name)" in theคุณสมบัติwindow of the Visual Basic Editor, type a new module name, and then press ENTER.
  6. ในการVideoSalesmodule sheet, type the following code:
          Public SalesPrice As Integer
          Public UnitsSold As Integer
          Public CostPerUnit As Integer
    
          Sub VideoSales()
             SalesPrice = CDSales.SalesPrice * 1.05
             UnitsSold = CDSales.UnitsSold * 1.456
             CostPerUnit = CDSales.CostPerUnit * 1.75
             MsgBox "The Projected Gross Profit for video sales is $" & _
                (SalesPrice * UnitsSold) - (UnitsSold * CostPerUnit)
             ' Displays the value of 5824 as the projected gross profit.
          End Sub
    						

Run the sample macros in Microsoft Excel 97 and in later versions of Excel

  1. Rename the project name of the two workbooks so that they are unique by following these steps:
    1. In the Project Explorer pane in the Visual Basic Editor, look at the projects that are listed. You should see entries similar to the following:
      <vbaproject>(VideoSales.xls)</vbaproject>
      <vbaproject>(CDSales.xls)</vbaproject>
      <vbaproject>(Personal.xls)</vbaproject>
      where <vbaproject> is the name of the project.</vbaproject>
    2. Click the entry for CDSales.xls. In Excel 2007, click the entry for CDSales.xlsm.
    3. ในการคุณสมบัติpane, in the box to the right of "(Name)", type a new, unique project name, and then pressEnter.

      หมายเหตุ:Do not use a project name that you use in any other workbook.
    4. ในการแฟ้ม:เมนู คลิกบันทึก<bookname></bookname>, where <bookname> is the name of the workbook you modified.</bookname>
  2. To create a reference from the workbook VideoSales to CDSales, select theVideoSalesmodule sheet in VideoSales, and then clickReferencesในการเครื่องมือเมนู
  3. ในการReferencesdialog box, select the check box of the project name specified in step 1c, and then clickตกลง.
  4. Run the CDSales macro and then run the VideoSales macro.
Note that the VideoSales macro uses the public variables declared in the CDSales module of CDSales.xls.

Example of macro failure when you try to access local variable

The following example tries to use the module-level variable, CDSales.Markup or the local variable CDSales.X in the VideoSales module sheet:
   Sub VideoSales2()
       MsgBox CDSales.Markup
   End Sub
   Sub VideoSales3()
       MsgBox CDSales.X
   End Sub
				
In Microsoft Excel 97 or in later versions of Excel, the following error message appears when you run either of these procedures:
Compile error:
Method or data member not found

ข้อมูลอ้างอิง

For more information about scope, click the Index tab in Microsoft Excel 7.0 Help, typescope, and then double-click the selected text to go to the "Understanding scope" topic.

คุณสมบัติ

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

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

 

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