Error sa Hindi Pagtutugma sa VBA ByRef Argumento Error | Nangungunang 3 Mga Dahilan at Pag-aayos ng Error

ByRef Argument Type Mismatch sa Excel VBA

Sa artikulong ito, ipinapaliwanag namin ang error na naranasan habang ginagamit ang Excel VBA ByRef bilang "Error ng Mismatch Type Error". Bago iyon hayaan mo akong ipakilala muna sa iyo ang "By Ref". Ang mga variable ay susi sa anumang wika ng programa at ang VBA ay hindi rin magkakaiba. Nakita namin ang maraming paraan ng pagdedeklara ng mga variable na isang tulad ng paraan ng pagdedeklara ng mga variable ay sa pamamagitan ng paggamit ng mga salitang "ByRef" at "ByVal".

Ano ang Ibig Sabihin ni ByRef?

Ang "ByRef" ay nangangahulugang "Sa pamamagitan ng Sanggunian", gamit ang salitang ito maaari naming talagang ipasa ang mga argumento sa mga pamamaraan (para sa parehong sub & pagpapaandar) sa pamamagitan ng sanggunian. Hindi ito katulad ng kapatid nitong "By Val" na hindi nababaluktot ngunit naayos sa likas na katangian.

Upang maunawaan ito, tingnan natin ang nasa ibaba ng dalawang macros.

Code:

 Sub Macro1 () Dim A As Long A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub 

Mayroon kaming dalawang mga subprocedure dito na pinangalanan bilang Macro1 at Macro2 ayon sa pagkakabanggit. Upang maunawaan ito nang mas mahusay na patakbuhin ang linya ng macro sa pamamagitan ng linya sa pamamagitan ng pagpindot sa F8 key.

Pindutin ang F8 key upang makuha ang halaga ng variable na "A" bilang 50.

Sinasabi ng susunod na linya ng code na "Macro2 A" ibig sabihin pangalan ng pangalawang macro at "A" ang variable na tinukoy sa pamamagitan ng salitang "Ni Ref".

Tulad ng nakikita mo sa itaas ng sandali na isinasagawa namin ang linya ng code na "Macro2 A" lumundag ito sa susunod na pamamaraan ng sub ng VBA mula sa pamamaraang nasa itaas.

Ngayon nakikita natin ang halaga ng variable na "A" ay 50 ito ay dahil mula noong ginamit namin ang salitang "ByRef" upang ideklara ang variable na "A" na kapareho ng Macro1 nakuha nito ang halagang itinalaga natin sa variable na "A" mula sa Macro1.

Ngayon sa macro na ito (Macro2) sinasabi ng equation na A = A * 10 ibig sabihin A = 50 * 100. Pindutin ang F8 key ng 3 beses upang bumalik sa itaas na macro (Macro1).

Pindutin ngayon ang isa pang beses na F8 key upang makita ang halaga ng variable na "A" sa kahon ng mensahe sa VBA.

Sinasabi ng halaga na 500.

Kahit na ang halagang itinalaga namin sa macro na ito (Macro1) ay 50, sa pamamagitan ng paggamit ng salitang ByRef ay talagang na-trigger namin ang subrocedure ng Macro2 sa pamamagitan ng pagpapanatili ng halaga ng variable na "A" mula sa Macro1 at pagkatapos ay pagpapatupad ng halaga ng A sa pamamagitan ng pag-multiply ng 10.

Nangungunang 3 Mga Dahilan para sa VBA Byref Argument Type Mismatch

Sa itaas nakita natin kung paano gumagana ang "ByRef" ngunit hindi namin nagawa ang ilang mga pagkakamali na walang humpay na nagresulta sa pagkahagis ng isang mensahe ng error sa VBA bilang "ByRef Argument Type Mismatch".

Dahil ito sa maraming kadahilanan at sa seksyong ito, ipapakita namin sa iyo kung paano maituwid ang error na ito at i-debug ang code.

