2016-06-02 3 views
0

Итак, мне поручено создать новых пользователей в компании, которую я работаю для веб-сайта. Я получил лист excel из 100 + имен пользователей и адресов электронной почты. Я не хотел, чтобы это было вручную, поэтому решено попробовать и написать программу. Раньше я никогда не касался VB, и именно так я смог достичь. Он работает для первого запуска через время цикла, но затем я получаю сообщение об ошибке:Заполнение веб-формы с помощью VBA

Run-time error '91' Object variable or With block variable not set

Когда я пытаюсь отлаживать эту ошибку, эта линия в моем коде подсвечивается:

IE.document.GetElementsbyname("user_login")(0).Value = ThisWorkbook.Sheets("sheet1").Cells(j, i) ' sets login info 

В моем Excel Таблицы, адреса электронной почты совпадают с данными входа в систему, и они являются ссылками для отправки электронной почты через Outlook. Я посмотрю, вызывает ли это мою ошибку, но тем временем я хотел получить вторую пару глаз. Спасибо за чтение этого. это мой первый пост здесь, так что я прошу прощения, если это не так информативно, как вы хотели бы

Вот остальная часть моего кода до сих пор

Sub FillInternetForm() 
Dim IE As Object 
    Set IE = CreateObject("InternetExplorer.Application") 
'create new instance of IE 
Dim i As Integer 
Dim j As Integer 
Dim x As Integer 
Dim y As Integer 
Dim s As String 
s = "paswd" ' pasword setting 
i = 4 ' column D for email input 
     j = 50 ' row to start 
    x = 9 ' column I For last name input 
    y = 10 'column j for last name 
'you want to use open IE window. Easiest way I know of is via title bar. 
While j < 121 

Wait 
     IE.Navigate "website link" 
       'go to web page listed inside quotes 
    IE.Visible = True 
     While IE.busy 
      DoEvents 'wait until IE is done loading page. 
      Wend 

     IE.document.GetElementsbyname("user_login")(0).Value = ThisWorkbook.Sheets("sheet1").Cells(j, i) ' sets login info 
     IE.document.GetElementsbyname("email")(0).Value = ThisWorkbook.Sheets("sheet1").Cells(j, i) ' sets email address 
     IE.document.GetElementsbyname("first_name")(0).Value = ThisWorkbook.Sheets("sheet1").Cells(j, y) ' sets first name 
     IE.document.GetElementsbyname("last_name")(0).Value = ThisWorkbook.Sheets("sheet1").Cells(j, x) ' sets last name 
     Set elementcol = IE.document.getElementsByClassName("button button-secondary wp-generate-pw hide-if-no-js") 
      elementcol.Item(0).Click 'shows the password 
       While IE.busy 
        DoEvents 'wait until IE is done loading page. 
       Wend 
      IE.document.GetElementsbyname("pass1-text")(0).Value = s 'sets the password 
     Wait 
     Set elementcol = IE.document.getElementsByClassName("pw-checkbox") 
      elementcol.Item(0).Click ' clicks confirmation of weak password choice 
       While IE.busy 
        DoEvents 'wait until IE is done loading page. 
       Wend 
     Set elementcol = IE.document.GetElementsbyname("send_user_notification") 
      elementcol.Item(0).Click ' unclicks send new user email 
       While IE.busy 
        DoEvents 'wait until IE is done loading page. 
       Wend 
     IE.document.getElementByID("createusersub").Click ' clicks add new user 

       While IE.busy 
        DoEvents 'wait until IE is done loading page. 
       Wend 
     j = j + 1 
     While IE.busy 
        DoEvents 'wait until IE is done loading page. 
       Wend 


Wend 
End Sub 
Sub Wait() 
    Application.Wait Time + TimeSerial(0, 0, 5) 
End Sub 

EDIT: Эта ошибка появляется только после того, как 5 проходит через мой цикл

ответ

0

Кэш, вероятно, засорен от всех циклов.

Option Explicit 

Private Declare Function FindFirstUrlCacheGroup Lib "wininet.dll" (_ 
    ByVal dwFlags As Long, _ 
    ByVal dwFilter As Long, _ 
    ByRef lpSearchCondition As Long, _ 
    ByVal dwSearchCondition As Long, _ 
    ByRef lpGroupId As Date, _ 
    ByRef lpReserved As Long) As Long 

Private Declare Function FindNextUrlCacheGroup Lib "wininet.dll" (_ 
    ByVal hFind As Long, _ 
    ByRef lpGroupId As Date, _ 
    ByRef lpReserved As Long) As Long 

