excel - VBA method 'range of object' _Worksheet failed Shapes.Range(Array -


i trying move shapes on 2nd sheet based on values of 1st sheet. keep getting error line....shapes.range(array(.... below code.

sub graphics_mover() ' graphics_mover macro  dim swl_row double, pwl_row double dim rng variant, integer, colnum integer, data worksheet, pict worksheet set data = thisworkbook.worksheets(1) 'set pict = thisworkbook.worksheets(2) set pict = workbooks("well pictographs2.xlsm").worksheets(2) = 1 = 1 27     swl_row = data.cells(2, + 1).value     swl_row = int(swl_row / 50 + 1)     pict.shapes.range(array("isosceles triangle " & i)).select     selection.top = swl_row * 15 + 4      pwl_row = data.cells(3, + 1).value     pwl_row = int(pwl_row / 50 + 1)     pict.shapes.range(array("freeform " & i)).select     selection.top = pwl_row * 15 + 1     = + 1 next     '-------------------------- end sub 

the line causing error is:

    pict.shapes.range(array("freeform " & i)).select 

i appreciate solutions.

i'm curious value of i when crash. code largely same recorded macro syntax correct if named shape(s) exist.

first run small snippet output of shapes' names vbe's immediate window (ctrl+g).

sub list_shapes()     dim long     workbooks("well pictographs2.xlsm").worksheets(2)         = 1 .shapes.count             debug.print .shapes(i).name         next     end end sub 

when in vbe, tap ctrl+g open immediate window , check output. make sure have isosceles triangle 1 through isosceles triangle 27 (inclusive).

next run through modification of macro.

sub graphics_mover()     dim swl_row double, pwl_row double     dim rng variant, integer, colnum integer, data worksheet, pict worksheet      on error resume next     set data = thisworkbook.worksheets(1)      workbooks("well pictographs2.xlsm").worksheets(2)         = 1 27             swl_row = data.cells(2, + 1).value             swl_row = int(swl_row / 50 + 1)             if not .shapes("isosceles triangle " & i) nothing                 .shapes("isosceles triangle " & i).top = swl_row * 15 + 4                 debug.print "moved " & .shapes("isosceles triangle " & i).name             end if              pwl_row = data.cells(3, + 1).value             pwl_row = int(pwl_row / 50 + 1)             if not .shapes("freeform " & i) nothing                 .shapes("freeform " & i).top = pwl_row * 15 + 1                 debug.print "moved " & .shapes("freeform " & i).name             end if         next     end end sub 

i'm not big fan of using on error resume next dealing object avoiding detection. vbe's immediate window report shapes move.


Comments