VBA ByRef ఆర్గ్యుమెంట్ రకం సరిపోలని లోపం | టాప్ 3 కారణాలు & లోపం పరిష్కారాలు

ఎక్సెల్ VBA లో బై రీఫ్ ఆర్గ్యుమెంట్ టైప్ అసమతుల్యత

ఈ వ్యాసంలో, ఎక్సెల్ VBA బై రిఫ్‌ను “ఆర్గ్యుమెంట్ టైప్ సరిపోలని లోపం” గా ఉపయోగిస్తున్నప్పుడు ఎదురైన లోపాన్ని మేము వివరించాము. దీనికి ముందు నేను మిమ్మల్ని మొదట “బై రెఫ్” కి పరిచయం చేద్దాం. ఏదైనా ప్రోగ్రామింగ్ భాషకు వేరియబుల్స్ కీలకం మరియు VBA కూడా భిన్నంగా లేదు. “బై రిఫ్” మరియు “బైవాల్” అనే పదాలను ఉపయోగించడం ద్వారా వేరియబుల్స్ డిక్లేర్ చేసే ఒక మార్గం మనం చూశాము.

బైరిఫ్ అంటే ఏమిటి?

“బై రిఫ్” అంటే “రిఫరెన్స్ ద్వారా”, ఈ పదాన్ని ఉపయోగించి మనం వాస్తవానికి సూచనల ద్వారా విధానాలకు (ఉప & ఫంక్షన్ రెండింటికీ) వాదనలు పంపవచ్చు. ఇది దాని సోదరుడు “బై వాల్” కి భిన్నంగా ఉంటుంది, ఇది సరళమైనది కాని ప్రకృతిలో స్థిరంగా ఉంటుంది.

దీన్ని అర్థం చేసుకోవడానికి ఈ క్రింది రెండు మాక్రోలను పరిశీలిద్దాం.

కోడ్:

 సబ్ మాక్రో 1 () డిమ్ ఎ యాస్ లాంగ్ ఎ = 50 మాక్రో 2 ఎ ఎంఎస్‌జిబాక్స్ ఎ ఎండ్ సబ్ సబ్ మాక్రో 2 (బై రిఫ్ ఎ లాంగ్) ఎ = ఎ * 10 ఎండ్ సబ్ 

మాకు ఇక్కడ వరుసగా మాక్రో 1 & మాక్రో 2 అని రెండు ఉపప్రాసెసర్లు ఉన్నాయి. దీన్ని బాగా అర్థం చేసుకోవడానికి F8 కీని నొక్కడం ద్వారా పంక్తి ద్వారా స్థూల పంక్తిని అమలు చేయండి.

వేరియబుల్ “A” విలువను 50 గా సంగ్రహించడానికి F8 కీని నొక్కండి.

కోడ్ యొక్క తదుపరి పంక్తి “మాక్రో 2 ఎ” అనగా రెండవ స్థూల పేరు మరియు “ఎ” అనేది “బై రెఫ్” పదం ద్వారా నిర్వచించబడిన వేరియబుల్.

"మాక్రో 2 ఎ" కోడ్ యొక్క పంక్తిని మేము అమలు చేసిన క్షణం పైన మీరు చూడగలిగినట్లుగా, ఇది పై విధానం నుండి తదుపరి VBA ఉప విధానానికి చేరుకుంది.

ఇప్పుడు మనం వేరియబుల్ “A” యొక్క విలువ 50 అని చూడవచ్చు ఎందుకంటే దీనికి కారణం “A” అనే వేరియబుల్ ను డిక్లేర్ చేయడానికి “ByRef” అనే పదాన్ని ఉపయోగించాము. మాక్రో 1 ఇది ఈ వేరియబుల్ “A” కి మేము కేటాయించిన విలువను సంగ్రహించింది మాక్రో 1.

ఇప్పుడు ఈ స్థూలంలో (మాక్రో 2) సమీకరణం A = A * 10 అనగా A = 50 * 100. పై మాక్రోకు తిరిగి వెళ్ళడానికి F8 కీని 3 సార్లు నొక్కండి (మాక్రో 1).

