Board logo

標題: [發問] 如何用VBA,透過Excel在網頁上控制勾選? [打印本頁]

作者: espionage    時間: 2015-9-17 16:07     標題: 如何用VBA,透過Excel在網頁上控制勾選?

:)  Hi 各位先進
想請教一個問題,就是在網頁上,有一個打勾的方框,如下圖紅框的地方,如果我想用VBA程式語言控制,比方我在Excel A1文字顯示 "項次",在A2 欄位來判定是否為"Y",假使A2為Y,網頁上項次的框框內就打勾,這好像跟checked有關,因為我發現沒有被打勾的選項,value那一串字之後的 checked 不會顯示
謝謝指教

------被勾選的框 "項次" 網頁原始檔
<td width="26%" align="left" bgcolor="#EEEEEE" class='t8_blue4'>&nbsp;&nbsp;&nbsp;
<INPUT type="checkbox" name="displayAttribute" id="displayAttribute1" value="SequenceNo" checked>
&nbsp;項次
</td>

------沒被勾選的框 "用量(*) 網頁原始檔
<td width="26%" align="left" bgcolor="#EEEEEE" class='t8_blue4'>&nbsp;&nbsp;&nbsp;
<INPUT type="checkbox" name="displayAttribute" id="displayAttribute5" value="QuantityStar" >
&nbsp;用量(*)
</td>

[attach]22020[/attach]
作者: GBKEE    時間: 2015-9-18 10:32

回復 1# espionage
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim E As Object
  4.     With CreateObject("InternetExplorer.Application")
  5.         .Visible = True
  6.         .Navigate "D:\A.HTM"  '修正為你的網頁
  7.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  8.         '<INPUT type="checkbox" name="displayAttribute" id="displayAttribute1" value="SequenceNo">
  9.         '<INPUT type="checkbox" name="displayAttribute" id="displayAttribute5" value="QuantityStar" >
  10.         With .Document            '
  11.            'TagName= "INPUT", 不是唯一的
  12.            'For Each E In .all.tags("input")  '=>.getElementsByTagName("INPUT")
  13.            '     If E.Value = "SequenceNo" Then E.Checked = [A2] = "Y"
  14.            '     If E.Value = "QuantityStar" Then E.Checked = [B2] = "Y"
  15.            'Next
  16.            'name="displayAttribute"不是唯一的
  17.            'For Each E In .all("displayAttribute")  '=>.getElementsByName("displayAttribute")
  18.            '    If E.Value = "SequenceNo" Then E.Checked = [A2] = "Y"
  19.            '    If E.Value = "QuantityStar" Then E.Checked = [B2] = "Y"
  20.            'Next
  21.             'id="displayAttribute1",id="displayAttribute5"
  22.             'id 是唯一的
  23.             
  24.             '勾選的框 "項次"
  25.             .getElementByID("displayAttribute1").Checked = [A2] = "Y"
  26.             '勾選的框 "用量(*)"
  27.             .getElementByID("displayAttribute5").Checked = [B2] = "Y"
  28.         End With
  29.         '.Quit        '關閉網頁
  30.     End With
  31. End Sub
複製代碼

作者: espionage    時間: 2015-9-21 12:48

GBKEE 大大
我好像讓您誤會了,我的想法是,如果在Excel上的某個欄位標示"Y",可以控制Web上欄位上的選項是否打勾
比方Excel我在B3欄放入Y,則此網頁在 "選項" 的這個方框內,就會被打勾
不過VBA報錯,說沒這個語法,我應該怎個改比較好呢?

  '-----欄位項次選項
  For Each A In .getelementbyid("displayAttribute1")
  If Sheets(1).Cells(3, 3) = "Y" Then A.Checked  '如果Excel B3顯示 Y,則把網頁 "項次" 選項打勾
  Next
作者: espionage    時間: 2015-9-21 14:08

大大
謝謝前面的指導,我剛試出來了  
'If Sheets(1).Cells(3, 2) = "Y" Then ' ---->這句判斷if,是多的,應該刪除
只要留  .getelementbyid("displayAttribute7").Checked = Sheets(1).Cells(3, 2) 就好了
如果B3欄位有內容,選項就會勾起來了,如果B3欄位無內容,選項就不會勾起來了
感謝

    '-----欄位項次選項---------
  'If Sheets(1).Cells(3, 2) = "Y" Then ' 這句是多的,應該刪除
  .getelementbyid("displayAttribute7").Checked = Sheets(1).Cells(3, 2) '如果Excel B3顯示 Y,則把網頁 "項次" 選項打勾
作者: GBKEE    時間: 2015-9-21 15:02

本帖最後由 GBKEE 於 2015-9-22 05:45 編輯

回復 4# espionage

   
我好像讓您誤會了,我的想法是
好像沒有誤會.

我有說到
  1.   'id="displayAttribute1",id="displayAttribute5"
  2.             'id 是唯一的沒有子物件
  3. 所以   For Each A In .getelementbyid("displayAttribute1") 程式傳回錯誤
複製代碼
要改為
  1. Set A = .getelementbyid("displayAttribute1")
  2.         If Sheets(1).Cells(3, 3) = "Y" Then A.Checked = True
複製代碼
簡化
  1. .getelementbyid("displayAttribute1").Checked = [A2] = "Y"
複製代碼

作者: espionage    時間: 2015-9-29 10:45

GBKEE大大
謝謝您,可以使用




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)