|
C06雪舞子 交作业
作业一- Sub 按钮1_Click()
- Dim rgSource As Range
- Dim rgDest As Range
- Dim bGroupCount
-
- On Error Resume Next
- Set rgSource = Application.InputBox("请选择需要分组的单元格区域", "选择", Type:=8)
- '通过对话框选择要分组的单元格区域
- If rgSource Is Nothing Then
- MsgBox "没有选择要分组的单元格区域"
- Exit Sub
- End If
- Set rgDest = Application.InputBox("请选择分组数据写入的位置", "选择", Type:=8)
- '通过对话框选择分组后的数据需写入的单元格
- If rgDest Is Nothing Then
- MsgBox "没有选择要分组的单元格区域"
- Exit Sub
- End If
- bGroupCount = Application.InputBox("请输入要分成的行数(>=1)", "选择", Default:=2, Type:=2)
- '通过对话框输入数据要分成的行数
- If Val(bGroupCount) < 1 Then
- '检测行数的合法性
- MsgBox prompt:="输入的行数不对" & String(2, vbCrLf) & "没有点击确定", Title:="亲,出错了"
- Exit Sub
- End If
- Call DataPacket(rgSource, rgDest, Val(bGroupCount))
- '调用分组过程
- End Sub
- Sub DataPacket(rgSource As Range, rgDest As Range, bGroupCount As Byte)
- 'rgSource:源单元格
- 'rgdest:写入单元格
- '数据分组的行数
- '-----------过程的声明不得修改--------------
- Dim arr, brr(), ar, h%, k%, cl%, rw%, i%, j%
- If rgSource.Count = 1 Then rgDest = rgSource.Value: Exit Sub '处理单个格格
- arr = rgSource '建立源数组
- k = UBound(arr) * UBound(arr, 2)
- h = Val(bGroupCount)
- cl = Int(k / h) - (k / h > Int(k / h)) '计算目标数组列
- rw = Int(k / cl) - (k / cl > Int(k / cl)) '计算目标数组行
- ReDim brr(1 To rw, 1 To cl) '重新定义目标数组
- i = 1
- For Each ar In arr
- j = j + 1
- brr(i, j) = ar '源值赋目标数组
- If j = cl Then j = 0: i = i + 1
- Next
- rgDest.Resize(rw, cl) = brr '写入单元格
- End Sub
复制代码 作业二- Sub 查询天气()
- Dim strDate$
- Dim strUrl$
- Dim strText$
- Dim strFind$
- Dim i As Long
-
- strUrl = "http://lishi.tianqi.com/wuhan/"
- '查询的网址
- strDate = Application.InputBox("请输入要查询的年月格式为YYYYMM" & vbCr & vbCr & "例如:201102" & vbCr & vbCr, , Format(DateAdd("m", -1, Now), "yyyymm"), , , , , 2)
- '查询的年月,输入格式为YYYYMM
- Dim httpRequest As Object
- Set httpRequest = CreateObject("Msxml2.XMLHTTP.3.0")
- '创建XMLHTTP对象,获取网页数据
- '网页数据存储在变量 strText 中
- With httpRequest
- .Open "GET", strUrl & strDate & ".html", False
- .send
- strText = .responseText
- End With
- strFind = "武汉" & Left(strDate, 4) & "年" & Val(Right(strDate, 2)) & "月份天气详情"
- '检测输入的日期是否合格
- i = InStr(strText, strFind)
- If i = 0 Then
- MsgBox "查询月份不对"
- Exit Sub
- End If
- '-------------------------代码需完成部分---------------------------
- '上面的代码和声明部分不得修改
- '代码完成部分所需要的变量声明均写在此行下方即可,方便学委评分
-
- Dim brr(1 To 32, 1 To 6), strfx$, reg As Object, mat, m, k%, l%
- Set reg = CreateObject("vbscript.regexp") '建立正则法则
- strfx = Left(Split(strText, "月份天气详情</h3></div>")(1), InStr(Split(strText, "月份天气详情</h3></div>")(1), "/div>"))
- '截取天气数据(以"月份天气详情</h3></div>"分界,截取split第二段 开始至"/div>"一段数据)
- With reg
- .Global = True
- .Pattern = "[一-龢\d]+[一-龢-\d+~]*(?=</)" '正则表达式
- k = 1
- Set mat = .Execute(strfx) '符合正则表达式的值全部赋给mat
- For Each m In mat '分别取出mat值赋给m
- l = l + 1
- brr(k, l) = m '天气数据赋给结果数组(32行6列)
- If l = 6 Then l = 0: k = k + 1
- Next
- Sheet4.[a2].CurrentRegion.ClearContents
- Sheet4.[a1] = strFind '写标题
- Sheet4.[a2].Resize(32, 6) = brr '数组数据写入工作表
- End With
- '------------------------------------------------------------------
- MsgBox "提取完成"
- End Sub
复制代码- Sub 查询天气()
- Dim strDate$
- Dim strUrl$
- Dim strText$
- Dim strFind$
- Dim i As Long
-
- strUrl = "http://lishi.tianqi.com/wuhan/"
- '查询的网址
- strDate = Application.InputBox("请输入要查询的年月格式为YYYYMM" & vbCr & vbCr & "例如:201102" & vbCr & vbCr, , Format(DateAdd("m", -1, Now), "yyyymm"), , , , , 2)
- '查询的年月,输入格式为YYYYMM
- Dim httpRequest As Object
- Set httpRequest = CreateObject("Msxml2.XMLHTTP.3.0")
- '创建XMLHTTP对象,获取网页数据
- '网页数据存储在变量 strText 中
- With httpRequest
- .Open "GET", strUrl & strDate & ".html", False
- .send
- strText = .responseText
- End With
- strFind = "武汉" & Left(strDate, 4) & "年" & Val(Right(strDate, 2)) & "月份天气详情"
- '检测输入的日期是否合格
- i = InStr(strText, strFind)
- If i = 0 Then
- MsgBox "查询月份不对"
- Exit Sub
- End If
- '-------------------------代码需完成部分---------------------------
- '上面的代码和声明部分不得修改
- '代码完成部分所需要的变量声明均写在此行下方即可,方便学委评分
-
- Dim arr, crr, brr(0 To 31, 0 To 5), strfx$, m%, k%, l%
- strfx = Left(Split(strText, "月份天气详情</h3></div>")(1), InStr(Split(strText, "月份天气详情</h3></div>")(1), "/div>"))
- '截取天气数据(以"月份天气详情</h3></div>"分界,截取split第二段 开始至"/div>"一段数据)
- arr = Split(strfx, "</ul>")
- '按天数据分段
- For k = 0 To UBound(arr) - 1
- crr = Split(arr(k), "</li>")
- '天气类别数据分段
- For l = 0 To UBound(crr) - 1
- m = InStr(crr(l), "<li>")
- '提取数据
- If l = 0 And Right(crr(l), 1) = ">" Then m = Len(crr(l)) - 17
- '日期数据处理
- brr(k, l) = Mid(crr(l), m + 4, 10)
- '提取后的天气数据存入数组 brr()
- Next
- Next
- Sheet4.[a2].CurrentRegion.ClearContents
- Sheet4.[a1] = strFind '写标题
- Sheet4.[a2].Resize(32, 6) = brr '数组数据写入工作表
- '------------------------------------------------------------------
- MsgBox "提取完成"
- End Sub
复制代码 |
评分
-
查看全部评分
|