ເນື້ອໃນ

# ການນຳໃຊ້ຕົວແປ

ຕໍ່ໄປນີ້ແມ່ນການອະທິບາຍກ່ຽວກັບການນຳໃຊ້ຕົວແປພື້ນຖານໃນ LibreOfficeDev Basic.

## ກົດເກນການຕັ້ງຊື່ສຳລັບຕົວລະບຸຕົວແປ

ຊື່ຕົວແປສາມາດຍາວໄດ້ສູງສຸດ 255 ຕົວອັກສອນ. ຕົວອັກສອນທຳອິດຂອງຊື່ຕົວແປ ຕ້ອງ ເປັນຕົວອັກສອນ A-Z ຫຼື a-z. ຕົວເລກສາມາດໃຊ້ໃນຊື່ຕົວແປໄດ້, ແຕ່ເຄື່ອງໝາຍວັກຕອນ ແລະ ຕົວອັກສອນພິເສດແມ່ນບໍ່ອະນຸຍາດໃຫ້ໃຊ້, ຍົກເວັ້ນເຄື່ອງໝາຍຂີດກ້ອງ ("_"). ໃນ LibreOfficeDev Basic ຕົວລະບຸຕົວແປຈະບໍ່ແຍກຕົວພິມໃຫຍ່-ນ້ອຍ (not case-sensitive). ຊື່ຕົວແປອາດຈະມີຊ່ອງວ່າງໄດ້ ແຕ່ຕ້ອງໃສ່ໃນວົງເລັບຫຼ່ຽມ [ ] ຖ້າມີຊ່ອງວ່າງ.

ຕົວຢ່າງສຳລັບຕົວລະບຸຕົວແປ:

        MyNumber=5      'ຖືກຕ້ອງ'
        MyNumber5=15    'ຖືກຕ້ອງ'
        MyNumber_5=20   'ຖືກຕ້ອງ'
        My Number=20    'ບໍ່ຖືກຕ້ອງ, ຕົວແປທີ່ມີຊ່ອງວ່າງຕ້ອງຢູ່ໃນວົງເລັບຫຼ່ຽມ'
        [My Number]=12  'ຖືກຕ້ອງ'
        DéjàVu=25       'ບໍ່ຖືກຕ້ອງ, ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຕົວອັກສອນພິເສດ'
        5MyNumber=12    'ບໍ່ຖືກຕ້ອງ, ຕົວແປຫ້າມຂຶ້ນຕົ້ນດ້ວຍຕົວເລກ'
        Number,Mine=12  'ບໍ່ຖືກຕ້ອງ, ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ເຄື່ອງໝາຍວັກຕອນ'

## ການປະກາດຕົວແປ

ໃນ LibreOfficeDev Basic ທ່ານບໍ່ຈຳເປັນຕ້ອງປະກາດຕົວແປຢ່າງຊັດເຈນສະເໝີໄປ. ການປະກາດຕົວແປສາມາດເຮັດໄດ້ດ້ວຍຄຳສັ່ງ Dim. ທ່ານສາມາດປະກາດຫຼາຍກວ່າໜຶ່ງຕົວແປພ້ອມກັນໄດ້ໂດຍການແຍກຊື່ດ້ວຍເຄື່ອງໝາຍຈຸດ. ເພື່ອກຳນົດປະເພດຂອງຕົວແປ, ໃຫ້ໃຊ້ເຄື່ອງໝາຍລະບຸປະເພດຫຼັງຊື່ ຫຼື ໃຊ້ຄຳສຳຄັນທີ່ເໝາະສົມ.

ຕົວຢ່າງສຳລັບການປະກາດຕົວແປ:

        Dim a$               'ປະກາດຕົວແປ "a" ເປັນຂໍ້ຄວາມ (String)'
        Dim a As String      'ປະກາດຕົວແປ "a" ເປັນຂໍ້ຄວາມ (String)'
        Dim a$, b As Integer 'ປະກາດຕົວແປໜຶ່ງເປັນ String ແລະ ອີກຕົວໜຶ່ງເປັນ Integer'
        Dim c As Boolean     'ປະກາດ c ເປັນຕົວແປບູລີນ (Boolean) ເຊິ່ງມີຄ່າເປັນ TRUE ຫຼື FALSE'

