查看完整版本: 錄製的巨集如何寫入迴圈
頁: [1]

v03586 發表於 2015-12-15 02:39 AM

錄製的巨集如何寫入迴圈

本帖最後由 v03586 於 2015-12-19 06:32 PM 編輯

由於排列方式沒有規則性
但可以看得出來區塊 不知道如何將錄製的巨集如何寫迴圈


我有一個檔案執行產出資訊
但我是用錄製的..因為形式上沒有一致, 不知道如何寫迴圈
想請問大大此程式碼如何寫成迴圈?



來源檔案

我有給他反色來做說明 比較清楚!!!
Q1.黃色與藍色交錯部分是我要的資訊
      紫色部分則是開頭FLA 的加總,這種加總也不需要,(以下以此類推) 如果要判斷統一的規則,
      大概就是PKG可以判斷PKG只要有『*』幾乘幾 , 就納入要抓取的
     可否有一個功能就是判斷不要抓取的PKG?
Q2.能否再加入判斷ACC的總Total只要是0 就不要顯示
Q3.如何寫成迴圈, 因為仔細看資料模式不固定不知道如何判斷
Q4. 如何不打開參考來源的情況下跑出結果?
Q5. 能否執行結果利用顏色交錯來分辨 如下圖



檔案內有錄製的結果  請各路高手幫忙解答@@
顏色反底色是方便說明, 實際檔案都是沒有底色
參考來源格式都是固定  只是有些班沒有作業就不會有Output資料




錄製的程式碼



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

jasonlin7 發表於 2015-12-16 09:11 AM

說穿了,你錄製的動作包含:
1.保留想要的行'WG0, WGP, WGH, WS0, VS0, SA0, SA1, RA0, RA1, DA0, DA1, DA2,    DA3, DA4, DA5, DA6, DA7, CA0, CA1
2.在最右邊的行給予加總的公式
3.把想要的項目從PCOput_PKG_FMC_Upd__112015085625.xls複製到Output.xls
最主要發生重複的片段在於3.,要想辦法把它寫成一個副程式,給定可以控制的參數(在參考來源文件的複製儲存格範圍、複製目標文件的儲存格位置這2個參數),然後寫入For loop迴圈重複執行此副程式。
然而需要判斷PKG是否含有*符號,再決定是否要執行3.,這是條件判斷式,可在3.加入IF達成。
需要判斷ACC是否加總全0,再決定是否執行3.,這也是條件判斷式,可在3.加入用IF達成。
需要判斷是否還有想拿掉的PKG,同樣也是條件判斷式,可已事先輸入在Output.xls的Main的某一儲存格中,由程式讀取,再在3.加入IF達成。

Q1~Q3的問題已經回答。
Q4的問題,小弟還是必須讓程式開啟參考來源文件,只是最後可以自動關閉。
Q5的交替套色問題,小弟也可以在3.加入IF判斷達成,奇數次複製的項目套淺黃色,偶數次複製的套淺紫色。
小弟的程式快寫好了,請耐心等待吧!
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

v03586 發表於 2015-12-16 08:24 PM

jasonlin7 發表於 2015-12-16 09:11 AM static/image/common/back.gif
說穿了,你錄製的動作包含:
1.保留想要的行'WG0, WGP, WGH, WS0, VS0, SA0, SA1, RA0, RA1, DA0, DA1, DA2, ...

ANS 1 : 對阿~因為我想不到相對位置的判斷如何寫...如圖所舉利 不知道如何去抓取黃色框框對應的資料....

   所以在錄製的時候只好先用刪除不必要的欄位....在用複製貼上的方式..結果就是資料太多...狂切換複製貼上....電腦爛一點的跑到當機

ANS 2  : 最後一欄加總是方便知道 ~可以算出 各班的產出!!!

ANS 3 : 如果可以加入不想要加入的PKG可以利用Main資料表上輸入功能也不錯耶!!!這個倒沒想到!!
            會寫成迴圈是因為這份產出報表是上個月的...產出報表每天都會updata....有些PKG不一定1st/2nd/3rd有產出資料...所以他的上下欄變動沒有規律...我才頭痛...有些班有作業才有show出資料!!!!如圖舉利

就是這樣照成欄位上有的三欄有的兩欄甚至有的一欄.....沒規則可循.....

感謝大大的support !!



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

jasonlin7 發表於 2015-12-16 09:35 PM

但是還是有一個規則,那個規則就是:
只要是同一項的,不論是兩欄或三欄,在B那行都會出現連續的文字(包括1ST,2ND,ACC...),不會有空白出現,不同的項目之間絕對會有空白區隔,只要這個規則不打破,那就有辦法自動化複製整項。

jasonlin7 發表於 2015-12-17 01:52 AM

已經完成了,請測試功能是否滿足需求~

<br><br><br><br><br><div></div>

v03586 發表於 2015-12-17 09:13 PM

本帖最後由 v03586 於 2015-12-18 12:00 AM 編輯

jasonlin7 發表於 2015-12-17 01:52 AM static/image/common/back.gif
已經完成了,請測試功能是否滿足需求~
感謝大大的幫忙!!!
可否在做些維修改呢?
目前WG0~VS0 也不保留了  只保留SA0~CA1  <已自行修改完成>
加總部分好像跑掉 不知道怎麼拉回去


    '保留想要的行(columns)
    'myArr = Array(SA0, SA1, RA0, RA1, DA0, DA1, DA2, DA3, DA4, DA5, DA6, DA7, CA0, CA1)
    With mySh02
        .Columns("C:M").Delete Shift:=xlToLeft
        .Columns("I:K").Delete Shift:=xlToLeft
        .Columns("K:O").Delete Shift:=xlToLeft
        .Columns("M:P").Delete Shift:=xlToLeft
        .Columns("Q:BZ").Delete Shift:=xlToLeft
    End With我以試著修改成下列狀況 , 但一樣沒改變, 請問要修改哪邊呢?
    With mySh02
        .Range(myColumnEnd & "6").FormulaR1C1 = "=SUM(RC[-14]:RC[-1])"  ' 修改成-14
        .Range(myColumnEnd & "6").AutoFill Destination:=Range(myColumnEnd & "6:" & myColumnEnd & myRowEnd), Type:=xlFillDefault
    End With
   

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

jasonlin7 發表於 2015-12-18 12:04 AM

Output(v2).xlsm,若有問題請反應

jasonlin7 發表於 2015-12-18 12:08 AM

"V"要改成"Q",因為最末行變了
你可以嘗試比對兩份版本不同的地方

v03586 發表於 2015-12-18 12:30 AM

jasonlin7 發表於 2015-12-18 12:08 AM static/image/common/back.gif
"V"要改成"Q",因為最末行變了
你可以嘗試比對兩份版本不同的地方

感謝大大的V2版~明天去公司會RUN一下成果~另想請問一下我自行改了 也將結果改成Q了!!
只是顏色範圍沒有跟著內縮到Q欄  請問這個是改哪裡程式碼呢??
雖然大大V2版有修正~還是想了解一下...!!有勞大大解說...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

jasonlin7 發表於 2015-12-18 12:40 AM

這是因為程式比較下面的某一行,我沒有用myColumnEnd變數取代"V",
我在v2版修正時發現這個問題,
你可以搜尋Main中CopyDesireItemTomySh01這個函數,
這函數裡面的V已經被改過了~

我用變數取代的目的是為了使日後修改方便,
只需要修正少數的程式碼區塊。<br><br><br><br><br><div></div>

jasonlin7 發表於 2015-12-18 12:46 AM

副程式CopyDesireItemTomySh01會處理重複複製的問題,
也會處理交替上底色的問題,
是這個程式中最核心的部分,
所以當我給這副程式的引數永遠使用V的時候,
程式永遠就會複製到V那行,
也永遠會上底色到V那行。

jasonlin7 發表於 2015-12-18 01:09 AM

當你更正保留行時,記得更正刪除行的那段程式,並更正myColumnEnd;
當你參考來源的資料龐大(增加很多PKG列數),記得更正myRowEnd,目前資料能夠辨識的範圍只有到第536列

v03586 發表於 2015-12-19 06:31 PM

jasonlin7 發表於 2015-12-18 01:09 AM static/image/common/back.gif
當你更正保留行時,記得更正刪除行的那段程式,並更正myColumnEnd;
當你參考來源的資料龐大(增加很多PKG列 ...

感謝J大 !! 第二階段 Safe ...老闆沒講什麼話!!! 感謝大大的support  ,  thanks
頁: [1]