每天抓數據研究,遇到一個問題,搜尋與試了幾天,都無法解決
有兩個問題
問題一
兩個檔案:
月資料: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
想請大神幫幫忙指導一下,謝謝
第二個問題,
跟屬性有關,只能設為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
挖啊!!太好了
本來都心死了,有上來看真是太好了
可以用,完全可以用,真的感謝
不用逐一套用了,開心
對VBA的屬性完全0了解,謝謝大大講解,學到怎麼查看了
看了又試了一下,這三種寫法都是不行的
ActiveSheet.Columns(16).AutoFilter
ActiveSheet.Columns("P:Q").AutoFilter
ActiveSheet.Columns("P").AutoFilter
有點摸不懂
columns不行做篩選唷~你看一般篩選都是橫列的,只是看你要哪一列,沒有直向的篩選
第一題,你試試下面這樣能不能運作
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 <--改這個
'就是上面這行完全沒作用
歐歐歐歐!
改了以後,完全可以,瞬間程式碼從73行(持續增長)變成以後都只要這20行
大大我崇拜你
非常感謝大大幫忙
開心到用F8邊看邊跑好幾回
沒問題, 重要的是你知道為什麼要這樣寫~
Misty大大,
小的理解是
SheetName = Sheets(i).Name
'把當前工作表的名字提取出來,暫存到變數
Sheets(SheetName).Activate
'再把變數塞到工作表名稱叫出來
逐行執行結果,能看懂一些,但在卡關時,對於程式碼少了什麼,腦袋是空白的
會這樣修改主要是因為工作表順序是按建立的時間排序的,所以除非兩份檔案中你建的時間都一樣,不然就算是sheet名稱相同順序也應該是不同的,這樣就必需先取得要使用的工作表名稱給另一份檔案去找相同名稱的工作表運作後面的程式,不然用順序的話,不是找錯就是找不到
阿,小的不才
有理解變數i定義為數字,依序數工作表
Dim i As Integer
For i = 1 To Worksheets.Count
i填入順利叫出來後,腦袋就自動代換=當前工作表
Sheets(i).Activate
Misty大大講解後,才意會到,我腦袋轉了,但電腦沒轉
非常感謝