1、xmlhttp/winhttp法:
用xmlhttp/winhttp模拟向服务器发送请求,接收服务器返回的数据。
优点:效率高,基本无兼容性问题。
缺点:需要借助如fiddler的工具来模拟http请求。
2、IE/webbrowser法:
创建IE控件或webbrowser控件,结合htmlfile对象的方法和属性,模拟浏览器 *** 作,获取浏览器页面的数据。
优点:这个方法可以模拟大部分的浏览器 *** 作。所见即所得,浏览器能看到的数据就能用代码获取。
缺点:各种d窗相当烦人,兼容性也确实是个很伤脑筋的问题。上传文件在IE里根本无法实现。
3、QueryTables法:
因为它是excel自带,所以勉强也算是一种方法。其实此法和xmlhttp类似,也是GET或POST方式发送请求,然后得到服务器的response返回到单元格内。
优点:excel自带,可以通过录制宏得到代码,处理table很方便
。代码简短,适合快速获取一些存在于源代码的table里的数据。
缺点:无法模拟referer等发包头
也可以利用采集工具进行采集网页端的数据,无需写代码。
用代码实现自动化,界面就是一个按钮,点一下就完成了工资表的计算,或者自动生成工资条等。
这就是 *** 作界面。
Private Sub CommandButton3_Click() '检查填充
Dim skUArr(1 To 1000, 1 To 3)
Dim skUGs As Integer
Dim hH As Integer
Dim zlHH As Integer
Cells.Find(What:="Weight of box", After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
zlHH = ActiveCell.Row '重量所在行号
skmGs = 0
hH = 5
Do While Trim(Cells(hH, 1).Text) <>""
skUGs = skUGs + 1
skUArr(skUGs, 1) = Trim(Cells(hH, 1).Text)
skUArr(skUGs, 2) = Trim(Cells(hH, 4).Text)
skUArr(skUGs, 3) = Cells(hH, 10).Value
hH = hH + 1
Loop
Dim fName As String
Dim SBook As Workbook
Call SelectFile(fName)
Set SBook = Workbooks.Open(fName)
Dim M_sku As String, M_fnSku As String, M_qty As Integer
With SBook.Sheets(1)
For I = 1 To skUGs
M_sku = Trim(.Cells(5 + I - 1, 1).Text)
M_fnSku = Trim(.Cells(5 + I - 1, 4).Text)
M_qty = .Cells(5 + I - 1, 9).Value
If skUArr(I, 1) <>M_sku Then
MsgBox ("第" &I &"条记录的SKU不一致!")
Exit Sub
End If
If skUArr(I, 2) <>M_fnSku Then
MsgBox ("第" &I &"条记录的FNSKU不一致!")
Exit Sub
End If
If skUArr(I, 3) <>M_qty Then
MsgBox ("第" &I &"条记录的QTY不一致!")
Exit Sub
End If
Next I
End With
Dim qtyArr() As Integer
Dim boxGs As Integer
Dim boxArr()
With ThisWorkbook.Sheets(1)
boxGs = .Cells(4, 200).End(xlToLeft).Column
ReDim qtyArr(1 To skUGs, 1 To boxGs)
ReDim boxArr(1 To 4, 1 To boxGs)
'读取数量
For I = 1 To skUGs
For J = 1 To boxGs
qtyArr(I, J) = .Cells(5 + I - 1, 12 + J - 1).Value
Next J
Next I
'读取box
For I = 1 To 4
For J = 1 To boxGs
boxArr(I, J) = .Cells(zlHH + I - 1, 12 + J - 1).Value
Next J
Next I
End With
'填充
With SBook.Sheets(1)
'.Cells(5, 12).Resize(skUGs, boxGs) = qtyArr
'.Cells(zlHH, 12).Resize(4, boxGs) = boxArr
For I = 1 To skUGs
For J = 1 To boxGs
If qtyArr(I, J) >0 Then
.Cells(5 + I - 1, 12 + J - 1) = qtyArr(I, J)
End If
Next J
Next I
For I = 1 To 4
For J = 1 To boxGs
.Cells(zlHH + I - 1, 12 + J - 1) = boxArr(I, J)
Next J
Next I
End With
SBook.Save
MsgBox ("检查结果OK,填充完成!")
End Sub
这是其中一个按钮的代码,供参考。
Sub 在有密码的工作表执行代码()
Sheets("1").Unprotect Password:=123 '假定表名为“1”,密码为“123” 打开工作表
Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True '隐藏C列空值行
Sheets("1").Protect Password:=123 '重新用密码保护工作表
End Sub
或
Sub 解除全部工作表保护()
Dim n As Integer
For n = 1 To Sheets.Count
Sheets(n).Unprotect
Next n
End Sub
就OK了。
补充:Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic 脚本。该语言于1993年由微软公司开发的的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),实际上VBA是寄生于VB应用程序的版本。微软在1994年发行的Excel5.0版本中,即具备了VBA的宏功能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)