標題:
[發問]
指定的時間插入相關數據
[打印本頁]
作者:
cdkee
時間:
2014-4-7 14:23
標題:
指定的時間插入相關數據
請教各大大/版大,要在指定的時間插入相關數據(包括取出最大及最小數值),VBA應如何寫,詳細見附件內容,謝謝!
[attach]17950[/attach]
作者:
cdkee
時間:
2014-4-8 16:57
回復
1#
cdkee
嘗試了一些例子,只做到按時間插入部份資料
[attach]17956[/attach]
再請教各大大,這裡找到"擷取最高最低"例子 和 "找尋指定時間插入相關資料"例子,應該如何結合才能做到要求,謝謝!
'擷取最高最低
Private Sub Worksheet_Calculate()
Dim Rng As Range
Static Msg As Boolean '以 Static 陳述式宣告的變數,在程式執行期間,會一直保留內容。
If Weekday(Date, vbMonday) > 5 Or Time < #5:46:00 PM# Or Time > #11:00:00 PM# Then Exit Sub '非營業日 或 非營業時間
If Msg = False Then
清除舊資料
Msg = True
End If
With Cells(Rows.Count, "C").End(xlUp)
If .Row = 7 Then
Set Rng = .Offset(1)
Else
Set Rng = .Cells
End If
End With
If Rng = "" Or Rng.Text <> Format([b5], "hh:mm") Then
If Rng <> "" Then Set Rng = Rng.Offset(1)
Rng = Format([b5], "hh:mm")
Rng(1, 2) = [B6].Text
Rng(1, 3) = [B6].Text
ElseIf Rng.Text = Format([b5], "hh:mm") Then
If [B6] > Rng(1, 2) Then Rng(1, 2) = [B6].Text
If [B6] < Rng(1, 3) Then Rng(1, 3) = [B6].Text
End If
End Sub
複製代碼
'找尋定時間插入相關資料
Sub 資料輸入()
Dim E As Range
'''''''''''''''''''''''''''''''''''''
'Dim Ar() 'Ar陣列 -> 存入你要的數據
'Ar = Sheets("Table").Range("B2:D2").Value
'''''''''''''''''''''''''''''''''''''
Dim Ar(1 To 5) 'Ar陣列 -> 存入你要的數據
Ar(1) = [Table!B2]
Ar(2) = [Table!C2]
Ar(3) = [Table!D2]
Ar(4) = [Table!E2]
Ar(5) = [Table!A2]
If Minute(Time) Mod 1 = 0 Then
Set E = Sheets("1分K").Range("A:A").Find(TimeSerial(Hour(Time), Minute(Time), 0))
E.Offset(0, 1).Resize(1, UBound(Ar)).Value = Ar 'Minute(Time) Mod 1=0 每分鐘
ElseIf Minute(Time) Mod 1 = 1 Then
E.Offset(0, 1).Resize(1, UBound(Ar)).Value = Ar
End If
'If Minute(Time) Mod 5 = 0 Then
' Set E = Sheets("5分K").Range("A:A").Find(TimeSerial(Hour(Time), Minute(Time), 0))
' E.Offset(0, 1).Resize(1, UBound(Ar)).Value = Ar 'Minute(Time) Mod 5=0 每5分鐘
'End If
'If Minute(Time) Mod 15 = 0 Then
' Set E = Sheets("15分K").Range("A:A").Find(TimeSerial(Hour(Time), Minute(Time), 0))
' E.Offset(0, 1).Resize(1, UBound(Ar)).Value = Ar 'Minute(Time) Mod 15=0 每15分鐘
'End If
If Time <= #4:15:00 PM# Then Application.OnTime TimeValue(Format(Time, "hh:MM:00")) + #12:01:00 AM#, "ThisWorkbook.資料輸入"
' *** #4:15:00 PM# 之前時間執行程式 ->資料輸入
Set E = Nothing '
End Sub
複製代碼
作者:
cdkee
時間:
2014-4-10 11:58
版上再找到GBKEE版大建議的例子(#10),加上以上兩個例子,再請大大指教如何改寫,感謝!
http://forum.twbts.com/viewthread.php?tid=7534&from=favorites
'[策略記錄] 工作表的程式碼(重算事件 )
Private Sub Worksheet_Calculate()
Static Msg As Boolean '用以判定是否為每日第一次執行
Static Time_Calculate As Date '記錄每分鐘的時間
Static AR '陣列:記錄成交價格
If Time < #8:30:00 AM# Then Exit Sub
Application.EnableEvents = False '停止物件能觸發事件(Worksheet_Calculate)
If Msg = False Then
Time_Calculate = TimeSerial(Hour(Time), Minute(Time), 0) '每分鐘的時間
Range("A12").CurrentRegion.Offset(1) = "" '清理昨日資料
ReDim AR(0) '重新設為一元素
End If
Msg = True
If Time >= Time_Calculate + #12:01:00 AM# Then
With IIf([A13] = "", [A13], Cells(Rows.Count, 1).End(xlUp).Offset(1))
.Cells(1, 1) = Time_Calculate '時間
.Cells(1, 2) = AR(0) '開盤價
.Cells(1, 3) = Application.Max(AR) '最高價
.Cells(1, 4) = Application.Min(AR) '最低價
.Cells(1, 5) = AR(UBound(AR)) '收盤價
End With
Time_Calculate = TimeSerial(Hour(Time), Minute(Time), 0)
ReDim AR(0)
End If
If AR(UBound(AR)) <> "" Then ReDim Preserve AR(UBound(AR) + 1) '重新再加上一元素
AR(UBound(AR)) = [f2] '記錄成交價格成交價
Application.EnableEvents = True '恢復物件能觸發事件(Worksheet_Calculate)
End Sub
複製代碼
作者:
cdkee
時間:
2014-4-10 16:44
[attach]17975[/attach]
附件已經可做到大部份要求。
再請教大大,如何做到每個記錄時段開始時,即首個秒鐘>=00,及在"B4"有改變時,才開始記錄?謝謝!
作者:
cdkee
時間:
2014-4-11 01:07
改了一些,仍然不行,請大大幫助指教,謝謝!
Option Explicit
Private Sub Worksheet_Calculate()
Dim target As Range
Set target = Sheets("Sheet2").Range("B4")
If Not Intersect(target, Sheets("Sheet2").Range("B4")) Is Nothing Then
Dim rng As Range
Static Msg As Boolean '以 Static 陳述式宣告的變數,在程式執行期間,會一直保留內容。
If Weekday(Date, vbMonday) > 5 Then Exit Sub '非營業日 或 非營業時間
If Msg = False Then
清除舊資料
Msg = True
End If
With Cells(Rows.Count, "C").End(xlUp)
If .Row = 7 Then
Set rng = .Offset(1)
Else
Set rng = .Cells
End If
End With
If rng = "" Or rng.Text <> Format(Worksheets("Sheet1").[a2], "hh:mm") Then
If rng <> "" Then Set rng = rng.Offset(1)
rng = Format(Worksheets("Sheet1").[a2], "hh:mm")
rng(1, 2) = [B6].Text '
rng(1, 3) = [B6].Text
rng(1, 4) = [B6].Text
rng(1, 5) = [B6].Text '
ElseIf rng.Text = Format(Worksheets("Sheet1").[a2], "hh:mm") Then
If [B6] > rng(1, 3) Then rng(1, 3) = [B6].Text
If [B6] < rng(1, 4) Then rng(1, 4) = [B6].Text
rng(1, 5) = [B6].Text '
End If
End Sub
Private Sub 清除舊資料()
On Error GoTo Er
If [營業日] <> Date Then '檢查 定義名稱:"營業日"的值
Me.Names.Add "營業日", Date '定義名稱:"營業日"的值為當日
If Weekday(Date, vbMonday) <= 5 Then Range([C8], [E8].End(xlDown)).Clear '營業日
End If
Exit Sub
Er: '處裡: 沒有定義名稱:"營業日"的錯誤
Me.Names.Add "營業日", Date '定義名稱:"營業日"的值為當日
Resume Next '回到錯誤的下一個程式碼:繼續執行
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)