promotion image of download ymail app
Promoted
pp 發問時間: 電腦與網際網路軟體 · 9 年前

如何判別正確sheet名稱做自動篩選

大大我有一個問題想請教:

續上次發問,我想做4個按鈕

1.在這3個sheet內尋找出正確的sheet-->sheet.name=bc1110540

2.依4個按鈕的條件自動篩選出sheet資料,並copy至新活頁簿內

不知想法是否可以做的出來,請大大幫忙!

圖片參考:http://imgcld.yimg.com/8/n/AD05141276/o/1611111401...

附件:

http://www.funp.net/174134

已更新項目:

老師大大:

     1.有幾個問題是 DataSht.UsedRange.AutoFilter Field:=56, Criteria1:=FitVal 內的Field不是固定的是參考所在位置

例如:L2-2 是BD欄所以Field:=56, H1-1是G欄所以Field:=7 ,H1-2是G所以Field:=11,L1-1是AK欄所以Field:=37,L1-2是AO欄所以Field:=41

L21-1是AZ欄所以Field:=52,L2-2是BD欄所以Field:=56

所以Field:=56可以隨著按鈕而變動嗎?

2 個已更新項目:

謝謝老師大大的指導~~

老師還請您繼續指導我,您的指導讓我慢慢的走出了第一步,我真的好想看到這一題最後可演變到什麼境界...可以嗎?

最後讓是請老師大大將您的指導,放入回答區,好讓大家學習品嚐.

感恩!!謝謝~~

3 個解答