Maaari mong i-download ang VBA ByRef Argument Type Mismatch Excel Template dito - VBA ByRef Argument Type Mismatch Excel Template

Dahilan sa Error # 1 - Iba't ibang Mga variable na Pangalan

Ang isa sa pangunahing dahilan sa likod ng pagkuha ng error na ito sa Excel VBA ay dahil sa iba't ibang mga variable na naipasa sa dalawang pamamaraan. Para sa isang halimbawa tingnan ang mga code sa ibaba.

Code:

 Sub Macro1 () Dim A As Long A = 50 Macro2 B MsgBox A End Sub Sub Macro2 (ByRef A As Long) B = B * 10 End Sub 

Sa Macro1 nagamit namin ang variable na "A" at sa Macro2 ginamit namin ang variable na "B". Ngayon kung susubukan mong patakbuhin ang code makakakuha kami ng VBA Error bilang "ByRef Argument Type Mismatch".

Tulad ng nakikita mo sa itaas na variable na "B" ay nai-highlight dahil ang uri ng variable na pangalan ay isang hindi pagtutugma.

Solusyon: Upang mapagtagumpayan ang isyung ito kailangan nating tiyakin na ang mga variable na pangalan sa parehong pamamaraan ay eksakto.

Error Dahilan 2: Iba't ibang Mga Uri ng Data na Variable

Kahit na magkakaiba ang mga pangalan ng variable ay nagdudulot ito ng isang error dahil ito sa uri ng data na itinatalaga namin sa kanila. Tingnan ang code sa ibaba.

Code:

 Sub Macro1 () Dim A As Integer A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub 

Sa mga code sa itaas, idineklara kong variable na "A" bilang uri ng data ng Integer sa Macro1 at sa Macro2 na parehong variable ay naitalaga ang uri ng data bilang "Mahaba".

Kapag pinatakbo namin ang code na ito, magdudulot ito ng isang error sa vba na "ByRef Argument Type Mismatch".

Ito ay sapagkat nagtalaga kami ng dalawang magkakaibang uri ng data para sa parehong variable na pangalan.

Solusyon: Ang uri ng data ay dapat na pareho sa parehong mga pamamaraan.

Error Dahilan 3: Nawawalang Mga Uri ng Data na Nawawala sa Isang Macro

Ang Error sa Excel VBA na "ByRef Argument Type Mismatch" ay maaaring mangyari dahil sa uri ng data na nakatalaga sa isang macro at hindi naitalaga sa ibang macro.

Code:

 Sub Macro1 () A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub 

Sa code sa itaas ng Macro1, hindi ko naideklara ang anumang variable sa halip na itinalaga lamang ang halaga sa variable.

Sa kabilang banda para sa Macro2 ay idineklara ko ang variable na "A" hangga't. Kung susubukan mong patakbuhin ang code na ito magdudulot ito ng "ByRef Argument Type Mismatch" VBA Error.

Solusyon1: Upang maiwasan ang mga ganitong uri ng sitwasyon ang unang solusyon ay upang ideklara ang variable sa parehong mga pamamaraan at magtalaga ng parehong uri ng data.

Solusyon2: Isang kahalili solusyon ay upang gawing sapilitan ang variable na deklarasyon sa pamamagitan ng pagdaragdag ng salitang "Opsyon na Maliwanag" sa tuktok ng modyul.

Ang gagawin nito ay bago ito ipakita ang VBA na "ByRef Argument Type Mismatch" Error na talagang hinihiling nito sa amin na ideklara muna ang variable.

Kaya, ang Opsyon na Tahasang malinaw na laging magagamit sa VBA.

Bagay na dapat alalahanin

  • Ang ByRef ay kabaligtaran ng By Val.
  • Nagdadala ang ByRef ng sanggunian mula sa isang pamamaraan patungo sa isa pa.
  • Ang variable na pangalan, uri ng data ay dapat na pareho sa parehong mga pamamaraan.
  • Ang bawat variable ay kailangang ideklara nang magkahiwalay sa kaso ng maraming mga variable.