Private Declare Function DeleteUrlCacheGroup Lib "wininet.dll" (_ 
    ByVal sGroupID As Date, _ 
    ByVal dwFlags As Long, _ 
    ByRef lpReserved As Long) As Long 

Private Declare Function FindFirstUrlCacheEntry Lib "wininet.dll" Alias "FindFirstUrlCacheEntryA" (_ 
    ByVal lpszUrlSearchPattern As String, _ 
    ByRef lpFirstCacheEntryInfo As INTERNET_CACHE_ENTRY_INFO, _ 
    ByRef lpdwFirstCacheEntryInfoBufferSize As Long) As Long 

Private Type INTERNET_CACHE_ENTRY_INFO 
    dwStructSize As Long 
    szRestOfData(1024) As Long 
End Type 

Private Declare Function DeleteUrlCacheEntry Lib "wininet.dll" Alias "DeleteUrlCacheEntryA" (_ 
    ByVal lpszUrlName As Long) As Long 

Private Declare Function FindNextUrlCacheEntry Lib "wininet.dll" Alias "FindNextUrlCacheEntryA" (_ 
    ByVal hEnumHandle As Long, _ 
    ByRef lpNextCacheEntryInfo As INTERNET_CACHE_ENTRY_INFO, _ 
    ByRef lpdwNextCacheEntryInfoBufferSize As Long) As Long 

Private Const CACHGROUP_SEARCH_ALL = &H0 
Private Const ERROR_NO_MORE_FILES = 18 
Private Const ERROR_NO_MORE_ITEMS = 259 
Private Const CACHEGROUP_FLAG_FLUSHURL_ONDELETE = &H2 
Private Const BUFFERSIZE = 2048 

Private Sub Command1_Click() 
    Dim sGroupID As Date 
    Dim hGroup As Long 
    Dim hFile As Long 
    Dim sEntryInfo As INTERNET_CACHE_ENTRY_INFO 
    Dim iSize As Long 

    On Error Resume Next 

    ' Delete the groups 
    hGroup = FindFirstUrlCacheGroup(0, 0, 0, 0, sGroupID, 0) 

    ' To avoid error using it with IE4 as FindFirstUrlCacheGroup is not implemented 
    If Err.Number <> 453 Then 
     If (hGroup = 0) And (Err.LastDllError <> 2) Then 
      MsgBox "An error occurred enumerating the cache groups" & Err.LastDllError 
      Exit Sub 
     End If 
    Else 
     Err.Clear 
    End If 

    If (hGroup <> 0) Then 
     'we succeeded in finding the first cache group.. enumerate and 
     'delete 
     Do 
      If (0 = DeleteUrlCacheGroup(sGroupID, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, 0)) Then 

       ' To avoid error using it with IE4 as FindFirstUrlCacheGroup is not implemented 
       If Err.Number <> 453 Then 
       MsgBox "Error deleting cache group " & Err.LastDllError 
       Exit Sub 
       Else 
        Err.Clear 
       End If 
      End If 
      iSize = BUFFERSIZE 
      If (0 = FindNextUrlCacheGroup(hGroup, sGroupID, iSize)) And (Err.LastDllError <> 2) Then 
       MsgBox "Error finding next url cache group! - " & Err.LastDllError 
      End If 
     Loop Until Err.LastDllError = 2 
    End If 

    ' Delete the files 
    sEntryInfo.dwStructSize = 80 
    iSize = BUFFERSIZE 
    hFile = FindFirstUrlCacheEntry(0, sEntryInfo, iSize) 
    If (hFile = 0) Then 
     If (Err.LastDllError = ERROR_NO_MORE_ITEMS) Then 
      GoTo done 
     End If 
     MsgBox "ERROR: FindFirstUrlCacheEntry - " & Err.LastDllError 
     Exit Sub 
    End If 
    Do 
     If (0 = DeleteUrlCacheEntry(sEntryInfo.szRestOfData(0))) _ 
      And (Err.LastDllError <> 2) Then 
      Err.Clear 
     End If 
     iSize = BUFFERSIZE 
     If (0 = FindNextUrlCacheEntry(hFile, sEntryInfo, iSize)) And (Err.LastDllError <> ERROR_NO_MORE_ITEMS) Then 
      MsgBox "Error: Unable to find the next cache entry - " & Err.LastDllError 
      Exit Sub 
     End If 
    Loop Until Err.LastDllError = ERROR_NO_MORE_ITEMS 
done: 
    MsgBox "cache cleared" 
    Command1.Enabled = True 
End Sub 

http://www.vbforums.com/showthread.php?440508-Clear-IE-Browser-Cache-and-History-with-VBA

Смежные вопросы