i have stretch goal project goes way beyond current ability, hoping here put me on right track. have following code:
public errorcount integer sub generalformat() errorcount = 0 vlookup macrofillareas color nonzerocompare mustbe msgbox ("number of errors" & cstr(errorcount)) end sub
i have following section of code:
sub nonzerocompare() dim long = 5 1000 step 1 if range("ak" & i).value = "on" if range("al" & i).value = 0 , range("am" & i).value = 0 range("al" & i, "am" & i).interior.colorindex = 6 errorcount = errorcount + 1 end if elseif range("bc" & i).value = 0 , range("bd" & i).value = 0 range("bc" & i, "bd" & i).interior.colorindex = 6 errorcount = errorcount + 1 elseif range("ej" & i).value = "on" if range("ek" & i).value = 0 , range("el" & i).value = 0 range("ek" & i, "el" & i).interior.colorindex = 6 errorcount = errorcount + 1 end if elseif range("es" & i).value = 0 , range("et" & i).value = 0 range("es" & i, "et" & i).interior.colorindex = 6 errorcount = errorcount + 1 elseif range("fg" & i).value = 0 , range("fh" & i).value = 0 range("fg" & i, "fh" & i).interior.colorindex = 6 errorcount = errorcount + 1 end if next end sub
my desired effect have user able jump each cell contributes "errorcount". there thousands of cells in workbook manage, being able jump error on review great. better if done 1 key on keyboard, button work too.
any ideas on how execute this? also, difficulty level? resources on begin on type of feature? last question: native features excel can code in use won't require hardcore coding?
here's approach work in handle requirements.
first, instead of holding count of number of errors, can hold dictionary
object holds references cell locations. using object, can inspect total count of errors, locations, etc.
i'm going show 1 (relatively simple) implementation below. (if you're unfamiliar dictionary
objects, research. basically, holds unique key , corresponding value). in case, chose store address of error cell key, , stored blank string value.
first, wrote function return dictionary object holding errors. in simple implementation, had fixed range, , stored in address of cell had text 'abc'.
next, wrote helper function returns count of number of objects (this simple enough don't need helper function, might simplify things if making multiple calls or if add more customized logic).
finally, 2 subroutines accomplish final req: traversing through errors. first routine 'traverseerrorsgoes through dictionary , "visits" each of addresses. yields a
doeventscall allows user need to. the
jumpahead` routine tells system user finished.
it helpful attach keyboard shortcut jumpahead
method. so, while in excel workbook, press alt + f8 open macro window. select jumpahead
routine, click options
button in dialog box. allows enter letter when pressed along ctrl key, runs macro. (i selected letter e, ctrl + e allows me jump ahead once i've made changes).
there challenges consider. example, cell addresses not have reference sheet. therefore, if macro switches worksheets, may run trouble.
let me know of questions.
dim odictcellswitherrors object dim bcontinue boolean private function geterrorsdict() object dim rdata range dim riterator range 'this helper function returns dictionary object containing errors 'if it's been populated 'if not, creates returns object if not odictcellswitherrors nothing set geterrorsdict = odictcellswitherrors exit function end if 'some logic create dictionary of errors 'in case, i'm adding cells have text "abc" 'your logic should differ set rdata = sheet1.range("a2:a15") set odictcellswitherrors = createobject("scripting.dictionary") each riterator in rdata if riterator.value = "abc" if not odictcellswitherrors.exists(riterator.address) odictcellswitherrors(riterator.address) = "" end if end if next riterator set geterrorsdict = odictcellswitherrors end function private function counterrors() integer 'this function returns number of errors in document counterrors = geterrorsdict().count end function sub traverseerrors() dim odict object dim skey variant set odict = geterrorsdict() each skey in odict.keys bcontinue = false sheet1.range(skey).activate until bcontinue doevents loop next skey msgbox "no more errors" end sub sub jumpahead() bcontinue = true end sub
Comments
Post a Comment