ເນື້ອໃນ
ມີສະຖານະການໃນເວລາທີ່ໂຄງການ VBA ຈໍາເປັນຕ້ອງປະຕິບັດຊຸດດຽວກັນຫຼາຍຄັ້ງຕິດຕໍ່ກັນ (ນັ້ນແມ່ນ, ເຮັດຊ້ໍາລະຫັດດຽວກັນຫຼາຍຄັ້ງ). ນີ້ສາມາດເຮັດໄດ້ໂດຍໃຊ້ VBA loops.
VBA loops ປະກອບມີ:
ຕໍ່ໄປ, ພວກເຮົາຈະພິຈາລະນາຢ່າງລະອຽດໃນແຕ່ລະຮອບວຽນເຫຼົ່ານີ້.
ສໍາລັບ Loop Operator ໃນ Visual Basic
ໂຄງສ້າງຂອງຕົວປະຕິບັດການ loop ໄດ້ ໃນ Visual Basic ສາມາດຖືກຈັດຢູ່ໃນຫນຶ່ງໃນສອງຮູບແບບ: ເປັນ loop ສໍາລັບ… ຕໍ່ໄປ ຫຼືເປັນ loop ສໍາລັບແຕ່ລະຄົນ.
ວົງຈອນ "ສໍາລັບ ... ຕໍ່ໄປ"
Cycle ສໍາລັບ… ຕໍ່ໄປ ໃຊ້ຕົວແປທີ່ເອົາຄ່າຕາມລໍາດັບຈາກຂອບເຂດທີ່ໃຫ້. ດ້ວຍການປ່ຽນແປງແຕ່ລະມູນຄ່າຂອງຕົວແປ, ການກະທໍາທີ່ປິດລ້ອມຢູ່ໃນຮ່າງກາຍຂອງວົງຈອນແມ່ນປະຕິບັດ. ນີ້ແມ່ນງ່າຍທີ່ຈະເຂົ້າໃຈຈາກຕົວຢ່າງທີ່ງ່າຍດາຍ:
ສໍາລັບ i = 1 ເຖິງ 10 Total = Total + iArray(i) ຕໍ່ໄປ i
ໃນ loop ງ່າຍດາຍນີ້ ສໍາລັບ… ຕໍ່ໄປ ຕົວແປແມ່ນໃຊ້ i, ເຊິ່ງຕາມລໍາດັບເອົາຄ່າ 1, 2, 3, … 10, ແລະສໍາລັບແຕ່ລະຄ່າເຫຼົ່ານີ້, ລະຫັດ VBA ພາຍໃນ loop ຖືກປະຕິບັດ. ດັ່ງນັ້ນ, loop ນີ້ສະຫຼຸບອົງປະກອບຂອງ array. iArray ໃນຕົວແປ ທັງຫມົດ.
ໃນຕົວຢ່າງຂ້າງເທິງ, ການເພີ່ມ loop ບໍ່ໄດ້ຖືກລະບຸ, ດັ່ງນັ້ນການເພີ່ມຕົວແປ i ຈາກ 1 ຫາ 10, ຄ່າເລີ່ມຕົ້ນແມ່ນເພີ່ມຂຶ້ນ 1… ແນວໃດກໍ່ຕາມ, ໃນບາງກໍລະນີມັນຈໍາເປັນຕ້ອງໃຊ້ຄ່າເພີ່ມຂຶ້ນທີ່ແຕກຕ່າງກັນສໍາລັບ loop. ນີ້ສາມາດເຮັດໄດ້ໂດຍໃຊ້ຄໍາສໍາຄັນ ຂັ້ນຕອນດັ່ງທີ່ສະແດງຢູ່ໃນຕົວຢ່າງງ່າຍໆຕໍ່ໄປນີ້.
ສໍາລັບ d = 0 ເຖິງ 10 ຂັ້ນຕອນທີ 0.1 dTotal = dTotal + d ຕໍ່ໄປ d
ນັບຕັ້ງແຕ່ໃນຕົວຢ່າງຂ້າງເທິງ, ຂັ້ນຕອນເພີ່ມຂຶ້ນແມ່ນຖືກກໍານົດເທົ່າກັບ 0.1, ຫຼັງຈາກນັ້ນຕົວແປ dTotal ສໍາລັບການຄ້າງຫ້ອງຂອງແຕ່ລະຄົນໃຊ້ເວລາໃນຄ່າ 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.
ເພື່ອກໍານົດຂັ້ນຕອນ loop ໃນ VBA, ທ່ານສາມາດນໍາໃຊ້ຄ່າລົບ, ຕົວຢ່າງເຊັ່ນນີ້:
ສໍາລັບ i = 10 ເຖິງ 1 ຂັ້ນຕອນ -1 iArray(i) = i ຕໍ່ໄປ i
ນີ້ແມ່ນການເພີ່ມຂຶ້ນ -1, ດັ່ງນັ້ນຕົວແປ i ດ້ວຍການຊໍ້າຄືນຂອງແຕ່ລະຮອບວຽນໃຊ້ເວລາໃນຄ່າ 10, 9, 8, … 1.
Loop "ສໍາລັບແຕ່ລະຄົນ"
Cycle ສໍາລັບແຕ່ລະຄົນ ຄ້າຍຄືກັນກັບວົງຈອນ ສໍາລັບ… ຕໍ່ໄປ, ແຕ່ແທນທີ່ຈະ iterating ໃນໄລຍະລໍາດັບຂອງຄ່າສໍາລັບຕົວແປຕົວແປ, loop ສໍາລັບແຕ່ລະຄົນ ປະຕິບັດຊຸດຂອງການປະຕິບັດສໍາລັບແຕ່ລະວັດຖຸໃນກຸ່ມຂອງວັດຖຸທີ່ກໍານົດໄວ້. ໃນຕົວຢ່າງຕໍ່ໄປນີ້, ການນໍາໃຊ້ loop ສໍາລັບແຕ່ລະຄົນ enumerates ແຜ່ນທັງຫມົດໃນ Excel workbook ໃນປັດຈຸບັນ:
Dim wSheet ເປັນ Worksheet ສໍາລັບແຕ່ລະ wSheet ໃນ Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet
Loop interrupt ຖະແຫຼງການ "ອອກສໍາລັບ"
Operator ອອກຈາກສໍາລັບ ໃຊ້ເພື່ອຂັດຂວາງວົງຈອນ. ທັນທີທີ່ຄໍາຖະແຫຼງທີ່ພົບໃນລະຫັດ, ໂປລແກລມຈະສິ້ນສຸດການປະຕິບັດຂອງ loop ແລະດໍາເນີນການຕໍ່ການປະຕິບັດຄໍາຖະແຫຼງທີ່ຢູ່ໃນລະຫັດທັນທີຫຼັງຈາກ loop ນີ້. ນີ້ສາມາດຖືກນໍາໃຊ້, ສໍາລັບການຍົກຕົວຢ່າງ, ເພື່ອຊອກຫາຄ່າສະເພາະໃນ array. ເພື່ອເຮັດສິ່ງນີ້, ການນໍາໃຊ້ loop, ແຕ່ລະອົງປະກອບຂອງ array ໄດ້ຖືກສະແກນ. ທັນທີທີ່ອົງປະກອບທີ່ຕ້ອງການໄດ້ຖືກພົບເຫັນ, ບໍ່ຈໍາເປັນຕ້ອງເບິ່ງສ່ວນທີ່ເຫຼືອ - ວົງຈອນຖືກລົບກວນ.
ຄໍາຮ້ອງສະຫມັກປະຕິບັດການ ອອກຈາກສໍາລັບ ສະແດງໃຫ້ເຫັນໃນຕົວຢ່າງຕໍ່ໄປນີ້. ທີ່ນີ້ loop iterates ຫຼາຍກວ່າ 100 array entries ແລະປຽບທຽບແຕ່ລະຄ່າຂອງຕົວແປ. dVal… ຖ້າພົບການແຂ່ງຂັນແລ້ວ, ວົງການຈະຖືກລະງັບ:
ສໍາລັບ i = 1 ເຖິງ 100 ຖ້າ dValues(i) = dVal ຫຼັງຈາກນັ້ນ IndexVal = i ອອກຈາກທ້າຍຖ້າຕໍ່ໄປ i
Do while Loop ໃນ Visual Basic
Cycle ເຮັດໃນຂະນະທີ່ ດໍາເນີນການບລັອກຂອງລະຫັດຕາບໃດທີ່ເງື່ອນໄຂທີ່ລະບຸໄວ້ແມ່ນບັນລຸໄດ້. ຕໍ່ໄປນີ້ແມ່ນຕົວຢ່າງຂອງຂັ້ນຕອນການ Sub, ໃນການນໍາໃຊ້ loop ໄດ້ ເຮັດໃນຂະນະທີ່ ຕົວເລກ Fibonacci ບໍ່ເກີນ 1000 ແມ່ນສະແດງຕາມລໍາດັບ:
'ຂັ້ນຕອນຍ່ອຍໃຫ້ຕົວເລກ Fibonacci ບໍ່ເກີນ 1000 Sub Fibonacci() Dim i As Integer 'ຕົວນັບເພື່ອຊີ້ບອກຕຳແໜ່ງຂອງອົງປະກອບໃນລຳດັບ Dim iFib As Integer 'ເກັບຄ່າປັດຈຸບັນຂອງລຳດັບ Dim iFib_Next As Integer 'ເກັບຄ່າຕໍ່ໄປ. of the sequence Dim iStep As Integer 'stores size of next increment 'initialize variables i and iFib_Next i = 1 iFib_Next = 0 'Do while loop will execute until value of 'current Fibonacci number is greater than 1000 Do while iFib_1000 i if. 1 ຫຼັງຈາກນັ້ນ 'ກໍລະນີພິເສດສໍາລັບອົງປະກອບທໍາອິດ iStep = 1 iFib = 0 Else 'ບັນທຶກຂະຫນາດຂອງ increment ຕໍ່ໄປກ່ອນທີ່ຈະຂຽນທັບ 'ມູນຄ່າປັດຈຸບັນຂອງລໍາດັບ iStep = iFib iFib = iFib_Next End ຖ້າ 'ພິມຕົວເລກ Fibonacci ໃນປັດຈຸບັນຢູ່ໃນຖັນ A ຂອງ. ແຜ່ນວຽກທີ່ຫ້າວຫັນ 'ຢູ່ໃນແຖວທີ່ມີດັດຊະນີ i Cells(i , 1).Value = iFib 'ຄຳນວນຕົວເລກ Fibonacci ຕໍ່ໄປ ແລະເພີ່ມດັດຊະນີຕຳແໜ່ງອົງປະກອບໂດຍ 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub
ໃນຕົວຢ່າງທີ່ໃຫ້, ເງື່ອນໄຂ iFib_Next < 1000 ກວດສອບໃນຕອນຕົ້ນຂອງ loop ໄດ້. ເພາະສະນັ້ນ, ຖ້າຫາກວ່າມູນຄ່າທໍາອິດ iFib_Next ຖ້າຫາກວ່າມີຫຼາຍກ່ວາ 1000, ຫຼັງຈາກນັ້ນ loop ຈະບໍ່ໄດ້ຮັບການປະຕິບັດ.
ອີກວິທີຫນຶ່ງເພື່ອປະຕິບັດ loop ເຮັດໃນຂະນະທີ່ - ວາງເງື່ອນໄຂບໍ່ແມ່ນໃນຕອນເລີ່ມຕົ້ນ, ແຕ່ໃນຕອນທ້າຍຂອງ loop. ໃນກໍລະນີນີ້, loop ຈະຖືກປະຕິບັດຢ່າງຫນ້ອຍຫນຶ່ງຄັ້ງ, ບໍ່ວ່າຈະເປັນເງື່ອນໄຂ.
schematically, ວົງຈອນດັ່ງກ່າວ ເຮັດໃນຂະນະທີ່ ກັບເງື່ອນໄຂທີ່ຈະກວດສອບໃນຕອນທ້າຍຈະມີລັກສະນະນີ້:
ເຮັດ ... Loop ໃນຂະນະທີ່ iFib_Next < 1000
Цикл «ເຮັດຈົນກ່ວາ» ໃນ Visual Basic
Cycle ເຮັດຈົນກ່ວາ ຄ້າຍຄືກັນກັບວົງຈອນ ເຮັດໃນຂະນະທີ່: ຕັນຂອງລະຫັດຢູ່ໃນຮ່າງກາຍຂອງ loop ແມ່ນຖືກປະຕິບັດເລື້ອຍໆເລື້ອຍໆຈົນກ່ວາເງື່ອນໄຂທີ່ກໍານົດຈະບັນລຸໄດ້ (ຜົນຂອງການສະແດງອອກຕາມເງື່ອນໄຂແມ່ນ ທີ່ແທ້ຈິງ). ໃນຂັ້ນຕອນຕໍ່ໄປ Sub ການນໍາໃຊ້ວົງຈອນ ເຮັດຈົນກ່ວາ ດຶງເອົາຄ່າຈາກຈຸລັງທັງຫມົດໃນຖັນ A ແຜ່ນວຽກຈົນກ່ວາຖັນພົບກັບຕາລາງຫວ່າງເປົ່າ:
iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'ຄ່າຂອງເຊລປັດຈຸບັນຖືກເກັບໄວ້ໃນອາເຣ dCellValues dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop
ໃນຕົວຢ່າງຂ້າງເທິງ, ເງື່ອນໄຂ IsEmpty(Cells(iRow, 1)) ຕັ້ງຢູ່ໃນຕອນຕົ້ນຂອງໂຄງສ້າງ ເຮັດຈົນກ່ວາ, ດັ່ງນັ້ນ loop ຈະຖືກປະຕິບັດຢ່າງຫນ້ອຍຫນຶ່ງຄັ້ງຖ້າຕາລາງທໍາອິດທີ່ເອົາມາບໍ່ຫວ່າງເປົ່າ.
ຢ່າງໃດກໍຕາມ, ດັ່ງທີ່ສະແດງຢູ່ໃນຕົວຢ່າງ loop ເຮັດໃນຂະນະທີ່, ໃນບາງສະຖານະການມັນເປັນສິ່ງຈໍາເປັນທີ່ loop ຈະຖືກປະຕິບັດຢ່າງຫນ້ອຍຫນຶ່ງຄັ້ງ, ໂດຍບໍ່ຄໍານຶງເຖິງຜົນໄດ້ຮັບເບື້ອງຕົ້ນຂອງການສະແດງອອກຕາມເງື່ອນໄຂ. ໃນກໍລະນີນີ້, ການສະແດງອອກເງື່ອນໄຂຄວນຈະໄດ້ຮັບການວາງໄວ້ໃນຕອນທ້າຍຂອງ loop, ເຊັ່ນນີ້:
ເຮັດ ... Loop ຈົນກ່ວາ IsEmpty(Cells(iRow, 1))