excel vba - Proper use of Application.Run -
i not sure understand use of application.run. have tried using in 1 of macros, did not see expected change. here setup. have excel add-in runs several macros menu system. 1 of macros copy data extract workbook master workbook. other day, 1 of users had applied filter 1 of columns , did not clear before running copy code. caused data not copy correctly. have researched how run code on master workbook extract workbook clear filter before copy/paste occurs.
to better clarify how need work:
- workbook a contains data needs move workbook b
- workbook a sort data , remove data not needed in workbook b.
- in workbook b have code show data if filter applied upon open , close of workbook.
- before copying , pasting data workbook a workbook b, need have workbook a trigger unfilter code in workbook b perform sub in workbook b.
this code extract workbook (workbook a) (that uses add-in):
sub extract_sort_1601_january() dim ans long ans = msgbox("is january 2016 swivel master file checked out of sharepoint , open on desktop?", vbyesno + vbquestion + vbdefaultbutton1, "master file open") if ans = vbno or iswbopen("swivel - master - january 2016") = false msgbox "the required workbook not open. procedure terminate.", vbokonly + vbexclamation, "terminate procedure" exit sub end if application.screenupdating = false ' line autofits columns c, d, o, , p range("c:c,d:d,o:o,p:p").columns.autofit ' unhides hidden rows cells.entirerow.hidden = false dim lr long lr = range("b" & rows.count).end(xlup).row 2 step -1 if range("b" & lr).value <> "1" rows(lr).entirerow.delete end if next lr application.run "'swivel - master - january 2016.xlsm'!unfilter" activeworkbook.worksheets("extract").sort .sortfields .clear .add key:=range("b2:b2000"), sorton:=xlsortonvalues, order:=xlascending, dataoption:=xlsortnormal .add key:=range("d2:d2000"), sorton:=xlsortonvalues, order:=xlascending, dataoption:=xlsortnormal .add key:=range("o2:o2000"), sorton:=xlsortonvalues, order:=xlascending, dataoption:=xlsortnormal .add key:=range("j2:j2000"), sorton:=xlsortonvalues, order:=xlascending, dataoption:=xlsortnormal .add key:=range("k2:k2000"), sorton:=xlsortonvalues, order:=xlascending, dataoption:=xlsortnormal .add key:=range("l2:l2000"), sorton:=xlsortonvalues, order:=xlascending, dataoption:=xlsortnormal end .setrange range("a2:ae2000") .apply end cells.wraptext = false sheets("extract").range("a2").select dim lastrow integer, integer, erow integer 'with workbooks("swivel - master - january 2016.xlsm").sheets("swivel") 'erow = .cells(.rows.count, 1).end(xlup).offset(1, 0).row '.range("a2:ae" & erow).autofilter 'leaving arguments blank clears filters, leaves drop-down arrows (filter mode still on) 'end lastrow = activesheet.range("a" & rows.count).end(xlup).row = 2 lastrow if cells(i, 2) = "1" ' opposed selecting cells, copy them directly range(cells(i, 1), cells(i, 31)).copy ' opposed "activating" workbook, , selecting sheet, paste cells directly workbooks("swivel - master - january 2016.xlsm").sheets("swivel") erow = .cells(.rows.count, 1).end(xlup).offset(1, 0).row .cells(erow, 1).pastespecial xlpasteall end application.cutcopymode = false end if next application.screenupdating = true end sub here unfilter code need run on master workbook (workbook b)(this located in module in master workbook):
sub unfilter() dim variant each in worksheets if she.filtermode she.showalldata next end sub am using application.run correctly? or there issue code? not errors. when tested this, data in workbook b remained filtered.
change unfilter sub work directly workbook code resides.
see below:
sub unfilter() dim variant each in thisworkbook.worksheets if she.filtermode she.showalldata next end sub
Comments
Post a Comment