- 帖子
- 44
- 主題
- 7
- 精華
- 0
- 積分
- 51
- 點名
- 0
- 作業系統
- XP
- 軟體版本
- XP
- 閱讀權限
- 20
- 註冊時間
- 2012-11-18
- 最後登錄
- 2022-8-6

|
17#
發表於 2013-3-9 20:26
| 只看該作者
回復 16# GBKEE
唉呀…板大
我想是我的表達方式讓你誤會成,我只要截取近1週的資料而已
其實是那個股票的資料庫,每天都會有新的資料進來,然後我執行- Option Explicit
- Sub Ex()
- Dim Ex_Path As String, Ex_File As String, Ex_Date As String, Ex_Wb As Workbook
- Dim Rng As Range, Ex_Row As Integer, i As Integer ', Ar() As String, Ex_Name As String
- Ex_Path = "C:\Documents and Settings\gkld\桌面\my kp\資料庫\上市\"
- Ex_File = Dir(Ex_Path & "A112*ALL_1.csv")
- If Ex_File = "" Then
- MsgBox "沒有 A112*ALL_1.csv"
- Exit Sub
- End If
- Application.ScreenUpdating = False
- 'Ar = Array("台泥", "亞泥", "嘉泥", "幸福", "信大", "東泥")
- For i = 1 To 7
- '** Name 是VBA所用的關鍵字串,避免使用為變數名稱.
- ' If i = 1 Then Ex_Name = "台泥"
- ' If i = 2 Then Ex_Name = "亞泥"
- ' If i = 3 Then Ex_Name = "嘉泥"
- ' If i = 4 Then Ex_Name = "環泥"
- ' If i = 5 Then Ex_Name = "幸福"
- ' If i = 6 Then Ex_Name = "信大"
- ' If i = 7 Then Ex_Name = "東泥"
-
- With Sheets(i) '依工作表索引值指定工作表
- '****工作表名稱 在活頁簿視窗排序如是依IF i=1如此順序***
- '***那就不需這些IF i=1 ...........
-
- 'With Sheets(Ex_Name) '依Ex_Name 指定工作表
- '****如在活頁簿視窗工作表名稱排序不是如此順序***
- '***那就需要這些IF i=1 ...........
-
- 'With Sheets(Ar(i - 1)) '指定定陣列中的工作表名稱
- [s][color=Red] .Range("a1:ag65536").Clear '消除每一行資料[/color][/s]
- Ex_File = Dir(Ex_Path & "A112*ALL_1.csv")
- Do While Ex_File <> ""
- Ex_Date = Replace(Ex_File, "A112", "") '消除檔名中"A112"
- Ex_Date = Replace(Ex_Date, "ALL_1.csv", "") '消除檔名中"ALL_1.csv"
- Ex_Date = DateSerial(Mid(Ex_Date, 1, 4), Mid(Ex_Date, 5, 2), Mid(Ex_Date, 7, 2)) '帶入日期
-
- Set Ex_Wb = Workbooks.Open(Ex_Path & Ex_File) '開啟 A11220070102ALL_1.csv.....
- '************************************************
- Ex_Row = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row '取得資料輸入的列號
- Set Rng = Ex_Wb.Sheets(1).Range("b:b").Find(.Name, lookat:=xlWhole)
- '.Cells(Ex_Row, "A") = Ex_Date '日期輸入 '** 記錄所有日期***
- If Not Rng Is Nothing Then
- .Cells(Ex_Row, "A") = Ex_Date '日期輸入 如移到這裡 '** 只記錄有資料的日期
- .Cells(Ex_Row, "B") = Rng.Offset(, 7)
- .Cells(Ex_Row, "e") = Rng.Offset(, 4)
- .Cells(Ex_Row, "f") = Rng.Offset(, 5)
- .Cells(Ex_Row, "g") = Rng.Offset(, 6)
- .Cells(Ex_Row, "i") = Rng.Offset(, 1)
- End If
- '************************************************
- Ex_Wb.Close False '關閉 A11220070102ALL_1.csv.....
- Ex_File = Dir '下一個"A112*ALL_1.csv"
- Loop
- End With
- Next
- Application.ScreenUpdating = True
- MsgBox "OK"
- End Sub
複製代碼 每都都會連同舊的資料一起重抓重跑,時間秏費不少
我想要的結果是之前執行後的舊資料會留著,每當我有一筆新資料進來時,就只要跑新的資料新增就好
因為我vb不好,沒法子像板大一樣,可以寫出比對資料庫裡的data,只把新進來的data抓出來,
後來剛吃晚餐時,突然想到另一個解決方式
我將新的data放進另一個新的資料夾,然後不要消除每一行的資料,即執行以下程式碼
Option Explicit
Sub Ex()
Dim Ex_Path As String, Ex_File As String, Ex_Date As String, Ex_Wb As Workbook
Dim Rng As Range, Ex_Row As Integer, i As Integer ', Ar() As String, Ex_Name As String
Ex_Path = "C:\Documents and Settings\gkld\桌面\my kp\資料庫\新資料夾\"
Ex_File = Dir(Ex_Path & "A112*ALL_1.csv")
If Ex_File = "" Then
MsgBox "沒有 A112*ALL_1.csv"
Exit Sub
End If
Application.ScreenUpdating = False
'Ar = Array("台泥", "亞泥", "嘉泥", "幸福", "信大", "東泥")
For i = 1 To 7
'** Name 是VBA所用的關鍵字串,避免使用為變數名稱.
' If i = 1 Then Ex_Name = "台泥"
' If i = 2 Then Ex_Name = "亞泥"
' If i = 3 Then Ex_Name = "嘉泥"
' If i = 4 Then Ex_Name = "環泥"
' If i = 5 Then Ex_Name = "幸福"
' If i = 6 Then Ex_Name = "信大"
' If i = 7 Then Ex_Name = "東泥"
With Sheets(i) '依工作表索引值指定工作表
'****工作表名稱 在活頁簿視窗排序如是依IF i=1如此順序***
'***那就不需這些IF i=1 ...........
'With Sheets(Ex_Name) '依Ex_Name 指定工作表
'****如在活頁簿視窗工作表名稱排序不是如此順序***
'***那就需要這些IF i=1 ...........
'With Sheets(Ar(i - 1)) '指定定陣列中的工作表名稱
.Range("a1:ag65536").Clear '消除每一行資料
Ex_File = Dir(Ex_Path & "A112*ALL_1.csv")
Do While Ex_File <> ""
Ex_Date = Replace(Ex_File, "A112", "") '消除檔名中"A112"
Ex_Date = Replace(Ex_Date, "ALL_1.csv", "") '消除檔名中"ALL_1.csv"
Ex_Date = DateSerial(Mid(Ex_Date, 1, 4), Mid(Ex_Date, 5, 2), Mid(Ex_Date, 7, 2)) '帶入日期
Set Ex_Wb = Workbooks.Open(Ex_Path & Ex_File) '開啟 A11220070102ALL_1.csv.....
'************************************************
Ex_Row = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row '取得資料輸入的列號
Set Rng = Ex_Wb.Sheets(1).Range("b:b").Find(.Name, lookat:=xlWhole)
'.Cells(Ex_Row, "A") = Ex_Date '日期輸入 '** 記錄所有日期***
If Not Rng Is Nothing Then
.Cells(Ex_Row, "A") = Ex_Date '日期輸入 如移到這裡 '** 只記錄有資料的日期
.Cells(Ex_Row, "B") = Rng.Offset(, 7)
.Cells(Ex_Row, "e") = Rng.Offset(, 4)
.Cells(Ex_Row, "f") = Rng.Offset(, 5)
.Cells(Ex_Row, "g") = Rng.Offset(, 6)
.Cells(Ex_Row, "i") = Rng.Offset(, 1)
End If
'************************************************
Ex_Wb.Close False '關閉 A11220070102ALL_1.csv.....
Ex_File = Dir '下一個"A112*ALL_1.csv"
Loop
End With
Next
Application.ScreenUpdating = True
MsgBox "OK"
End Sub
好像也可以解決
唉…只能用笨方法了 |
|