Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
分享成果,隨喜正能量】修學務早,及其精專,習與性成,不異自然也。值得我們用一生去學習的,就是學習什么該做,什么不該做,在自己心中畫個圈,干了出圈的事情,傷害的是自己。。
《VBA信息獲取與處理》教程是我推出第六套教程,目前已經是第一版修訂了。這套教程定位于最高級,是學完初級,中級后的教程。這部教程給大家講解的內容有:跨應用程序信息獲得、隨機信息的利用、電子郵件的發送、VBA互聯網數據抓取、VBA延時操作,剪貼板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統測試。是非常抽象的,更具研究的價值。
教程共兩冊,八十四講。今日的內容是專題八“VBA與HTML文檔”:表單對象的提交與反饋
HTML DOM 允許 JavaScript(腳本語言) 對 HTML 事件作出反應,當事件發生時,如當用戶點擊一個 HTML 元素時,可以執行 JavaScript。一般來講這些事件包括:
用戶點擊鼠標時;網頁已加載;圖片已加載;鼠標移動到元素上;輸入字段被改變;HTML 表單被提交;用戶觸發按鍵
在我的第五套教程《VBA中類的解讀及應用》中我非常系統的講解了事件的含義,事件主要是對象的響應,我們這節就幾個實例給出幾個對象的常用響應有的是事件本身,有的是相關的操作。
表單form對象,有一個方法比較重要,就是submit,這個方法提供了表單的提交的動作。如果我們捕捉頁面的提交按鈕非常困難時,有時候只要對表單,執行submit方法,表單也是可以提交的,不需去點擊提交按鈕。
表單控件,是文本輸入類控件,最常用就是value的屬性了,通過這個屬性,可以往文本框里面添加文本。
單選框、復選框,常用的是checked屬性,如果為true就是被選中了,或者直接使用click方法也行。
下拉列表,如果是單選列表框,可通過selectedIndex屬性去設置選中項(下拉選項,從1開始編號,如2就是選擇下拉列表的第二個選項),也可以通過value屬性,直接把value指定為要選定的option的value即可,但多選列表框不可用這兩個屬性。另外,所有類別的列表框,都可以通過其內含對象集合options(),設置某個options(x)的selected屬性為true,來設置選中項。
還是以百度首頁為示例,我們用程序模擬鍵入查詢數據“VBA代碼解決方案”,然后提交查詢,在網頁中看看查詢的結果:
Sub MYNZB() '在百度首頁,提交表單
Dim ie, dmt, fm
Set ie = CreateObject("InternetExplorer.Application") '創建一個IE對象
With ie
.Visible = True '顯示它
.navigate "http://www.baidu.com" '加載某個頁面
Do Until .ReadyState = 4 '等待頁面加載完畢
DoEvents
Loop
Set dmt = .document '將IE瀏覽器加載的頁面文檔,賦予dmt變量
Set fm = dmt.forms("f") '用表單的名稱f,捕捉表單對象
dmt.all("kw").Value = "VBA代碼解決方案" '用搜索欄的id"kw"捕捉它,并鍵入VBA代碼解決方案
dmt.all.tags("input")(3).Click '用"百度一下"按鈕的input索引號捕捉它,并模擬按鈕的點擊
'fm.submit '模擬表單的提交,不一定要click
End With
End Sub
代碼截圖:
網頁返回的結果:
表格對象,也是我們提取網頁數據,最常打交道的對象了。其內含rows對象集合,可以使我們訪問表格內的每行,每個row對象還內含cells對象集合,使我們可以訪問其每行的每個單元格,讀取每個單元格的innertext屬性即可獲取我們所需每個單元格的文本。
另外,常用的屬性還有length,這個類似我們VBA里面的count,都是返回某個對象的數量。
如下面代碼是提取實時股票漲跌的代碼:
Sub MYNZC()
Sheets("Sheet1").Select
Cells.Clear
Dim ie, dmt, tb, i&, j&
Set ie = CreateObject("InternetExplorer.Application") '創建一個IE對象
With ie
'.Visible = True '顯示它
.navigate "http://vip.stock.finance.sina.com.cn/mkt/#hqIndex" '加載某個頁面
Do Until .ReadyState = 4 '等待頁面加載完畢
DoEvents
Loop
Set dmt = .document '將IE瀏覽器加載的頁面文檔,賦予dmt變量
Set tb = dmt.all.tags("table")(4) '通過索引號捕捉表格對象
For i = 0 To tb.Rows.Length - 1 '歷遍其每個行
For j = 0 To tb.Rows(i).Cells.Length - 1 '歷遍每行的每個單元格
Cells(i + 1, j + 1) = tb.Rows(i).Cells(j).innertext '將其innertext寫入單元格
Next
Next
End With
End Sub
代碼截圖:
返回的結果:
為了提取網頁中的圖片,我們需要這個圖片的鏈接,我們看看下面的代碼:
Sub MYNZD()
Dim ie, dmt
Set ie = CreateObject("InternetExplorer.Application") '創建一個IE對象
With ie
.Visible = True '顯示它
.navigate "https://baijiahao.baidu.com/s?id=1633425158454774294" '加載某個頁面
Do Until .ReadyState = 4 '等待頁面加載完畢
DoEvents
Loop
Set dmt = .document '將IE瀏覽器加載的頁面文檔,賦予dmt變量
Debug.Print dmt.images(1).src '讀取圖片的URL
End With
End Sub
代碼截圖:
文檔中 <a> 標簽每出現一次,就會創建 Anchor 對象。這個就沒啥好示例的了,href屬性返回被鏈接的URL,click可以模擬超鏈接被點擊了。
這節涉及到的內容較多,希望大家在 的基礎上修正代碼加以使用。
本節知識點回向:
如何提交表單?如何下載圖片的地址?如何獲得表的數據?
本節參考文件:008工作表.xlsm
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中,教程學習順序:
【分享成果,隨喜正能量】在外的好脾氣,是為人的圓滑,讓你收獲好人緣;在家的好脾氣,是最貴的修養,讓你你收獲最好的幸福!。
一篇文章我們說了單選框、多選框以及下拉框的使用,今天呢我們繼續看一下表單剩下的常用控件:提交按鈕以及重置按鈕。
提交按鈕,顧名思義就是當我們填好了表單中的數據之后,我們需要通過提交按鈕來將數據傳遞到后臺的服務器中,供后臺程序使用。
使用語法:<input type="submit" value="提交數據">
詳細講解:
1、type:只有當type值設置為submit時,按鈕才有提交作用,才能正常的進行表單的提交。(或者使用JavaScript代碼來觸發提交事件,這個到后期我們講解js的時候我進行介紹)
2、value:按鈕上顯示的文字,顯示按鈕的名稱。
當用戶需要重置表單信息到初始時的狀態時,比如用戶輸入“用戶名”后,發現書寫有誤,可以使用重置按鈕使輸入框恢復到初始狀態。只需要把type設置為"reset"就可以。
使用語法:<input type="reset" value="重置數據">
詳細講解:
1、type:只有當type值設置為reset時,按鈕才有重置作用,點擊按鈕會將form表單內的所有信息還原到初始未輸入的狀態。
2、value:按鈕上顯示的文字,顯示重置按鈕的名稱
使用練習:
我們創建一個表單,數據我們以post的形式提交到百度首頁,表單里邊有姓名和年齡的輸入框,并且添加提交數據按鈕以及重置數據按鈕。具體代碼如下圖所示:
在網頁中的顯示效果就如下圖所示:
我們在姓名和年齡輸入框中輸入內容,點擊重置數據既可以清空里邊的內容,還原到初始狀態,點擊提交數據按鈕,那么數據將會提交到我們的指定鏈接處。
以上呢就是表單最常用的一些控件了,接下來我們對學到的表單知識進行一次綜合的測試,我們來寫一個完整的表單包含我們學到的所有知識。
我們在這里就寫一個網站制作常用的留言表,表格名稱就叫留言表,然后表中包含有姓名輸入框、性別單選框(默認選中男)、愛好多選框(默認選中第一個)、所在地區下拉框、留言內容多行文本框,以及提交信息按鈕和重置信息按鈕。數據提交呢我們還是提交到百度,提交類型我們使用post。具體的代碼如下圖所示:
在網頁中的顯示效果就如下圖所示:
好了,到了這里我們的第一個表單就算是做完了,到這有人就會問了,為什么別人的代碼在瀏覽器上看起來都是那么的規整,我這么寫完看著怎么這么丑,接下來的文章我們將為大家介紹css的知識了,學習了css你也可以將你的頁面做的高達上起來。最后大家看完一定要自己動手寫一寫,只有自己寫出的代碼才能體會到其中的樂趣,多加練習才是王道。
每日金句:人生最大的喜悅是每個人都說你做不到,你卻完成它了!喜歡我的文章的小伙伴記得關注一下哦,每天將為你更新最新知識。
、使用場景:
安全性都一樣,都是發送的http協議。安全性與提交文件的業務處理(格式檢測,防注入)有關,與提交方式無關。
一般登錄用表單提交,點擊提交觸發submit事件,一般會 使頁面發生跳轉,頁面的跳轉等行為的控制往往在后端,后端控制頁面的跳轉及數據的傳遞;但是某些時候不希望頁面跳轉,或者說想要將控制權放在前端,通過js來操作頁面的跳轉或數據變化,一般這種異步操作,都會使用ajax。
但是Ajax會有個隱藏的問題,即瀏覽器不保存密碼,不符合用戶習慣。理想的方式:建立隱藏的iframe,把form標簽的target指向iframe,然后檢測iframe的狀態。
2、比較:
(1)ajax在提交、請求、接收時,都是異步進行,網頁不需要刷新,只刷新頁面局部,不關心也不影響頁面其他部分的內容。
Form提交則是新建一個頁面,哪怕是提交給自己本身的頁面,也需要刷新,為了維持頁面用戶對表單的狀態改變,要在控制器和模板之間傳遞更多參數以保持頁面狀態。
(2)ajax提交時,是在后臺新建一個請求。
Form卻是放棄本頁面,然后再請求。
(3)ajax必須要用js來實現,存在調試麻煩、瀏覽器兼容問題,而且不啟用js的瀏覽器,無法完成操作。
Form表單是瀏覽器自帶的,無論是否開啟js,都可以提交表單。
(4)ajax在提交、請求、接收時,整個過程都需要使用程序來對其進行數據處理。
Form表單提交,是根據表單結構自動完成,不需要代碼干預。用submit提交。
3、其他方面:
關于輸入內容的校驗,ajax可以在獲取到元素內容用程序判斷;form表單的屬性中有校驗的字段,easyui,jeecg等中都封裝,用戶只需添加正則表達式的校驗規則。
4、例:
(1)使用form提交
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div id="form-div">
<form id="form1" action="/users/login" method="post">
<p>用戶名:<input name="userName" type="text" id="txtUserName" tabindex="1" size="15" value=""/></p>
<p>密 碼:<input name="password" type="password" id="TextBox2" tabindex="2" size="16" value=""/></p>
<p><input type="submit" value="登錄"> <input type="reset" value="重置"></p>
</form>
</div>
</body>
</html>
*請認真填寫需求信息,我們會在24小時內與您取得聯系。