ເມື່ອທ່ານປະກາດຕົວແປເປັນປະເພດໃດໜຶ່ງແລ້ວ, ທ່ານບໍ່ສາມາດປະກາດຕົວແປທີ່ມີຊື່ດຽວກັນນັ້ນໃຫ້ເປັນປະເພດອື່ນໄດ້ອີກ!

ເມື່ອທ່ານປະກາດຕົວແປຫຼາຍຕົວໃນແຖວລະຫັດດຽວກັນ, ທ່ານຈຳເປັນຕ້ອງລະບຸປະເພດຂອງແຕ່ລະຕົວແປ. ຖ້າປະເພດຂອງຕົວແປບໍ່ໄດ້ຖືກລະບຸຢ່າງຊັດເຈນ, Basic ຈະຖືວ່າຕົວແປນັ້ນເປັນປະເພດ Variant.

      ' ທັງຕົວແປ "a" ແລະ "b" ເປັນປະເພດ Integer
      Dim a As Integer, b As Integer
      ' ຕົວແປ "c" ເປັນ Variant ແລະ "d" ເປັນ Integer
      Dim c, d As Integer
      ' ຕົວແປສາມາດປະກາດເປັນ Variant ໄດ້ຢ່າງຊັດເຈນຄືກັນ
      Dim e As Variant, f As Double

ປະເພດ Variant ແມ່ນປະເພດຂໍ້ມູນພິເສດທີ່ສາມາດເກັບຄ່າໃດໆກໍໄດ້. ເພື່ອຮຽນຮູ້ເພີ່ມເຕີມ, ໃຫ້ເບິ່ງທີ່ສ່ວນ ປະເພດ Variant ດ້ານລຸ່ມ.

### ການບັງຄັບໃຫ້ປະກາດຕົວແປ

ເພື່ອບັງຄັບໃຫ້ມີການປະກາດຕົວແປ, ໃຫ້ໃຊ້ຄຳສັ່ງຕໍ່ໄປນີ້:

    Option Explicit

ຄຳສັ່ງ Option Explicit ຕ້ອງເປັນແຖວທຳອິດໃນໂມດູນ, ກ່ອນ SUB ທຳອິດ. ໂດຍທົ່ວໄປແລ້ວ, ມີພຽງແຕ່ອາເຣ (arrays) ເທົ່ານັ້ນທີ່ຕ້ອງປະກາດຢ່າງຊັດເຈນ. ຕົວແປອື່ນໆທັງໝົດຈະຖືກປະກາດຕາມຕົວອັກສອນລະບຸປະເພດ, ຫຼື ຖ້າລະເວັ້ນໄວ້ ຈະຖືວ່າເປັນປະເພດ Single ໂດຍມາດຕະຖານ.

## ປະເພດຂອງຕົວແປ

LibreOfficeDev Basic ສະໜັບສະໜູນຕົວແປ 4 ກຸ່ມໃຫຍ່:

- ຕົວແປ Numeric (ຕົວເລກ) ສາມາດເກັບຄ່າຕົວເລກໄດ້. ບາງຕົວແປໃຊ້ເພື່ອເກັບຕົວເລກທີ່ມີຄ່າຫຼາຍ ຫຼື ໜ້ອຍ, ແລະ ບາງຕົວແປໃຊ້ສຳລັບເລກທົດສະນິຍົມ ຫຼື ເລກເສດສ່ວນ.

- ຕົວແປ String (ຂໍ້ຄວາມ) ປະກອບດ້ວຍຊຸດຂອງຕົວອັກສອນ.

- ຕົວແປ Boolean (ບູລີນ) ເກັບຄ່າ TRUE (ຈິງ) ຫຼື FALSE (ເທັດ).

- ຕົວແປ Object (ອັອບເຈັກ) ສາມາດເກັບອັອບເຈັກປະເພດຕ່າງໆ ເຊັ່ນ ຕາຕະລາງ ແລະ ເອກະສານພາຍໃນເອກະສານ.

### ຕົວແປເລກຖ້ວນ (Integer)

ຕົວແປເລກຖ້ວນ (Integer) ມີຂອບເຂດຕັ້ງແຕ່ -32768 ຫາ 32767. ຖ້າທ່ານກຳນົດຄ່າເລກທົດສະນິຍົມໃຫ້ກັບຕົວແປເລກຖ້ວນ, ຕຳແໜ່ງທົດສະນິຍົມຈະຖືກປັດເປັນເລກຖ້ວນທີ່ໃກ້ຄຽງທີ່ສຸດ. ຕົວແປເລກຖ້ວນຈະຖືກຄຳນວນຢ່າງວ່ອງໄວໃນໂປຣຊີເຈີ ແລະ ເໝາະສົມສຳລັບໃຊ້ເປັນຕົວແປນັບໃນຮອບວຽນ (loops). ຕົວແປເລກຖ້ວນໃຊ້ໜ່ວຍຄວາມຈຳພຽງແຕ່ 2 ໄບທ໌. "%" ແມ່ນຕົວອັກສອນລະບຸປະເພດ.

    Dim Variable%
    Dim Variable As Integer

### ຕົວແປເລກຖ້ວນຍາວ (Long Integer)

ຕົວແປເລກຖ້ວນຍາວ (Long integer) ມີຂອບເຂດຕັ້ງແຕ່ -2147483648 ຫາ 2147483647. ຖ້າທ່ານກຳນົດຄ່າເລກທົດສະນິຍົມໃຫ້ກັບຕົວແປເລກຖ້ວນຍາວ, ຕຳແໜ່ງທົດສະນິຍົມຈະຖືກປັດເປັນເລກຖ້ວນທີ່ໃກ້ຄຽງທີ່ສຸດ. ຕົວແປເລກຖ້ວນຍາວຈະຖືກຄຳນວນຢ່າງວ່ອງໄວ ແລະ ເໝາະສົມສຳລັບຕົວແປນັບໃນຮອບວຽນທີ່ມີຄ່າສູງ. ຕົວແປເລກຖ້ວນຍາວໃຊ້ໜ່ວຍຄວາມຈຳ 4 ໄບທ໌. "&" ແມ່ນຕົວອັກສອນລະບຸປະເພດ.

    Dim Variable&
    Dim Variable As Long

### ຕົວແປທົດສະນິຍົມ (Decimal)

ຕົວແປ Decimal ສາມາດຮັບຄ່າຕົວເລກບວກ, ລົບ ຫຼື ສູນ. ມີຄວາມແມ່ນຍຳສູງສຸດເຖິງ 29 ຕົວເລກ.

ທ່ານສາມາດໃຊ້ເຄື່ອງໝາຍບວກ (+) ຫຼື ລົບ (-) ເປັນເຄື່ອງໝາຍນຳໜ້າຕົວເລກທົດສະນິຍົມ (ຈະມີ ຫຼື ບໍ່ມີຊ່ອງວ່າງກໍໄດ້).

ຖ້າຕົວເລກທົດສະນິຍົມຖືກກຳນົດໃຫ້ກັບຕົວແປເລກຖ້ວນ, LibreOfficeDev Basic ຈະປັດຕົວເລກຂຶ້ນ ຫຼື ລົງ.

### ຕົວແປ Single

ຕົວແປ Single ສາມາດຮັບຄ່າບວກ ຫຼື ລົບຕັ້ງແຕ່ 3.402823 x 10E38 ຫາ 1.401298 x 10E-45. ຕົວແປ Single ແມ່ນຕົວແປເລກທົດສະນິຍົມແບບລອຍ (floating-point) ເຊິ່ງຄວາມລະອຽດຂອງທົດສະນິຍົມຈະຫຼຸດລົງເມື່ອຄ່າຂອງຕົວເລກສູງຂຶ້ນ. ເໝາະສຳລັບການຄຳນວນທາງຄະນິດສາດທີ່ມີຄວາມລະອຽດປານກາງ. ການຄຳນວນຈະໃຊ້ເວລາຫຼາຍກວ່າຕົວແປ Integer ແຕ່ໄວກວ່າຕົວແປ Double. ຕົວແປ Single ໃຊ້ໜ່ວຍຄວາມຈຳ 4 ໄບທ໌. ຕົວອັກສອນລະບຸປະເພດແມ່ນ "!".

    Dim Variable!
    Dim Variable As Single

### ຕົວແປ Double

ຕົວແປ Double ສາມາດຮັບຄ່າບວກ ຫຼື ລົບຕັ້ງແຕ່ 1.79769313486232 x 10E308 ຫາ 4.94065645841247 x 10E-324. ຕົວແປ Double ແມ່ນຕົວແປເລກທົດສະນິຍົມແບບລອຍທີ່ມີຄວາມລະອຽດສູງ. ເໝາະສຳລັບການຄຳນວນທີ່ຕ້ອງການຄວາມແມ່ນຍຳສູງ. ການຄຳນວນຈະໃຊ້ເວລາຫຼາຍກວ່າຕົວແປ Single. ຕົວແປ Double ໃຊ້ໜ່ວຍຄວາມຈຳ 8 ໄບທ໌. ຕົວອັກສອນລະບຸປະເພດແມ່ນ "#".

    Dim Variable#
    Dim Variable As Double

### ຕົວແປສະກຸນເງິນ (Currency)

ຕົວແປ Currency ຈະຖືກເກັບເປັນຕົວເລກ 64 ບິດ (8 ໄບທ໌) ແລະ ສະແດງເປັນເລກທົດສະນິຍົມຄົງທີ່ ເຊິ່ງມີເລກຖ້ວນ 15 ຫຼັກ ແລະ ທົດສະນິຍົມ 4 ຫຼັກ. ຂອບເຂດຄ່າຕັ້ງແຕ່ -922337203685477.5808 ຫາ +922337203685477.5807. ຕົວແປນີ້ໃຊ້ເພື່ອຄຳນວນຄ່າສະກຸນເງິນດ້ວຍຄວາມແມ່ນຍຳສູງ. ຕົວອັກສອນລະບຸປະເພດແມ່ນ "@".

    Dim Variable@
    Dim Variable As Currency

### ລິເທີຣັລສຳລັບເລກຖ້ວນ

ຕົວເລກສາມາດເຂົ້າລະຫັດໂດຍໃຊ້ຮູບແບບເລກຖານແປດ (octal) ແລະ ເລກຖານສິບຫົກ (hexadecimal).

      xi = &o13 '    8 + 3
      ci = &h65 ' 6*16 + 5
      MAX_Integer =  &o77777 '  32767 = &h7FFF
      MIN_Integer = &o100000 ' -32768 = &h8000
      MAX_Long = &h7fffffff '  2147483647 = &o17777777777
      MIN_Long = &h80000000 ' -2147483648 = &o20000000000

### ຕົວແປຂໍ້ຄວາມ (String)

ຕົວແປ String ສາມາດເກັບຂໍ້ຄວາມໄດ້ສູງສຸດ 2,147,483,648 ຕົວອັກສອນ. ແຕ່ລະຕົວອັກສອນຈະຖືກເກັບເປັນຄ່າ Unicode. ຕົວແປ String ເໝາະສຳລັບການປະມວນຜົນຄຳສັບໃນໂປຣແກຣມ ແລະ ສຳລັບເກັບຂໍ້ມູນຊົ່ວຄາວຂອງຕົວອັກສອນທີ່ບໍ່ສາມາດພິມອອກໄດ້ ທີ່ມີຄວາມຍາວສູງສຸດ 2 GB. ໜ່ວຍຄວາມຈຳທີ່ຕ້ອງການແມ່ນຂຶ້ນກັບຈຳນວນຕົວອັກສອນໃນຕົວແປ. ຕົວອັກສອນລະບຸປະເພດແມ່ນ "$".

ໃນຟັງຊັນ String ຂອງ BASIC, ຕົວອັກສອນທຳອິດຂອງຂໍ້ຄວາມຈະມີອິນເດັກແມ່ນ 1.

    Dim Variable$
    Dim Variable As String

### ຕົວແປບູລີນ (Boolean)

ຕົວແປ Boolean ຈະເກັບພຽງຄ່າໃດໜຶ່ງໃນສອງຄ່ານີ້: TRUE (ຈິງ) ຫຼື FALSE (ເທັດ). ຕົວເລກ 0 ຈະໝາຍເຖິງ FALSE, ສ່ວນຄ່າອື່ນໆທັງໝົດຈະໝາຍເຖິງ TRUE.

    Dim Variable As Boolean

