ສາລະບານ
ໃນບົດຄວາມນີ້, ພວກເຮົາຈະພິຈາລະນາບັນຫາທີ່ທ່ານອາດຈະປະເຊີນໃນເວລາທີ່ໃຊ້ຟັງຊັນທີ່ກໍາຫນົດເອງໃນປຶ້ມວຽກຂອງທ່ານ. ຂ້າພະເຈົ້າຈະພະຍາຍາມສະແດງໃຫ້ທ່ານເຫັນສິ່ງທີ່ເປັນເຫດໃຫ້ເຂົາເຈົ້າແລະວິທີທີ່ພວກເຂົາເຈົ້າສາມາດແກ້ໄຂໄດ້ຢ່າງງ່າຍດາຍ. ຫນ້າທີ່ກໍາຫນົດເອງແມ່ນ, ວິທີການສ້າງແລະນໍາໃຊ້ມັນ. ຖ້າທ່ານຮູ້ສຶກວ່າທ່ານຕ້ອງການປັບປຸງຄວາມຮູ້ພື້ນຖານຂອງ UDFs ກ່ອນ, ຢຸດຊົ່ວຄາວແລະເບິ່ງບົດຄວາມທີ່ຜ່ານມາຂອງຂ້ອຍ.
ເປັນຫຍັງ Excel UDF ຈຶ່ງບໍ່ຄິດໄລ່ຄືນໃຫມ່?
ເມື່ອທ່ານເຮັດການປ່ຽນແປງໃດໆໃນ ປື້ມບັນທຶກວຽກຂອງເຈົ້າ, Excel ຈະບໍ່ຄິດໄລ່ສູດແຕ່ລະສູດທີ່ເຈົ້າມີຢູ່ນັ້ນ. ມັນຈະປັບປຸງຜົນໄດ້ຮັບສໍາລັບສູດເຫຼົ່ານັ້ນທີ່ເຊື່ອມຕໍ່ກັບເຊລທີ່ມີການປ່ຽນແປງເທົ່ານັ້ນ.
ແຕ່ອັນນີ້ກ່ຽວກັບການທໍາງານ Excel ມາດຕະຖານ. ສໍາລັບຕົວກໍານົດເອງ, Excel ບໍ່ສາມາດກວດສອບລະຫັດ VBA ແລະກໍານົດຈຸລັງອື່ນໆທີ່ສາມາດສົ່ງຜົນກະທົບຕໍ່ຜົນຂອງຫນ້າທີ່ກໍາຫນົດເອງ. ດັ່ງນັ້ນ, ສູດແບບກຳນົດເອງຂອງທ່ານອາດຈະບໍ່ປ່ຽນແປງເມື່ອທ່ານເຮັດການປ່ຽນແປງໃນປຶ້ມວຽກ.
ເພື່ອແກ້ໄຂບັນຫາ, ທ່ານພຽງແຕ່ຕ້ອງການໃຊ້ຄຳຖະແຫຼງ Application.Volatile . ກວດເບິ່ງບົດຕໍ່ໄປເພື່ອຮຽນຮູ້ຂັ້ນຕອນວິທີການນຳໃຊ້ມັນ.
ຟັງຊັນແບບກຳນົດເອງບໍ່ປ່ຽນແປງ
ໂດຍຄ່າເລີ່ມຕົ້ນ, ຟັງຊັນແບບກຳນົດເອງໃນ Excel ແມ່ນບໍ່ປ່ຽນແປງ. ນີ້ຫມາຍຄວາມວ່າ UDF ຖືກຄິດໄລ່ຄືນພຽງແຕ່ຖ້າມູນຄ່າຂອງຈຸລັງໃດໆທີ່ມັນຫມາຍເຖິງການປ່ຽນແປງ. ແຕ່ຖ້າຫາກວ່າຮູບແບບຂອງຈຸລັງ, ຊື່ຂອງແຜ່ນວຽກ, ຊື່ຂອງໄຟລ໌ປ່ຽນແປງ, ຫຼັງຈາກນັ້ນຈະບໍ່ມີການປ່ຽນແປງໃດໆໃນ UDF.
ໃຫ້ພວກເຮົາປ່ຽນຈາກຄໍາສັບໄປຫາຕົວຢ່າງ. ສໍາລັບຕົວຢ່າງ, ທ່ານຈໍາເປັນຕ້ອງຂຽນຊື່ຂອງປື້ມຄູ່ມືຂອງທ່ານໃນຫ້ອງ. ເພື່ອເຮັດສິ່ງນີ້, ທ່ານສ້າງຫນ້າທີ່ກໍານົດເອງ:
Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function
ຕອນນີ້ຈິນຕະນາການກໍລະນີຕໍ່ໄປນີ້. ທ່ານໄດ້ຂຽນສູດແບບກຳນົດເອງ =WorkbookName() ເຂົ້າໄປໃນເຊລ ແລະເອົາຊື່ໄຟລ໌ມາໃສ່ນັ້ນ. ໃນຂະນະນັ້ນ, ທ່ານຕັດສິນໃຈປ່ຽນຊື່ໄຟລ໌ ແລະບັນທຶກມັນດ້ວຍຊື່ອື່ນ. ແຕ່ທ່ານເບິ່ງມູນຄ່າໃນຫ້ອງແລະເຫັນວ່າມັນບໍ່ປ່ຽນແປງ. ຍັງມີຊື່ໄຟລ໌ເກົ່າທີ່ບໍ່ຖືກຕ້ອງອີກຕໍ່ໄປ.
ເນື່ອງຈາກວ່າບໍ່ມີການໂຕ້ຖຽງໃນການທໍາງານນີ້, ຟັງຊັນບໍ່ໄດ້ຖືກຄິດໄລ່ຄືນໃຫມ່ (ເຖິງແມ່ນວ່າທ່ານຈະປ່ຽນຊື່ຂອງ workbook ໄດ້, ປິດມັນ, ແລະຫຼັງຈາກນັ້ນເປີດໃຫມ່. it).
ໝາຍເຫດ. ເພື່ອຄິດໄລ່ຟັງຊັນທັງໝົດໃນໄຟລ໌ຂອງທ່ານ, ທ່ານສາມາດໃຊ້ທາງລັດ Ctrl + Alt + F9.
ມີວິທີທີ່ງ່າຍກວ່າບໍ? ເພື່ອເຮັດໃຫ້ສູດຄິດໄລ່ຄືນໃຫມ່ທຸກໆຄັ້ງທີ່ແຜ່ນວຽກມີການປ່ຽນແປງ, ທ່ານຈໍາເປັນຕ້ອງມີລະຫັດເສັ້ນເພີ່ມເຕີມ. ວາງລະຫັດຕໍ່ໄປນີ້ໃສ່ໃນຕອນຕົ້ນຂອງຟັງຊັນຂອງທ່ານ:
Application.Volatile
ດັ່ງນັ້ນ, ລະຫັດຂອງທ່ານຈະມີລັກສະນະນີ້:
ຟັງຊັນ WorkbookName() As String Application.Volatile WorkbookName = ThisWorkbook.Name End Function
ດຽວນີ້ UDF ຂອງທ່ານບໍ່ປ່ຽນແປງ, ດັ່ງນັ້ນມັນຈະຖືກຄິດໄລ່ຄືນໃຫມ່ໂດຍອັດຕະໂນມັດ ຖ້າຕາລາງໃດນຶ່ງໃນແຜ່ນງານ.ໄດ້ຖືກຄິດໄລ່ຄືນໃຫມ່ຫຼືການປ່ຽນແປງໃດໆເກີດຂື້ນໃນປື້ມບັນທຶກວຽກ. ທັນທີທີ່ທ່ານປ່ຽນຊື່ຂອງໄຟລ໌, ທ່ານຈະເຫັນການອັບເດດນັ້ນທັນທີ.
ໝາຍເຫດ. ກະລຸນາຈື່ຈໍາວ່າຫນ້າທີ່ລະອຽດຫຼາຍເກີນໄປສາມາດເຮັດໃຫ້ Excel ຂອງທ່ານຊ້າລົງ. ຫຼັງຈາກທີ່ທັງຫມົດ, ມີຫນ້າທີ່ກໍານົດເອງຫຼາຍເກີນໄປທີ່ປະຕິບັດການຄິດໄລ່ທີ່ຊັບຊ້ອນແລະດໍາເນີນການໃນລະດັບຂໍ້ມູນຂະຫນາດໃຫຍ່ຢ່າງຕໍ່ເນື່ອງ.
ເພາະສະນັ້ນ, ຂ້ອຍຂໍແນະນຳໃຫ້ໃຊ້ຄວາມຜັນຜວນໃນບ່ອນທີ່ຕ້ອງການແທ້ໆ.
ເປັນຫຍັງຟັງຊັນແບບກຳນົດເອງຈຶ່ງບໍ່ສາມາດໃຊ້ໄດ້
ເມື່ອທ່ານໃສ່ຕົວອັກສອນທຳອິດຂອງຊື່ຂອງຟັງຊັນທີ່ກຳນົດເອງ, ມັນຈະປາກົດຂຶ້ນ. ໃນລາຍການແບບເລື່ອນລົງຖັດຈາກຕາລາງການປ້ອນຂໍ້ມູນ, ຄືກັນກັບຟັງຊັນ Excel ມາດຕະຖານ.
ຢ່າງໃດກໍຕາມ, ອັນນີ້ບໍ່ເກີດຂຶ້ນສະເໝີໄປ. ຄວາມຜິດພາດອັນໃດສາມາດເຮັດໃຫ້ເກີດສະຖານະການນີ້?
ຖ້າທ່ານມີ Excel 2003-2007, UDF ຈະບໍ່ປາກົດຢູ່ໃນລາຍການແບບເລື່ອນລົງ. ຢູ່ທີ່ນັ້ນທ່ານສາມາດເບິ່ງພຽງແຕ່ຟັງຊັນມາດຕະຖານ.
ແຕ່ເຖິງແມ່ນວ່າທ່ານຈະໃຊ້ Excel ເວີຊັນໃໝ່ກວ່າ, ມັນກໍ່ມີຄວາມຜິດພາດອີກຢ່າງໜຶ່ງທີ່ເຈົ້າອາດຈະເຮັດໂດຍບັງເອີນ.
ເຈົ້າເຫັນ, ຟັງຊັນແບບກຳນົດເອງຈະຕ້ອງຢູ່ໃນ ໂມດູນ VBA ມາດຕະຖານທີ່ເອີ້ນວ່າ Modules. ເມື່ອທ່ານເພີ່ມໂມດູນໃຫມ່ເພື່ອຂຽນລະຫັດຟັງຊັນ, ໂຟນເດີ Modules ຈະຖືກສ້າງຂື້ນໂດຍອັດຕະໂນມັດເຊິ່ງທຸກໂມດູນຖືກຂຽນ. ກຳລັງສ້າງ. ໃນພາບຫນ້າຈໍຕໍ່ໄປທ່ານສາມາດເຫັນໄດ້ວ່າລະຫັດຟັງຊັນທີ່ກໍາຫນົດເອງແມ່ນຢູ່ໃນໂມດູນ "Microsoft Excel Objects" ພ້ອມກັບThisWorkbook.
ຈຸດແມ່ນທ່ານບໍ່ສາມາດວາງຟັງຊັນແບບກຳນົດເອງໃນພື້ນທີ່ລະຫັດຂອງແຜ່ນວຽກ ຫຼືປື້ມວຽກ. ໃນກໍລະນີນີ້, ຟັງຊັນຈະບໍ່ເຮັດວຽກ. ຍິ່ງໄປກວ່ານັ້ນ, ມັນຈະບໍ່ປາກົດຢູ່ໃນບັນຊີລາຍຊື່ເລື່ອນລົງຂອງຫນ້າທີ່. ດັ່ງນັ້ນ, ລະຫັດຄວນຈະຢູ່ໃນໂຟນເດີ ໂມດູນ ສະເໝີ.
ຂໍ້ຄວາມຊ່ວຍເຫຼືອການທໍາງານຂອງ Excel custom ບໍ່ໄດ້ສະແດງ
ບັນຫາອື່ນອາດຈະເກີດຂຶ້ນແມ່ນຄໍາແນະນໍາທີ່ທ່ານຈະເຫັນໃນເວລາທີ່ທ່ານວາງ. ຫນ້າທີ່ກໍາຫນົດເອງ. ຖ້າທ່ານໃຊ້ຟັງຊັນມາດຕະຖານ, ທ່ານສະເຫມີຈະເຫັນຄໍາແນະນໍາສໍາລັບຟັງຊັນແລະສໍາລັບການໂຕ້ຖຽງຂອງມັນ. ແຕ່ UDFs ແມ່ນຫຍັງ?
ຖ້າທ່ານມີຫນ້າທີ່ກໍານົດເອງຫຼາຍ, ມັນຈະເປັນການຍາກທີ່ສຸດສໍາລັບທ່ານທີ່ຈະຈື່ຈໍາສິ່ງທີ່ພວກເຂົາແຕ່ລະປະຕິບັດ. ມັນຈະເປັນການຍາກກວ່າທີ່ຈະຈື່ຈໍາວ່າຈະໃຊ້ການໂຕ້ຖຽງໃດ. ຂ້າພະເຈົ້າຄິດວ່າມັນເປັນຄວາມຄິດທີ່ດີທີ່ຈະມີຄໍາອະທິບາຍກ່ຽວກັບຫນ້າທີ່ກໍານົດເອງຂອງທ່ານເປັນການແຈ້ງເຕືອນ.
ສໍາລັບການນີ້, ຂ້າພະເຈົ້າແນະນໍາໃຫ້ໃຊ້ວິທີການ Application.MacroOptions . ມັນຈະຊ່ວຍໃຫ້ທ່ານສະແດງຄໍາອະທິບາຍບໍ່ພຽງແຕ່ຟັງຊັນເທົ່ານັ້ນແຕ່ຍັງມີການໂຕ້ຖຽງຂອງມັນຢູ່ໃນປ່ອງຢ້ຽມຂອງຄວາມຍາວປາ Function. ເຈົ້າເຫັນໜ້າຕ່າງນີ້ເມື່ອທ່ານຄລິກປຸ່ມ Fx ໃນແຖບສູດ.
ໃຫ້ເຮົາເບິ່ງວິທີເພີ່ມຄຳແນະນຳດັ່ງກ່າວໃສ່ UDFs ຂອງທ່ານ. ໃນບົດຄວາມທີ່ຜ່ານມາພວກເຮົາໄດ້ເບິ່ງຫນ້າ GetMaxBetween custom. ມັນຊອກຫາຈໍານວນສູງສຸດໃນຂອບເຂດທີ່ກໍານົດແລະໃຊ້ເວລາສາມ argument: ໄລຍະຂອງຄ່າຕົວເລກ, ແລະຄ່າສູງສຸດແລະຕໍາ່ສຸດທີ່ຈະ.ຊອກຫາ.
ຕອນນີ້ພວກເຮົາຈະເພີ່ມຄຳອະທິບາຍສຳລັບຟັງຊັນກຳນົດເອງນີ້. ເພື່ອເຮັດສິ່ງນີ້, ສ້າງແລະດໍາເນີນການຄໍາສັ່ງ Application.MacroOptions . ສໍາລັບຟັງຊັນ GetMaxBetween , ທ່ານສາມາດດໍາເນີນການຄໍາສັ່ງຕໍ່ໄປນີ້:
Sub RegisterUDF () Dim strFuncName As String 'ຊື່ຂອງຟັງຊັນທີ່ທ່ານຕ້ອງການລົງທະບຽນ Dim strDescr As String' ຄໍາອະທິບາຍຂອງຟັງຊັນ ຕົວຂອງມັນເອງ Dim strArgs () As String 'ລາຍລະອຽດຂອງອາກິວເມັນຟັງຊັນ ' ລົງທະບຽນ GetMaxBetween ຟັງຊັນ ReDim strArgs (1 ເຖິງ 3) 'ຈໍານວນຂອງອາກິວເມັນໃນຟັງຊັນຂອງທ່ານ strFuncName = "GetMaxBetween" strDescr = "ຈໍານວນສູງສຸດໃນຂອບເຂດທີ່ລະບຸ" strgs (ຈໍານວນສູງສຸດໃນຂອບເຂດທີ່ລະບຸໄວ້" "ຂອບເຂດຂອງຄ່າຕົວເລກ" strArgs (2) = "ຂອບໄລຍະຫ່າງຕ່ໍາ" strArgs (3) = "ຂອບໄລຍະຫ່າງເທິງ" Application.MacroOptions Macro: = strFuncName, _ Description: = strDescr, _ ArgumentDescriptions: = strArgs, _ ໝວດໝູ່: = " My Custom Functions " End Sub
or
Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween", _ Description: = "ຈຳນວນສູງສຸດໃນຂອບເຂດທີ່ລະບຸ" , _ ໝວດໝູ່: = "ຂອງຂ້ອຍ ຟັງຊັນແບບກຳນົດເອງ", _ ArgumentDescriptions: = Array (_ "ໄລຍະຂອງຄ່າຕົວເລກ", _ "ຊ່ວງເວລາຕໍ່າກວ່າ bor der " , _ "ຊາຍແດນລະຫວ່າງທາງເທິງ" ) End Subຕົວແປ str FuncName ແມ່ນຊື່ຂອງຟັງຊັນ. strDescr - ຄໍາອະທິບາຍຟັງຊັນ. ຕົວແປ strArgs ມີຄຳແນະນຳສຳລັບແຕ່ລະອາກິວເມັນ.
ເຈົ້າອາດສົງໄສວ່າອັນທີ່ສີ່ແມ່ນຫຍັງ?Application.MacroOptions. argument ທາງເລືອກນີ້ມີຊື່ວ່າ Category ແລະຊີ້ບອກ class ຂອງ Excel functions ທີ່ custom GetMaxBetween () function will be put in. ທ່ານສາມາດຕັ້ງຊື່ມັນຕາມປະເພດໃດນຶ່ງທີ່ມີຢູ່ແລ້ວ: Math &. ; Trig, Statistical, Logical, ແລະອື່ນໆ ທ່ານສາມາດກໍານົດຊື່ສໍາລັບປະເພດໃຫມ່ທີ່ທ່ານຈະຈັດວາງຫນ້າທີ່ທີ່ທ່ານສ້າງ. ຖ້າຫາກວ່າທ່ານບໍ່ໄດ້ນໍາໃຊ້ການໂຕ້ຕອບຂອງປະເພດ, ຫຼັງຈາກນັ້ນຟັງຊັນກໍານົດເອງຈະຖືກຈັດໃສ່ອັດຕະໂນມັດໃນຫມວດ "User Defined".
ວາງລະຫັດການທໍາງານໃນປ່ອງຢ້ຽມຂອງໂມດູນ:
ຈາກນັ້ນໃຫ້ຄລິກໃສ່ປຸ່ມ "Run". ຄໍາສັ່ງຈະປະຕິບັດການຕັ້ງຄ່າທັງຫມົດສໍາລັບການນໍາໃຊ້ປຸ່ມ Fx ກັບຟັງຊັນ GetMaxBetween() ຂອງທ່ານ.
ຖ້າທ່ານພະຍາຍາມໃສ່ຟັງຊັນເຂົ້າໄປໃນຕາລາງໂດຍໃຊ້ Insert Function tool, ທ່ານຈະເຫັນວ່າມີຟັງຊັນ GetMaxBetween ຂອງທ່ານຢູ່ໃນໝວດ "My Custom Functions":
You ພຽງແຕ່ສາມາດເລີ່ມການພິມຊື່ຟັງຊັນເຂົ້າໄປໃນເຊລ ແລະທ່ານຈະເຫັນຟັງຊັນທີ່ກຳນົດເອງຂອງທ່ານໃນລາຍການຟັງຊັນແບບເລື່ອນລົງເພື່ອເລືອກຈາກ.
ຈາກນັ້ນໂທຫາ ຕົວຊ່ວຍຟັງຊັນ ດ້ວຍປຸ່ມ Fx.
ເຄັດລັບ. ທ່ານຍັງສາມາດໃຊ້ການປະສົມປະສານທີ່ສໍາຄັນ CRTL + A ເພື່ອເປີດ Function Wizard.
ໃນໜ້າຕ່າງ ຕົວຊ່ວຍສ້າງຟັງຊັນ ທ່ານຈະເຫັນຄຳອະທິບາຍຂອງຟັງຊັນຂອງທ່ານ, ພ້ອມກັບຄຳຊີ້ບອກສຳລັບອາກິວເມັນທຳອິດ. ຖ້າທ່ານວາງຕົວກະພິບຂອງທ່ານໃສ່ອາກິວເມັນທີສອງ ຫຼືທີສາມ, ເຈົ້າຈະເຫັນຄຳໃບ້ສຳລັບພວກມັນນຳ.
ຫາກທ່ານຕ້ອງການປ່ຽນຂໍ້ຄວາມຂອງຄຳແນະນຳເຫຼົ່ານີ້, ໃຫ້ປ່ຽນຄ່າຂອງ strDescr ແລະ strArgs ຕົວແປໃນລະຫັດ RegisterUDF () . ຈາກນັ້ນແລ່ນຄຳສັ່ງ RegisterUDF () ອີກຄັ້ງ.
ຫາກທ່ານຕ້ອງການຍົກເລີກການຕັ້ງຄ່າທັງໝົດທີ່ເຮັດ ແລະລຶບລ້າງຄຳອະທິບາຍຟັງຊັນ, ໃຫ້ແລ່ນລະຫັດນີ້:
Sub UnregisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub
ມີອີກວິທີໜຶ່ງທີ່ຈະຮັບຄຳໃບ້ເມື່ອທ່ານເຂົ້າຟັງຊັນທີ່ກຳນົດເອງ. ໃສ່ຊື່ຂອງຟັງຊັນແລ້ວກົດ Ctrl + Shift + A :
=GetMaxBetween(
+ Ctrl + Shift + A
ທ່ານຈະເຫັນລາຍການອາກິວເມັນຂອງຟັງຊັນທັງໝົດ:
ໜ້າເສຍດາຍ, ໃນທີ່ນີ້ທ່ານຈະບໍ່ເຫັນຄຳອະທິບາຍຂອງໜ້າທີ່ ແລະຂໍ້ໂຕ້ແຍ້ງຂອງມັນ. ແຕ່ຖ້າຊື່ຂອງການໂຕ້ຖຽງແມ່ນມີຂໍ້ມູນຫຼາຍ, ດັ່ງນັ້ນພວກມັນອາດຈະເປັນປະໂຫຍດເຊັ່ນກັນ. ຢ່າງໃດກໍຕາມ, ມັນດີກ່ວາບໍ່ມີຫຍັງ :)
ມັນຈະໃຊ້ເວລາຫຼາຍຫນ້ອຍທີ່ຈະສ້າງ intellisense ສໍາລັບ UDFs ທີ່ເຮັດວຽກຄືກັບຟັງຊັນ Excel ມາດຕະຖານ. ແຕ່ຫນ້າເສຍດາຍ, Microsoft ບໍ່ໄດ້ໃຫ້ທາງເລືອກໃດໆ. ການແກ້ໄຂດຽວທີ່ມີຢູ່ໃນປັດຈຸບັນແມ່ນສ່ວນຂະຫຍາຍ Excel-DNA IntelliSense. ທ່ານສາມາດຊອກຫາຂໍ້ມູນເພີ່ມເຕີມຢູ່ໃນເວັບໄຊທ໌ຂອງຜູ້ພັດທະນາໄດ້.
ຫວັງວ່າ, ຂໍ້ແນະນໍາເຫຼົ່ານີ້ຈະຊ່ວຍໃຫ້ທ່ານແກ້ໄຂບັນຫາໃນເວລາທີ່ຫນ້າທີ່ກໍານົດເອງຂອງທ່ານບໍ່ເຮັດວຽກຫຼືບໍ່ເຮັດວຽກ.ເຮັດວຽກຕາມທີ່ທ່ານຕ້ອງການ. ຢ່າງໃດກໍຕາມ, UDF ຂອງທ່ານຍັງບໍ່ສາມາດເຮັດວຽກໄດ້, ກະລຸນາອະທິບາຍບັນຫາຂອງທ່ານຢ່າງຖືກຕ້ອງໃນສ່ວນຄໍາເຫັນ. ພວກເຮົາຈະພະຍາຍາມຊອກຫາວິທີແກ້ໄຂສໍາລັບທ່ານ ;)