excel - Subscript out of range when referencing a worksheet in another workbook from a variable -
see picture: http://s12.postimg.org/ov8djtuh9/capture.jpg
context: trying activate sheet (variable: csheet) in workbook , paste data there copied data different workbook. i'm getting subscript out of range error whenever try activate directly using variable (i.e. worksheets(name).activate) or try define worksheet using variable , activate it. i've tried other coding styles, using "with worksheet" etc. , code lot longer started on because every time fix something, else goes wrong. so, sticking basics. appreciated.
sub gensumrep() dim autosr workbook dim asrsheet worksheet dim tempwb workbook dim datawb workbook dim secname string dim oldcell string dim nsname string dim csheet worksheet set autosr = activeworkbook set asrsheet = autosr.activesheet = 3 10 secname = asrsheet.range("d" & a).value if secname <> "" workbooks.open range("b" & a).value set tempwb = activeworkbook 'tempwb.windows(1).visible = false autosr.activate workbooks.open range("c" & a).value set datawb = activeworkbook 'datawb.windows(1).visible = false autosr.activate 'copy paste data b = 24 29 oldcell = range("c" & b).value if b = 24 nsname = trim(secname) & " data" set csheet = tempwb.sheets(nsname) else nsname = asrsheet.range("b" & b).value set csheet = tempwb.sheets(nsname) end if 'copy datawb.activate range(oldcell).select range(selection, selection.end(xltoright)).select range(selection, selection.end(xldown)).select selection.copy 'paste tempwb.activate csheet.select range("a1").select selection.pastespecial paste:=xlpastevalues, operation:=xlnone, skipblanks _ :=false, transpose:=false application.cutcopymode = false b = b + 1 next b end if = + 1 next end sub
you error 1 reason: the name provided not exist in collection!
there couple of reasons based on code:
- your
nsname
variable contains hidden characters make different though appears correct. - you looking sheet in wrong workbook.
based on comments, it seems looking in wrong workbook. way check out these subscript errors iterate collection , print out names
included therein.
dim sht worksheet each sht in tempwb.sheets debug.print sht.name next sht
in general, desirable rid of calls select
, activate
not relying on interface in order objects. see this post avoiding select
, activate
more info.
one idea applied code assign workbooks directly without activeworkbook
:
set tempwb = workbooks.open(asrsheet.range("b" & a).value) set datawb = workbooks.open(asrsheet.range("c" & a).value)
instead of:
workbooks.open range("b" & a).value set tempwb = activeworkbook 'tempwb.windows(1).visible = false autosr.activate workbooks.open range("c" & a).value set datawb = activeworkbook 'datawb.windows(1).visible = false
Comments
Post a Comment