### ຕົວແປວັນທີ (Date)

ຕົວແປ Date ສາມາດເກັບໄດ້ພຽງແຕ່ວັນທີ ແລະ ເວລາໃນຮູບແບບພາຍໃນ. ຄ່າທີ່ກຳນົດໃຫ້ຕົວແປ Date ດ້ວຍ Dateserial, Datevalue, Timeserial ຫຼື Timevalue ຈະຖືກປ່ຽນເປັນຮູບແບບພາຍໃນໂດຍອັດຕະໂນມັດ. ຕົວແປວັນທີສາມາດປ່ຽນເປັນຕົວເລກປົກກະຕິໄດ້ໂດຍໃຊ້ຟັງຊັນ Day, Month, Year ຫຼື Hour, Minute, Second. ຮູບແບບພາຍໃນຊ່ວຍໃຫ້ສາມາດປຽບທຽບຄ່າວັນທີ/ເວລາ ໂດຍການຄຳນວນຫາສ່ວນຕ່າງລະຫວ່າງສອງຕົວເລກ. ຕົວແປເຫຼົ່ານີ້ຕ້ອງປະກາດດ້ວຍຄຳສຳຄັນ Date ເທົ່ານັ້ນ.

    Dim Variable As Date

### ລິເທີຣັລສຳລັບວັນທີ

ລິເທີຣັລວັນທີຊ່ວຍໃຫ້ກຳນົດຕົວແປວັນທີໄດ້ຢ່າງຊັດເຈນ ໂດຍບໍ່ຂຶ້ນກັບພາສາທີ່ໃຊ້ຢູ່. ລິເທີຣັລຈະຖືກລ້ອມຮອບດ້ວຍເຄື່ອງໝາຍ hash #. ຮູບແບບທີ່ເປັນໄປໄດ້ແມ່ນ:

- #yyyy-mm-dd#

- #mm/dd/yyyy#

      start_date = #1899-12-30# ' = 0
      dob = #2010-09-28#

## ປະເພດ Variant

ຕົວແປທີ່ປະກາດເປັນ Variant ສາມາດຈັດການກັບປະເພດຂໍ້ມູນໃດໆກໍໄດ້. ນີ້ໝາຍຄວາມວ່າປະເພດຂໍ້ມູນທີ່ແທ້ຈິງຈະຖືກກຳນົດໃນລະຫວ່າງການລັນໂປຣແກຣມ (runtime) ເມື່ອມີການກຳນົດຄ່າໃຫ້ກັບຕົວແປ.

ມີ 3 ວິທີຫຼັກໃນການສ້າງຕົວແປ Variant ດັ່ງທີ່ສະແດງລຸ່ມນີ້:

      Dim varA            ' ບໍ່ໄດ້ລະບຸປະເພດ, ດັ່ງນັ້ນຕົວແປຈຶ່ງເປັນ Variant
      Dim varB as Variant ' ຕົວແປຖືກປະກາດເປັນ Variant ຢ່າງຊັດເຈນ
      varC = "abc"        ' ຕົວແປທີ່ບໍ່ໄດ້ປະກາດມາກ່ອນຈະຖືກປະຕິບັດເປັນ Variant

ຕົວຢ່າງລຸ່ມນີ້ໃຊ້ ຟັງຊັນ TypeName ເພື່ອສະແດງໃຫ້ເຫັນວ່າປະເພດຂອງຕົວແປ Variant ປ່ຽນແປງໄປແນວໃດເມື່ອມີການກຳນົດຄ່າ.

      Dim myVar As Variant
      MsgBox TypeName(myVar) ' Empty
      myVar = "Hello!"
      MsgBox TypeName(myVar) ' String
      myVar = 10
      MsgBox TypeName(myVar) ' Integer

ຕົວແປ Variant ຈະຖືກເລີ່ມຕົ້ນດ້ວຍປະເພດຂໍ້ມູນພິເສດ Empty. ທ່ານສາມາດໃຊ້ ຟັງຊັນ IsEmpty ເພື່ອທົດສອບວ່າຕົວແປນັ້ນເປັນ Empty Variant ຫຼື ບໍ່.

