vba - Creating barcodes in Excel -


i using barcode font generate barcodes,

column text - *column b barcode*  

i have following macro in thisworkbook works okay.

private sub workbook_sheetchange(byval sh object, byval target range)      if isempty(target) or target.column <> 1 , target.column <> 4 exit sub      dim datarow integer      datarow = target.cells.row      while not isempty(cells(datarow, target.column))          target.worksheet.cells(datarow, target.column + 1) = "*" & target.worksheet.cells(datarow, target.column) & "*"          datarow = datarow + 1      wend  end sub 

when scan 22 digit # in column a; on column b skip first 7 digit , have last 15 digit on column b

e.g: if 22 digit skip first 7  if 32 digit skip first 16 & last 4  if 34 digit skip first 22 

enter image description here

first off, sh parameter of workbook_sheetchange event macro worksheet object containing target. can use directly; there no need pare worksheet target.

next, idea when adding/modifying/deleting objects within worksheet_change or workbook_sheetchange event macro turn off application.enableevents macro not try run on top of when changes/deleted/adds value on same (or different) worksheet.

private sub workbook_sheetchange(byval sh object, byval target range)      if not intersect(sh.range("a:a, d:d"), target) nothing         on error goto fìn         application.enableevents = false         dim datarow long, rng range         each rng in intersect(sh.range("a:a, d:d"), target)             select case len(rng.value2)                 case 0                     'do nothing                 case 22                     rng.offset(0, 1) = chr(42) & mid(rng.value2, 8, 99) & chr(42)                 case 32                     rng.offset(0, 1) = chr(42) & mid(rng.value2, 8, 21) & chr(42)                 case 34                     rng.offset(0, 1) = chr(42) & mid(rng.value2, 23, 99) & chr(42)                 case else                     rng.offset(0, 1) = chr(42) & rng.value2 & chr(42)             end select         next rng     end if  fìn:     application.enableevents = true end sub 

target knows worksheet on there no need define worksheet when referencing cell offset target.

a select case ... end select` based on length of values in target seemed best solution , allows easy expandability.

and finally, need multiple worksheets workbook_sheetchange event macro or single worksheet's worksheet_change suffice?