Всем привет. Значит, такая ситуация, Написал программу, алгоритм работает верно. Обрабатываеться более 70% документа и потом вдруг раз и ошибка OverFlow. К сожалению документ для примера выложить не могу, информация конфидициальная, могу выложить только текст программы:
Sub Preobrazovanie()
Dim First As Integer
Dim FirstRange As Range
Dim WorkRange As Range
Dim WorkCount As Single
Application.ScreenUpdating = False
Sheets("Результат").Cells.Delete Shift:=xlUp
WorkCount = Sheets("Исходные данные").UsedRange.Rows.Count
Set WorkRange = Sheets("Исходные данные").Range(Cells(1, 1), Cells(WorkCount, 1))
Set FirstRange = WorkRange.Find("СекцияДокумент=Платежное поручение", , , xlWhole, , xNext)
First = FirstRange.Row
i = 1
Call ZapolnenieMASS
Do While Sheets("Исходные данные").Cells(First + 37 * (i - 1), 1) = "СекцияДокумент=Платежное поручение"
Call Zapolnenie(First + 37 * (i - 1))
i = i + 1
Loop
Rows("1:1").Insert Shift:=xlDown
Call Zagolovok
Application.ScreenUpdating = True
End Sub
Public Sub Zapolnenie(p As Integer)
Dim k As Integer
Dim c As Integer
Dim Str As String
For k = 1 To 35
c = Len(MASS(k)) + 2
Str = Sheets("Исходные данные").Cells(p + k, 1)
Sheets("Результат").Cells(i, k) = Mid(Str, c)
Next k
End Sub
Public Sub ZapolnenieMASS()
MASS(1) = "Номер"
MASS(2) = "Дата"
MASS(3) = "Сумма"
MASS(4) = "ПлательщикСчет"
MASS(5) = "ПлательщикИНН"
MASS(6) = "ПлательщикКПП"
MASS(7) = "Плательщик1"
MASS(8) = "ПлательщикРасчСчет"
MASS(9) = "ПлательщикБанк1"
MASS(10) = "ПлательщикБанк2"
MASS(11) = "ПлательщикБИК"
MASS(12) = "ПлательщикКорсчет"
MASS(13) = "ПолучательСчет"
MASS(14) = "ДатаПоступило"
MASS(15) = "ПолучательИНН"
MASS(16) = "ПолучательКПП"
MASS(17) = "Получатель1"
MASS(18) = "ПолучательКорсчет"
MASS(19) = "ПолучательБанк1"
MASS(20) = "ПолучательБанк2"
MASS(21) = "ПолучательБИК"
MASS(22) = "ПолучательКорсчет"
MASS(23) = "ВидПлатежа"
MASS(24) = "ВидОплаты"
MASS(25) = "СтатусСоставителя"
MASS(26) = "ПоказательКБК"
MASS(27) = "ОКАТО"
MASS(28) = "ПоказательОснования"
MASS(29) = "ПоказательПериода"
MASS(30) = "ПоказательНомера"
MASS(31) = "ПоказательДаты"
MASS(32) = "ПоказательТипа"
MASS(33) = "СрокПлатежа"
MASS(34) = "Очередность"
MASS(35) = "НазначениеПлатежа"
End Sub
Sub Preobrazovanie()
Dim First As Integer
Dim FirstRange As Range
Dim WorkRange As Range
Dim WorkCount As Single
Application.ScreenUpdating = False
Sheets("Результат").Cells.Delete Shift:=xlUp
WorkCount = Sheets("Исходные данные").UsedRange.Rows.Count
Set WorkRange = Sheets("Исходные данные").Range(Cells(1, 1), Cells(WorkCount, 1))
Set FirstRange = WorkRange.Find("СекцияДокумент=Платежное поручение", , , xlWhole, , xNext)
First = FirstRange.Row
i = 1
Call ZapolnenieMASS
Do While Sheets("Исходные данные").Cells(First + 37 * (i - 1), 1) = "СекцияДокумент=Платежное поручение"
Call Zapolnenie(First + 37 * (i - 1))
i = i + 1
Loop
Rows("1:1").Insert Shift:=xlDown
Call Zagolovok
Application.ScreenUpdating = True
End Sub
Public Sub Zapolnenie(p As Integer)
Dim k As Integer
Dim c As Integer
Dim Str As String
For k = 1 To 35
c = Len(MASS(k)) + 2
Str = Sheets("Исходные данные").Cells(p + k, 1)
Sheets("Результат").Cells(i, k) = Mid(Str, c)
Next k
End Sub
Public Sub ZapolnenieMASS()
MASS(1) = "Номер"
MASS(2) = "Дата"
MASS(3) = "Сумма"
MASS(4) = "ПлательщикСчет"
MASS(5) = "ПлательщикИНН"
MASS(6) = "ПлательщикКПП"
MASS(7) = "Плательщик1"
MASS(8) = "ПлательщикРасчСчет"
MASS(9) = "ПлательщикБанк1"
MASS(10) = "ПлательщикБанк2"
MASS(11) = "ПлательщикБИК"
MASS(12) = "ПлательщикКорсчет"
MASS(13) = "ПолучательСчет"
MASS(14) = "ДатаПоступило"
MASS(15) = "ПолучательИНН"
MASS(16) = "ПолучательКПП"
MASS(17) = "Получатель1"
MASS(18) = "ПолучательКорсчет"
MASS(19) = "ПолучательБанк1"
MASS(20) = "ПолучательБанк2"
MASS(21) = "ПолучательБИК"
MASS(22) = "ПолучательКорсчет"
MASS(23) = "ВидПлатежа"
MASS(24) = "ВидОплаты"
MASS(25) = "СтатусСоставителя"
MASS(26) = "ПоказательКБК"
MASS(27) = "ОКАТО"
MASS(28) = "ПоказательОснования"
MASS(29) = "ПоказательПериода"
MASS(30) = "ПоказательНомера"
MASS(31) = "ПоказательДаты"
MASS(32) = "ПоказательТипа"
MASS(33) = "СрокПлатежа"
MASS(34) = "Очередность"
MASS(35) = "НазначениеПлатежа"
End Sub