ທ່ານຍັງສາມາດໃຊ້ຄຳສຳຄັນ Any ເພື່ອປະກາດຕົວແປເປັນ Variant ໄດ້. ເຖິງຢ່າງໃດກໍຕາມ, Any ແມ່ນຖືກຍົກເລີກການນຳໃຊ້ (deprecated) ແລະ ມີໄວ້ເພື່ອຮອງຮັບລຸ້ນເກົ່າເທົ່ານັ້ນ.

ອາກິວເມັນປະເພດ Variant ຫຼື Any ທີ່ຖືກສົ່ງເຂົ້າໃນການເອີ້ນໃຊ້ຟັງຊັນ ຈະບໍ່ຖືກກວດສອບປະເພດຂໍ້ມູນຂອງມັນ.

      Dim myVar As Any ' ຕົວແປ "myVar" ເປັນ Variant

## ຄ່າເລີ່ມຕົ້ນຂອງຕົວແປ

ທັນທີທີ່ຕົວແປຖືກປະກາດ, ມັນຈະຖືກຕັ້ງເປັນຄ່າ "Null" ໂດຍອັດຕະໂນມັດ. ໃຫ້ສັງເກດຂໍ້ກຳນົດດັ່ງນີ້:

ຕົວແປ Numeric (ຕົວເລກ) ຈະຖືກກຳນົດຄ່າເປັນ "0" ໂດຍອັດຕະໂນມັດທັນທີທີ່ພວກມັນຖືກປະກາດ.

ຕົວແປວັນທີ (Date variables) ຈະຖືກກຳນົດຄ່າເປັນ 0 ພາຍໃນ; ເຊິ່ງທຽບເທົ່າກັບການປ່ຽນຄ່າເປັນ "0" ດ້ວຍຟັງຊັນ Day, Month, Year ຫຼື Hour, Minute, Second.

ຕົວແປຂໍ້ຄວາມ (String variables) ຈະຖືກກຳນົດເປັນຂໍ້ຄວາມຫວ່າງ ("") ເມື່ອພວກມັນຖືກປະກາດ.

## ອາເຣ (Arrays)

LibreOfficeDev Basic ຮອງຮັບອາເຣແບບມິຕິດຽວ ຫຼື ຫຼາຍມິຕິ, ເຊິ່ງຖືກກຳນົດໂດຍປະເພດຕົວແປທີ່ລະບຸ. ອາເຣເໝາະສຳລັບການແກ້ໄຂລາຍການ ແລະ ຕາຕະລາງໃນໂປຣແກຣມ. ແຕ່ລະອົງປະກອບຂອງອາເຣສາມາດອ້າງອີງໄດ້ຜ່ານຕົວເລກອິນເດັກ (index).

ອາເຣ ຕ້ອງ ຖືກປະກາດດ້ວຍຄຳສັ່ງ Dim. ມີຫຼາຍວິທີໃນການກຳນົດຂອບເຂດອິນເດັກຂອງອາເຣ:

        Dim Text$(20)       '21 ອົງປະກອບ ເລີ່ມນັບແຕ່ 0 ຫາ 20'
        Dim Text$(5,4)      '30 ອົງປະກອບ (ມາຕຣິກຂະໜາດ 6 x 5)'
        Dim Text$(5 To 25)  '21 ອົງປະກອບ ເລີ່ມນັບແຕ່ 5 ຫາ 25'
        Dim Text$(-15 To 5) '21 ອົງປະກອບ (ລວມທັງ 0), ເລີ່ມນັບແຕ່ -15 ຫາ 5'

ຂອບເຂດຂອງອິນເດັກສາມາດລວມໄດ້ທັງຕົວເລກບວກ ແລະ ຕົວເລກລົບ.

## ຄ່າຄົງທີ່ (Constants)

ຄ່າຄົງທີ່ແມ່ນຄ່າທີ່ຕາຍຕົວ. ພວກມັນຈະຖືກນິຍາມພຽງຄັ້ງດຽວໃນໂປຣແກຣມ ແລະ ບໍ່ສາມາດປ່ຽນແປງໄດ້ໃນພາຍຫຼັງ:

    Const ConstName=Expression

ຫົວຂໍ້ທີ່ກ່ຽວຂ້ອງ

ຄ່າຄົງທີ່ Basic

ຄຳສັ່ງ Dim

ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!