|
Private Sub CommandButton2_Click()
Dim x001(5) As String, i01 As Long
Dim cnn As New ADODB.Connection, rss01 As New ADODB.Recordset
x001(1) = Range("J3") '附值给变量,以便后面使用
x001(2) = Range("K3")
If x001(1) = "" Then
x001(1) = "2000-01-01" '这里当起始时间为空时,我们就认为是时间为很前,当然也可以1900年,或者是1000年前..呵...
ElseIf IsDate(x001(1)) = False Then '这里是个对日期的检测,如果有的人输入成了2010-2-31时怎么办,哪来的这个日期啊
MsgBox "起始日期有误!", vbExclamation
Range("J3").Select
Exit Sub
End If
If x001(2) = "" Then
x001(2) = "2099-12-31" '这里当截止时间也是同理
ElseIf IsDate(x001(2)) = False Then '这里是个对日期的检测,如果有的人输入成了2010-2-31时怎么办,哪来的这个日期啊
MsgBox "截止日期有误!", vbExclamation
Range("K3").Select
Exit Sub
End If
'时间完成,现在开始来提取个股数据了
x001(3) = ""
i01 = 3 '开始的行数
Do Until Range("L" & i01) = "" '从L列第三行开始,提取个股号,直到为空时停止提取,所以在中间不要有空,这样不使用For ..next 是为了增加效率,
x001(3) = x001(3) & "," & Range("L" & i01)
i01 = i01 + 1
Loop
'这里的循环,取得到的一条字符串格式是这样的: 股票代码01, 股票代码02, 股票代码03, 股票代码04
'每个股票号都用逗号隔开
'然后再用到查询SQL语句中,使用InStr函数,就能判断股票代号是否在条件之中即可
If x001(3) = "" Then '当没有个股号时,我们就以日期进行筛选查询
x001(0) = "Select 数据日期, 股票代码,开盘价,最高价,最低价,收盘价,成交量,成交金额 from RCSJ where 数据日期 between #" & x001(1) & "# and #" & x001(2) & "#;"
Else
'有个股时
x001(0) = "Select 数据日期, 股票代码,开盘价,最高价,最低价,收盘价,成交量,成交金额 from RCSJ where (数据日期 between #" & x001(1) & "# and #" & x001(2) & "#) And InStr('" & x001(3) & "',股票代码)>0;"
End If
'现在我们已取得了条件SQL语句 x001(0)
'接下来就是去取得记录集
cnn.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.Path & "\sjk.mdb" '这句延用,如查这个数据库连接总是要用的话,你可以在ThisWorkbook里在EXCEL打开时就加载上,以后都设用即可
Set rss01 = cnn.Execute(x001(0)) '取得数据集
Range("B2:I65536").Clear '清空查询记录
Range("B2").CopyFromRecordset rss01
rss01.Close
cnn.Close
Set rss01 = Nothing
Set cnn = Nothing
End Sub
'=========================== |
|