为什么我无法使用VBA访问此弹出框的内容?

时间:2017-04-18 17:12:18

标签: javascript html excel vba

这是弹出框的html:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- BEGIN /layouts/new_empty_layout.jsp -->











<html>
	<head>
		<title>SERFF - System for Electronic Rate and Form Filing</title>
		<!--    Copyright 2016 National Association of Insurance Commissioners -->


<link rel="stylesheet" type="text/css" href="/styles/serff-core.css"/>
<link rel="stylesheet" type="text/css" href="/styles/core-header.css"/>
<link rel="stylesheet" type="text/css" href="/styles/core-content.css"/>
<link rel="stylesheet" type="text/css" href="/scripts/jquery-ui-css/custom-theme/jquery-ui-1.10.4.custom.css"/>
		




<script type="text/javascript">
	var staticUrlPath = '/';
	var appUrlPath = '/serff/';
</script>
<script type="text/javascript" src="/scripts/jquery-1.12.1.min.js"></script>
<script type="text/javascript" src="/scripts/jquery.textarea.pack.js"></script>
<script type="text/javascript" src="/scripts/jquery-ui-1.10.0.min.js"></script>
<script type="text/javascript" src="/scripts/datepicker.js"></script>
<script type="text/javascript" src="/scripts/default_layout.js"></script>





<script>
	// custom SERFF dimensions:
	// dimension1 = SERFF User Type custom GA dimension

	var analyticsEnabled = true;
	
	// insert the analytics script and initialize the Google Analytics "ga" object
	if(analyticsEnabled){
		var currentScript = document.currentScript || (function() {
			var scripts = document.getElementsByTagName('script');
				return scripts[scripts.length - 1];
		    })();
		
		var gaScript = document.createElement('script');
		gaScript.async = true;
		gaScript.src = '/public/lib/ga/analytics.js';
		document.getElementsByTagName("head")[0].insertBefore(gaScript, currentScript);
		
		var ga = window.ga = window.ga || function(){(window.ga.q = window.ga.q || []).push(arguments)};
		window.ga.l = +new Date();
		window.GoogleAnalyticsObject = 'ga';
		ga('create', 'UA-5133885-7', 'auto');
	}
	
	function analyticsPageView()
	{		
		doSendAnalytics(function() {
			ga('send', 'pageview');
		});
	}

	function analyticsPageViewWithUserType()
	{	doSendAnalytics(function() {	
			ga('send', 'pageview', {
				'dimension1' : getUserType()
			});
		});
	}

	function analyticsEvent(eventCategory, eventAction, callback){
		if(callback){
			doSendAnalytics(function() {
				ga('send', 'event', eventCategory, eventAction, {'hitCallback': callback});
			});
		} else {
			doSendAnalytics(function() {
				ga('send', 'event', eventCategory, eventAction);
			});
		}		
	}

	function analyticsEventWithUserType(eventCategory, eventAction, callback){
		if(callback){
			doSendAnalytics(function() {
				ga('send', 'event', eventCategory, eventAction, {'hitCallback': callback, 'dimension1' : getUserType()});
			});
		} else {
			doSendAnalytics(function() {
				ga('send', 'event', eventCategory, eventAction, {'dimension1' : getUserType()});
			});
		}
	}

	function getUserType(){
		var userType = 'I';
	    if(userType == 'S'){
	        userType = 'State User';
	    } else if(userType == 'I') {
			userType = 'Industry User';
	    } else if (userType == 'N') {
			userType = 'NAIC Admin User';
		}
	    return userType;
	}

	// only send a message to GA if enabled in the INI file
	function doSendAnalytics(method){		
		if(analyticsEnabled){
			method();
		}
	}
	

</script>
		
		<link rel="stylesheet" type="text/css" href="/styles/forms2.css"/>
		<!-- BEGIN /layouts/iefixes.jsp -->












	

	

	

	


<!-- END /layouts/iefixes.jsp -->

		

	</head>
	
	<body>
		<div id="content">
			<div id="main" style="background: none;">
				<!--    Copyright 2014 National Association of Insurance Commissioners -->
<!-- BEGIN /filing/ -->








<html>
<head>
<title>SERFF - System for Electronic Rate and Form Filing</title>
<link rel="stylesheet" type="text/css"
	href="/styles/serff-core.css" />
<link rel="stylesheet" type="text/css"
	href="/styles/core-header.css" />
<link rel="stylesheet" type="text/css"
	href="/styles/core-content.css" />
<link rel="stylesheet" type="text/css"
	href="/styles/forms2.css" />
<!-- BEGIN /layouts/iefixes.jsp -->












	

	

	

	


