Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нарушены границы массива (A2003)
 
 автор: Hush   (05.03.2009 в 17:16)   личное сообщение
8 Кб.
 
 

Кто подскажет почему вылезает ошибка "Нарушены границы массива"?
Файлов в папке было 14 шт.

Function GetMessage(FindSubject1 As String, FindSubject2 As String, _
MyFilePath As String, strEntryID As String, _
strLoadFolder As String, strLoadedFolder As String)

Dim MySubject As String
Dim myOlApp As Outlook.Application
Dim myNameSpace As Outlook.Namespace
Dim myFolder As MAPIFolder
Dim myItem As MailItem
Dim myAttachments As Attachments
Dim myAttach As Attachment
Dim i As Long, X As Long, j As Long
Dim OlNotRunning As Boolean

'On Error Resume Next

Set myOlApp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
OlNotRunning = True
Err.Clear
Set myOlApp = CreateObject("Outlook.Application")
End If
'=====================================================
Set myNameSpace = myOlApp.GetNamespace("MAPI")
Set myFolder = myNameSpace.Session.GetFolderFromID(strEntryID)

X = myFolder.Items.Count
With myFolder
For i = 1 To X
Set myItem = .Items(i)
MySubject = myItem.Subject

If MySubject Like "*" & FindSubject1 & "*" & FindSubject2 & "*" Then
Set myAttachments = myItem.Attachments
If myAttachments.Count > 0 Then
For j = 1 To myAttachments.Count
Set myAttach = myAttachments(j)
myAttach.SaveAsFile MyFilePath & "\" & i & j & "_" & myAttach.FileName
myItem.UnRead = False
Next j
If IsExistMailFolder(myFolder, strEntryID, strLoadedFolder) Then
myItem.Move .Folders(strLoadedFolder)
Else
.Folders.Add (strLoadedFolder)
myItem.Move .Folders(strLoadedFolder)
End If

End If
End If
Next i
End With

If OlNotRunning = True Then
Set myOlApp = Nothing
myOlApp.Quit
End If

End Function

  Ответить  
 
 автор: Дрюня   (05.03.2009 в 17:54)   личное сообщение
 
 

обычно вылезает за границе в таких операторах

For j = 1 To myAttachments.Count

попробуйте поставить

For j = 0 To myAttachments.Count - 1

  Ответить  
 
 автор: Hush   (05.03.2009 в 19:32)   личное сообщение
 
 

Нет, так не получается. Ругается на выделенное жирным шрифтом, и такая замена не действует.

  Ответить  
 
 автор: Дрюня   (05.03.2009 в 22:12)   личное сообщение
 
 

вроде как в VBA такое определение недопустимо - границы должны быть четко определены
включайте option explicit
и у Вас не будет таких ошибок


For i = 1 To X

  Ответить  
 
 автор: FORMAT   (06.03.2009 в 11:03)   личное сообщение
 
 

X = myFolder.Items.Count
With myFolder
For i = 1 To X
Set myItem = .Items(i)

Итемсы, по-моему начинают считаться с нуля. Потому попробуйте поставить .Items(i-1)


вроде как в VBA такое определение недопустимо - границы должны быть четко определены


Почему недопустимо?.Вполне допустимо.

  Ответить  
 
 автор: osmor   (06.03.2009 в 14:40)   личное сообщение
 
 

For Each myItem  In myFolder.Items
.....

next


http://hiprog.com/index.php?option=com_content&task=view&id=251661546

  Ответить  
 
 автор: Hush   (06.03.2009 в 17:58)   личное сообщение
 
 

Спасибо ОГРОМНОЕ! Теперь все как по маслу:))))

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList