iT邦幫忙

0

VBA 如何到另一個檔案的同名稱工作表 &工作表逐一套用篩選

  • 分享至 

  • xImage

每天抓數據研究,遇到一個問題,搜尋與試了幾天,都無法解決
有兩個問題

問題一
兩個檔案:
月資料:2210個股.xlsm,固定名稱的幾個工作表
日資料:當日個股.xlsx,每天不固定的幾個工作表

想要運作:從日資料複製到月資料「同名稱的工作表」

Sub 當日數據()
Workbooks.Open Filename:="C:\輸出目錄\當日個股.xlsx"
Windows("當日個股.xlsx").Activate
Dim i As Integer
For i = 1 To Worksheets.Count
    Sheets(i).Activate
        Range("A1").Select
        ActiveCell.Offset(1, 0).Range("A1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.Copy
        Windows("2210個股.xlsm").Activate
    Sheets(i).Activate
    '就是上面這行完全沒作用
        Range("A1").Select
        Selection.End(xlDown).Select
        ActiveCell.Offset(1, 0).Range("A1").Select
        ActiveSheet.Paste
        Windows("當日個股.xlsx").Activate
Next i
End Sub

問題二
由於沒辦法選取所有工作表,一起開篩選功能
想要每個工作表都開啟篩選,只能逐一套用篩選

試了這兩個寫法都失敗

Sub Filter()
Dim i As Integer
For i = 1 To Worksheets.Count
    Worksheets(i).Activate
    If ActiveSheet.AutoFilterMode = False Then
        ActiveSheet.AutoFilterMode = True
    End If
    '把IF三列拿掉換成
    'Columns("P:Q").Select
    'Selection.AutoFilter
    '也是失敗
Next i
End Sub

想請大神幫幫忙指導一下,謝謝

skyksl066 iT邦新手 4 級 ‧ 2022-10-15 13:59:12 檢舉
別邀我來傷腦筋啊,介紹妹子可?
akissiva iT邦新手 5 級 ‧ 2022-10-25 14:14:48 檢舉
小的是魚乾一周見的人<5
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
Misty0723
iT邦新手 3 級 ‧ 2022-10-20 00:17:43
最佳解答

第二個問題,
跟屬性有關,只能設為False,無法設為True(看屬性中的註解)
https://learn.microsoft.com/zh-tw/office/vba/api/excel.worksheet.autofiltermode
你改這個寫法看看能不能符合你的需要
Sub Filter()
Dim i As Integer
For i = 1 To Worksheets.Count
Worksheets(i).Activate
If ActiveSheet.AutoFilterMode = False Then
ActiveSheet.Rows(1).AutoFilter
End If
Next i
End Sub

看更多先前的回應...收起先前的回應...
akissiva iT邦新手 5 級 ‧ 2022-10-25 14:21:50 檢舉

挖啊!!太好了
本來都心死了,有上來看真是太好了

可以用,完全可以用,真的感謝
不用逐一套用了,開心/images/emoticon/emoticon37.gif

akissiva iT邦新手 5 級 ‧ 2022-10-25 14:38:36 檢舉

對VBA的屬性完全0了解,謝謝大大講解,學到怎麼查看了

看了又試了一下,這三種寫法都是不行的

ActiveSheet.Columns(16).AutoFilter
ActiveSheet.Columns("P:Q").AutoFilter
ActiveSheet.Columns("P").AutoFilter

有點摸不懂

Misty0723 iT邦新手 3 級 ‧ 2022-10-25 21:34:39 檢舉

columns不行做篩選唷~你看一般篩選都是橫列的,只是看你要哪一列,沒有直向的篩選

Misty0723 iT邦新手 3 級 ‧ 2022-10-26 17:44:24 檢舉

第一題,你試試下面這樣能不能運作

Sheets(i).Activate
SheetName = Sheets(i).Name <--加這個
Range("A1").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Windows("2210個股.xlsm").Activate

Sheets(SheetName).Activate <--改這個
'就是上面這行完全沒作用

akissiva iT邦新手 5 級 ‧ 2022-10-27 13:57:32 檢舉

歐歐歐歐!

改了以後,完全可以,瞬間程式碼從73行(持續增長)變成以後都只要這20行

大大我崇拜你/images/emoticon/emoticon32.gif
非常感謝大大幫忙

開心到用F8邊看邊跑好幾回/images/emoticon/emoticon37.gif

Misty0723 iT邦新手 3 級 ‧ 2022-10-29 15:55:36 檢舉

沒問題, 重要的是你知道為什麼要這樣寫~

akissiva iT邦新手 5 級 ‧ 2022-11-02 17:26:46 檢舉

Misty大大,
小的理解是

SheetName = Sheets(i).Name
'把當前工作表的名字提取出來,暫存到變數

Sheets(SheetName).Activate
'再把變數塞到工作表名稱叫出來

逐行執行結果,能看懂一些,但在卡關時,對於程式碼少了什麼,腦袋是空白的

Misty0723 iT邦新手 3 級 ‧ 2022-11-02 20:57:55 檢舉

會這樣修改主要是因為工作表順序是按建立的時間排序的,所以除非兩份檔案中你建的時間都一樣,不然就算是sheet名稱相同順序也應該是不同的,這樣就必需先取得要使用的工作表名稱給另一份檔案去找相同名稱的工作表運作後面的程式,不然用順序的話,不是找錯就是找不到

akissiva iT邦新手 5 級 ‧ 2022-11-06 22:22:04 檢舉

阿,小的不才
有理解變數i定義為數字,依序數工作表

Dim i As Integer
For i = 1 To Worksheets.Count

i填入順利叫出來後,腦袋就自動代換=當前工作表

Sheets(i).Activate

Misty大大講解後,才意會到,我腦袋轉了,但電腦沒轉/images/emoticon/emoticon01.gif
非常感謝

我要發表回答

立即登入回答