評分
  • 9 年前
    最佳解答

    1.TEMP!I7+B9做為篩選值--> (<-10),此B9值是否手動輸入?

      若是,又與〔B9篩選值會跟著按鈕不同隨著變更〕相違,

      因這是〔程式〕給值?

    2.TEMP!G7-100做為篩選值--> (<-110)

      TEMP!E7-500做為篩選值--> (<-700)

      TEMP!C7-300做為篩選值--> (<-1250)

      -100 -500 -300 都是〔固定值〕?

      又 -110 -700 -1250 在執行後,是否填入B9 ?

    3.四個篩選作業,建議直接在本檔中預設四個工作表容納。

    2011-11-14 19:21:23 補充:

    <範例檔>第1版,先測看看:

    http://www.funp.net/857391

    2011-11-14 23:25:02 補充:

    L1-1是AK欄所以Field:=37

    L1-2是AO欄所以Field:=41

    L2-1是AZ欄所以Field:=52

    L2-2是BD欄所以Field:=56

    H1-1是G欄所以Field:=7

    H1-2是G所以Field:=11

    那下面兩個呢?

    H1-1是?欄.Field:=?

    H1-2是?欄.Field:=?

    這樣是否要變成8個工作表?一個按鈕產生2個篩選結果表?

    2011-11-14 23:28:03 補充:

    另外,要再將8個〔篩選值〕詳列如來,才能寫進程式,

    目前只有4個!

    2011-11-15 09:55:35 補充:

    修改檔已收到,測試可以了!

    真厲害!已知道加入Fieldval 變數!^ ^

    其他都是這個模式處理,以目前狀況,您已可自力完成這個檔案了!

    有問題再提出來!

    2011-11-15 10:03:52 補充:

    可將下2行刪掉

    uRow = FitSht.UsedRange.Rows.Count

    If uRow > 1 Then FitSht.Rows("2:" & uRow).Clear

    改為

    FitSht.Rows("2:65536").Clear

    使用 UsedRange 抓〔資料列數〕還是有誤差,

    還是強制全清除比較妥當!

    2011-11-15 12:54:52 補充:

    再確認一下:

    H1-1是G欄所以Field:=7

    H1-2是K所以Field:=11

    這2個〔篩選值〕是一樣,但〔篩選欄位〕不一樣,

    其篩選結果會不一樣,照說應產生2個不同的結果表,

    其他也是同樣道理,所以全部還是要有8個表!

    要不要試試預建8個表及8個按鈕去試試?

    2011-11-15 14:42:16 補充:

    <範例檔>改1版,可再參考看看:

    http://www.funp.net/983642

    2011-11-16 17:39:17 補充:

    EXCEL VBA.依〔指定條件〕將〔篩選結果〕複製至另一工作表

                            <.准提部林.>

    ---------------------------------

    範例檔功能簡介: 

    ■主要需求:

     1.程式碼先行檢測〔指定DATA工作表〕是否存在。

     2.依〔四組指定條件〕將〔篩選結果〕複製至另一工作表。

     

    ■解決方案:

     由〔四個子程式〕提供〔篩選條件〕,讓〔主程式〕執行。

     

    ■程式碼1:子程式,僅列其中之一部份。

     Sub 篩選_L1()

     Call 篩選_共用參照

     If ErrChk = 1 Then Exit Sub

     '先行檢測,遇有錯誤時,停止程式執行

     FitVal = "<" & [G7].Value - 100 '篩選值

     Set FitSht = Sheets("L1(1)") '篩選結果表

     Fieldval = [AK1].Column '篩選欄位

     Call 篩選複製結果

     End Sub

     

    ■程式碼2:先行檢測及共同參照(簡略,詳細請參考範例檔)

     Sub 篩選_共用參照()

     ErrChk = 0

     If [L5] = "" Then ErrChk = 1: Exit Sub

     '儲存格〔L5〕無工作表名稱時,跳出

     For Each DataSht In Sheets

       If DataSht.Name = [L5].Value Then Exit For

     Next

     If DataSht Is Nothing Then ErrChk = 1: Exit Sub

     '篩選目標工作表不存在時,跳出

     If DataSht.FilterMode = True Then DataSht.ShowAllData

     '先取消工作表的〔篩選模式〕,否則檢測資料列數可能錯誤

     uRow = DataSht.UsedRange.Rows.Count

     If uRow = 1 Then ErrChk = 1: Exit Sub

     '篩選目標工作表無資料時,跳出

     End Sub

     

    ■程式碼3:篩選〔主程式〕

     Sub 篩選複製結果()

     Application.ScreenUpdating = False

     FitSht.Rows("2:65536").Clear '清除原資料

     DataSht.UsedRange.AutoFilter Field:=Fieldval, Criteria1:=FitVal

     '依〔篩選條件〕執行篩選

     Set uEnd = DataSht.Range("A65536").End(xlUp)

     If uEnd.Row = 1 Then DataSht.ShowAllData: Exit Sub

     '在〔篩選狀態〕檢測資料列數,若無符合者,跳出

     DataSht.Rows("2:" & uEnd.Row).Copy FitSht.Range("A2")

     DataSht.ShowAllData

     '將〔篩選結果〕複製至指定工作表,然後恢復全表

     End Sub

     

    ■說明:

     在〔範例檔N1版〕增設了〔清除全部篩選結果表〕,

     及〔執行全部篩選〕的按鈕,可下載參考。

    ---------------------------------

    <範例檔>:

    http://www.funp.net/857391

     

    <範例檔>N1版:

    http://www.funp.net/983642

    ---------------------------------

    • Commenter avatar登入以對解答發表意見
  • 9 年前

    老師大大您好:

    1.B9是自己輸入在TEMP活頁簿內

    2.G7 , E7 , C7 是看.FRQ內所捉取出來的值做+-變化

    3.依老師的建議,應該是4個活頁表比較適當

    謝謝~~

    2011-11-15 00:57:20 補充:

    老師大大:

    例如:L2-2 是BD欄所以Field:=56,

    H1-1是G欄所以Field:=7

    H1-2是K所以Field:=11

    H2-1是V欄所以Field:=22

    H2-2是Z所以Field:=26

    L1-1是AK欄所以Field:=37

    L1-2是AO欄所以Field:=41

    L21-1是AZ欄所以Field:=52

    L2-2是BD欄所以Field:=56

    因為H1-1與H1-2篩選值是一樣的,H2-1與H2-2篩選值是一樣的....所以只有4組

    2011-11-15 01:00:43 補充:

    老師大大:我將程式修改如下不知是否順暢請指導

    Dim FitSht As Worksheet, FitVal, Fieldval

    Sub 篩選_L1()

    Set FitSht = Sheets("L1")

    FitVal = "<" & [G7].Value - 100

    Fieldval = 41

    Call 篩選複製結果

    其餘只修改對應filed值

    2011-11-15 01:03:19 補充:

    DataSht.UsedRange.AutoFilter Field:=Fieldval, Criteria1:=FitVal

    Set uEnd = DataSht.Range("A65536").End(xlUp)

    If uEnd.Row = 1 Then

    DataSht.ShowAllData

    MsgBox "無符合篩選條件的資料", 0 + 16: Exit Sub

    End If

    2011-11-15 11:10:59 補充:

    謝謝老師大大的指導~~

    老師還請您繼續指導我,您的指導讓我慢慢的走出了第一步,我真的好想看到這一題最後可演變到什麼境界...可以嗎?

    最後讓是請老師大大將您的指導,放入回答區,好讓大家學習品嚐.

    感恩!!謝謝~~

    2011-11-16 04:04:39 補充:

    老師大大sorry剛剛才看到您的回覆..因為我最近上夜班所以沒看到。

    老師大大您真是厲害知道我想了整晚想要做您說的功能,也是因為您的啓發讓我想要做您新增的2項功能

    1,全部清除篩選活頁簿

    2.全部執行(H1~L2)

    還有其它功能,我會再努力集點(還有要整理一下要如何敘述,因為之後會想要有統計功能),希望能得到老師大大您的指點...

    最後還是感謝您..感恩!

    別忘了請老師將回答移至回答區~~感恩!!

    • Commenter avatar登入以對解答發表意見
  • Evan
    Lv 5
    9 年前

    〆版大您這題應由<.准提部林.>大大,回答才有聯貫性吧!

    http://tw.knowledge.yahoo.com/my/my?show=AB0710162...

    ~ ~ ~ 我是路過的 ~ ~ ~ 來亂的 ~.~.~ 快跑!!

    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。