浅习VBA数据上传功能

用户需求用Excel宏直接上传其中的数据导数据库中,于是我花了一个礼拜的时间对VBA的基础知识进行了解。当然只是关注于此次需求相关的部分,所以只能算是浅习(粗浅的学习)。


ExpandedBlockStart.gif 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

宏里面的2维数组,循环体结构与其他编程语言区别不大。需要说明的是这里用的SHDocVw.InternetExplorer对象,需要在vba工程中加入Microsoft Internet Controls这个引用。另外在使用VBA访问已打开的网页的dom的时候,使用的是document.all数组,这里的数据下标使用的是控件的ID(我把属性中的idname设置成一样的值,如.net环境中的服务器端控件使用的ID一样)。

不过,代码中也存在一个较大的问题点。就是使用 LogonForm 窗体进行身份验证的时候,我原以为可以通过以下代码
ExpandedBlockStart.gif 身份验证代码
Private   Sub  btnLogon_Click()
    
Dim  name
    
Dim  pass
    name 
=  txt_name.Text
    pass 
=  txt_pass.Text
    
Set  objhttp  =   CreateObject ( " MSXML2.ServerXMLHTTP " )
    
Dim  url
    
Dim  data
    Range(
" Z100 " ).Value  =   ""          ’指定的单元格,用于存放身份验证结果的信息。
    url 
=   " *******************.aspx "   '  需要完整的URL,隐去实现细节。
    objhttp.Open  " POST " , url,  False " 域用户名 " " 域密码 "   ' 域用户、密码是此过程的可选参数。
    ' objhttp.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
    objhttp.setRequestHeader  " Content-Type " " application/x-www-form-urlencoded "
    objhttp.send (
" name= "   &  name  &   " &pass= "   &  pass)
    
If  objhttp.readyState  =   4   Then
        data 
=  objhttp.responseText
        
' MsgBox (data)
     End   If
    
    
If  data  =   1   Then
        Range(
" Z100 " ).Value  =  data
        txt_name.Text 
=   ""
        txt_pass.Text 
=   ""
        LoginForm.Hide
    
Else
        
MsgBox  ( " 您没有上传数据的权限。 " )
    
End   If
End Sub

 

访问服务器中的页面,并注册一个Session对象,但当接受excel数据的网页进行Session验证的时候,并没有找到这个Session

这让开发的结果显的不完整。

后面我只能用其他方式进行身份验证

转载于:https://www.cnblogs.com/rain64531264/archive/2010/04/14/1712254.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值