用户需求用Excel宏直接上传其中的数据导数据库中,于是我花了一个礼拜的时间对VBA的基础知识进行了解。当然只是关注于此次需求相关的部分,所以只能算是浅习(粗浅的学习)。
Sub UpLoadData()
IsLogon = False
Dim DataTable(59, 5) As String
Dim WB As SHDocVw.InternetExplorer
LoginForm.Show (1) '在上传数据时,需要进行身份验证
If Range("Z100").Value = "1" Then '在登录窗口函数中设置一个特殊的单元格的值来判定身份是否正确。
IsLogon = True
End If
If IsLogon = True Then
Set WB = New SHDocVw.InternetExplorer
WB.Visible = True
WB.navigate "*********************.aspx" '需要完整URL,*号是为了隐去一些细节。
loading = True 'IE浏览器网页未显示完全时不进行任何操作,在For循环中用while ...DoEvents...Wend会出现预料之外的结果。
While loading
If (Not WB.Busy) And WB.readyState = READYSTATE_COMPLETE Then
loading = False
End If
Wend
'MsgBox (Range(Chr(69) & "" & 4))
'建立映射1列为E,2F,3G,4H
For i = 0 To 4
For j = 0 To 59
If Application.WorksheetFunction.IsNumber(Range(Chr(69 + i) & "" & (j + 4)).Value) Then
DataTable(j, i) = Range(Chr(69 + i) & "" & (j + 4)).Value
Else
DataTable(j, i) = 0
End If
Next j
Next i
On Error Resume Next
For i = 0 To 3
For j = 0 To 57
'MsgBox (DataTable(j, i))
WB.document.all("c" & (j + 1) & (i + 1)).Value = DataTable(j, i) '访问打开的页面中的DOM元素并赋值。
Next j
Next i
End If
'以下获取页面控件对象txt_no1_bl
'WB.Application.Quit
'Application.ScreenUpdating = True
End Sub
IsLogon = False
Dim DataTable(59, 5) As String
Dim WB As SHDocVw.InternetExplorer
LoginForm.Show (1) '在上传数据时,需要进行身份验证
If Range("Z100").Value = "1" Then '在登录窗口函数中设置一个特殊的单元格的值来判定身份是否正确。
IsLogon = True
End If
If IsLogon = True Then
Set WB = New SHDocVw.InternetExplorer
WB.Visible = True
WB.navigate "*********************.aspx" '需要完整URL,*号是为了隐去一些细节。
loading = True 'IE浏览器网页未显示完全时不进行任何操作,在For循环中用while ...DoEvents...Wend会出现预料之外的结果。
While loading
If (Not WB.Busy) And WB.readyState = READYSTATE_COMPLETE Then
loading = False
End If
Wend
'MsgBox (Range(Chr(69) & "" & 4))
'建立映射1列为E,2F,3G,4H
For i = 0 To 4
For j = 0 To 59
If Application.WorksheetFunction.IsNumber(Range(Chr(69 + i) & "" & (j + 4)).Value) Then
DataTable(j, i) = Range(Chr(69 + i) & "" & (j + 4)).Value
Else
DataTable(j, i) = 0
End If
Next j
Next i
On Error Resume Next
For i = 0 To 3
For j = 0 To 57
'MsgBox (DataTable(j, i))
WB.document.all("c" & (j + 1) & (i + 1)).Value = DataTable(j, i) '访问打开的页面中的DOM元素并赋值。
Next j
Next i
End If
'以下获取页面控件对象txt_no1_bl
'WB.Application.Quit
'Application.ScreenUpdating = True
End Sub