<!-- END /layouts/iefixes.jsp -->


	<script language="javascript">
		var uploadSubmitted = false;
		$( document ).ready(function() {
			$( 'form' ).submit(function( event ) {
				if (uploadSubmitted) {
					alert( "You have already performed this action.  Please wait for the page to refresh." );
					event.preventDefault();
				} else {
					uploadSubmitted = true;
				}
			});
		});
	
		var skipcycle = false;
		function updateAttachments() {
			
			var groupId = window.opener.selectedAttachmentGroup;
			if (uploadForm.groupId.value == null || uploadForm.groupId.value ==''){
				uploadForm.groupId.value = groupId;
			}
			var index = window.opener.selectedIndex;
			if (uploadForm.index.value == null || uploadForm.index.value ==''){
				uploadForm.index.value = index;
			}
			
		}
		
		function focusOnMe(){
		if (!skipcycle){
		window.focus(); 
		}
		mytimer = setTimeout('focusOnMe()', 500);
		}						
		
	</script>
</head>
<body onload = "mytimer = setTimeout('focusOnMe()', 500);updateAttachments();">
<h2>SERFF File Attachment Upload</h2>
<div class="documentArea">
	<form name="uploadForm" method="POST" action="/serff/uploadFileAttachment.do" class="styled" enctype="multipart/form-data" id="uploadForm">
		<input type="hidden" name="groupId" />
		<input type="hidden" name="index" />
		
		
			
				
			
			
		
		<input type="hidden" name="attachmentType" value="0">
	
		<div class="uploadWarning" style="width:325px">
			Attachments larger than 3MB or Microsoft Word(tm) documents cannot be uploaded to SERFF.
		</div>
		
			
		<div class="fieldgroup">File 1:&nbsp;&nbsp; <input type="file" name="contentIndexed[0]" value="" onfocus="skipcycle=true" class="inputFile"></div>
	
		<div class="fieldgroup">File 2:&nbsp;&nbsp; <input type="file" name="contentIndexed[1]" value="" onfocus="skipcycle=true" class="inputFile"><br />
		</div>
	
		<div class="fieldgroup">File 3:&nbsp;&nbsp; <input type="file" name="contentIndexed[2]" value="" onfocus="skipcycle=true" class="inputFile"><br />
		</div>
	
		<div class="fieldgroup">File 4:&nbsp;&nbsp; <input type="file" name="contentIndexed[3]" value="" onfocus="skipcycle=true" class="inputFile"><br />
		</div>
		<div class="fieldgroup">File 5:&nbsp;&nbsp; <input type="file" name="contentIndexed[4]" value="" onfocus="skipcycle=true" class="inputFile"><br />
		</div>
		<br />
		<div class="actionButtons">
			<input type="submit" value="Upload" class="inputSubmit">
			<input type="button" class="inputButton" onclick="window.close();" value="Cancel" />
		</div>
	</form>
</div>
</body>
</html>
<!-- END /filing/fileUpload.jsp -->

			</div> <!-- end main div --> 
		</div> <!-- end content div -->
	</body>
</html>
<!-- END /layouts/new_empty_layout.jsp -->
&#13;
&#13;
&#13;

我正在尝试使用vba来显示上传文件对话框&#34;点击&#34;在其中一个浏览按钮上。问题是vba不会让我在uploadForm中找到输入标签。

我自己的代码:

Set uploadForm = ieUpload.document.getElementById("uploadForm")
For Each inputTag In uploadForm.getElementsByTagName("input")
If inputTag.Name = "contentIndexed[0]" Then inputTag.Click
Next inputTag

Vba引发一个&#34;对象变量或者没有设置块变量&#34; for循环出错。

1 个答案:

答案 0 :(得分:1)

在聊天讨论后编辑

原来文件还没有完成加载。检查ieUpload.Busy就可以了。例如,请this question查看Busy循环中的DoEvents

原始答案

首先:

  • 确保您的源文件顶部有Option Explicit
  • 确保已将对象引用添加到正在使用的HTML库中。除非您没有其他选择,否则请勿使用CreateObject
  • 请确保您已使用Dim为所有变量提供特定类型,而不是VariantObject

现在,假设您使用MSHTML,则没有功能document.get Elements ById。您想要的是get Element ById,而“元素”上没有“s”。单步执行代码 - 当您点击For循环时,我怀疑uploadFormNothing,因此uploadForm.getElementsByTagName会引发错误。

修改那么为什么我提到添加上面的参考?因为如果您添加了引用,并且您说过Dim uploadForm as MSHTML.IHTMLElement2,则VBA编辑器会自动将案例更改为uploadForm.getElementsByTagName。既然没有,我认为你没有Dim,或者它不是特定的Dim

(当然,除非你创建了一个名为getelementsbytagname的变量,你不应该这样做:))

Here's一个MSHTML示例,链接自this answer