VBA లోని సందేశ పెట్టెలో వేరియబుల్ “A” విలువను చూడటానికి ఇప్పుడు మరోసారి F8 కీని నొక్కండి.

విలువ 500 అని చెప్పారు.

ఈ స్థూల (మాక్రో 1) లో మేము కేటాయించిన విలువ 50 అయినప్పటికీ, బైరఫ్ పదాన్ని ఉపయోగించడం ద్వారా మేము మాక్రో 1 నుండి వేరియబుల్ “ఎ” విలువను నిలుపుకొని, ఆపై 10 గుణించడం ద్వారా ఎ విలువను అమలు చేయడం ద్వారా మాక్రో 2 ఉపప్రాసెసర్‌ను ప్రారంభించాము.

VBA బైరెఫ్ ఆర్గ్యుమెంట్ రకం అసమతుల్యతకు టాప్ 3 కారణాలు

పైన “బైరిఫ్” ఎలా పనిచేస్తుందో మనం చూశాము, కాని VBA దోష సందేశాన్ని “బై రిఫ్ ఆర్గ్యుమెంట్ టైప్ అసమతుల్యత” గా విసిరేయడానికి కారణమైన కొన్ని తప్పులను మేము చేయాల్సి ఉంటుంది.

ఇది చాలా కారణాల వల్ల మరియు ఈ విభాగంలో, ఈ లోపాన్ని ఎలా సరిదిద్దాలి మరియు కోడ్‌ను డీబగ్ చేయాలో మేము మీకు చూపుతాము.

మీరు ఈ VBA ByRef ఆర్గ్యుమెంట్ రకం సరిపోలని ఎక్సెల్ మూసను ఇక్కడ డౌన్‌లోడ్ చేసుకోవచ్చు - VBA ByRef ఆర్గ్యుమెంట్ రకం సరిపోలని ఎక్సెల్ మూస

లోపం కారణం # 1 - విభిన్న వేరియబుల్ పేర్లు

ఎక్సెల్ VBA లో ఈ లోపం రావడానికి ప్రధాన కారణం రెండు విధానాలలో ఆమోదించబడిన వేర్వేరు వేరియబుల్స్. ఉదాహరణకు ఈ క్రింది కోడ్‌లను చూడండి.

కోడ్:

 సబ్ మాక్రో 1 () డిమ్ ఎ యాస్ లాంగ్ ఎ = 50 మాక్రో 2 బి ఎంఎస్‌జిబాక్స్ ఎండ్ సబ్ సబ్ మాక్రో 2 (బై రిఫ్ ఎ లాంగ్) బి = బి * 10 ఎండ్ సబ్ 

మాక్రో 1 లో మనం “ఎ” వేరియబుల్ ఉపయోగించాము మరియు మాక్రో 2 లో “బి” వేరియబుల్ ఉపయోగించాము. ఇప్పుడు మీరు కోడ్‌ను అమలు చేయడానికి ప్రయత్నిస్తే, మేము VBA లోపాన్ని “ByRef Argument Type Misatch” గా పొందుతాము.

మీరు పైన చూడగలిగినట్లుగా వేరియబుల్ “B” హైలైట్ చేయబడింది ఎందుకంటే వేరియబుల్ పేరు రకం అసమతుల్యత.

పరిష్కారం: ఈ సమస్యను అధిగమించడానికి రెండు విధానాలలోనూ వేరియబుల్ పేర్లు ఖచ్చితమైనవని నిర్ధారించుకోవాలి.

లోపం కారణం 2: విభిన్న వేరియబుల్ డేటా రకాలు

వేరియబుల్ పేర్లు ఒకేలా ఉన్నప్పటికీ, అది లోపం కలిగిస్తుంది ఎందుకంటే దీనికి కారణం మేము వారికి కేటాయించిన డేటా రకం. క్రింది కోడ్ చూడండి.

కోడ్:

 సబ్ మాక్రో 1 () డిమ్ ఎ యాస్ ఇంటీజర్ ఎ = 50 మాక్రో 2 ఎ ఎంఎస్‌జిబాక్స్ ఎ ఎండ్ సబ్ సబ్ మాక్రో 2 (బై రిఫ్ ఎ లాంగ్) ఎ = ఎ * 10 ఎండ్ సబ్ 

పై సంకేతాలలో, నేను మాక్రో 1 లో వేరియబుల్ “ఎ” ను ఇంటీజర్ డేటా రకంగా ప్రకటించాను మరియు మాక్రో 2 లో అదే వేరియబుల్ డేటా రకాన్ని “లాంగ్” గా కేటాయించింది.

మేము ఈ కోడ్‌ను అమలు చేస్తున్నప్పుడు, అది “బై రిఫ్ ఆర్గ్యుమెంట్ టైప్ అసమతుల్యత” అనే vba లోపానికి కారణమవుతుంది.

ఒకే వేరియబుల్ పేరు కోసం మేము రెండు వేర్వేరు డేటా రకాలను కేటాయించాము.

పరిష్కారం: రెండు విధానాలలో డేటా రకం ఒకేలా ఉండాలి.

లోపం కారణం 3: ఒక మాక్రోలో వేరియబుల్ డేటా రకాలు లేవు

ఎక్సెల్ VBA లోపం “బై రిఫ్ ఆర్గ్యుమెంట్ టైప్ అసమతుల్యత” ఒక మాక్రోలో కేటాయించిన డేటా రకం కారణంగా జరగవచ్చు మరియు మరొక స్థూలంలో కేటాయించబడదు.

కోడ్:

 సబ్ మాక్రో 1 () ఎ = 50 మాక్రో 2 ఎ ఎంఎస్‌జిబాక్స్ ఎ ఎండ్ సబ్ సబ్ మాక్రో 2 (బై రిఫ్ ఎ లాంగ్) ఎ = ఎ * 10 ఎండ్ సబ్ 

మాక్రో 1 యొక్క పై కోడ్‌లో, నేను వేరియబుల్‌ను ప్రకటించలేదు, బదులుగా వేరియబుల్‌కు విలువను కేటాయించాను.

మాక్రో 2 కోసం మరోవైపు నేను వేరియబుల్ “ఎ” ని ప్రకటించాను. మీరు ఈ కోడ్‌ను అమలు చేయడానికి ప్రయత్నిస్తే అది “బై రిఫ్ ఆర్గ్యుమెంట్ టైప్ అసమతుల్యత” VBA లోపానికి కారణమవుతుంది.

పరిష్కారం 1: ఈ రకమైన పరిస్థితులను నివారించడానికి మొదటి పరిష్కారం రెండు విధానాలలో వేరియబుల్‌ను ప్రకటించడం మరియు ఒకే డేటా రకాన్ని కేటాయించడం.

పరిష్కారం 2: ప్రత్యామ్నాయం మాడ్యూల్ ఎగువన “ఆప్షన్ స్పష్టమైన” పదాన్ని జోడించడం ద్వారా వేరియబుల్ డిక్లరేషన్‌ను తప్పనిసరి చేయడం పరిష్కారం.

ఇది ఏమి చేస్తుందంటే అది VBA “బై రిఫ్ ఆర్గ్యుమెంట్ టైప్ అసమతుల్యత” చూపించే ముందు లోపం మొదట వేరియబుల్ ను డిక్లేర్ చేయమని అడుగుతుంది.

కాబట్టి, ఆప్షన్ స్పష్టమైన ఎల్లప్పుడూ VBA లో ఉపయోగపడుతుంది.

గుర్తుంచుకోవలసిన విషయాలు

  • ByRef బై Val కు వ్యతిరేకం.
  • ByRef సూచనను ఒక విధానం నుండి మరొక విధానం వరకు తీసుకువెళుతుంది.
  • రెండు విధానాలలో వేరియబుల్ పేరు, డేటా రకం ఒకేలా ఉండాలి.
  • బహుళ వేరియబుల్స్ విషయంలో ప్రతి వేరియబుల్ విడిగా ప్రకటించాల్సిన అవసరం ఉంది.