Страницы: 1
RSS
Недостаточно памяти для обработки макроса (оптимизация)
 
Добрый день
Написал макрос, но в процессе работы появляется сообщение что недостаточно памяти
что можно оптимизировать?
Код
Sub obrabotka()


FileOpen = Application.GetOpenFilename
    If FileOpen <> False Then
        Workbooks.Open (FileOpen)
        Else: Exit Sub
    End If

Application.ScreenUpdating = False

For i = 2 To Worksheets(1).Cells(Rows.Count, 4).End(xlUp).Row

        imya = Worksheets(1).Cells(i, 4)
        If Not SheetExist(imya) Then
        Sheets.Add after:=Sheets(1)
        ActiveSheet.Name = imya
        Worksheets(imya).Rows(1).Value = Worksheets(1).Rows(1).Value
        Worksheets(imya).Rows(Sheets(imya).Cells(Rows.Count, 4).End(xlUp).Row + 1).Value = Worksheets(1).Rows(i).Value
        
        Else
        Worksheets(imya).Rows(Sheets(imya).Cells(Rows.Count, 4).End(xlUp).Row + 1).Value = Worksheets(1).Rows(i).Value
        End If
    Next i

 For i = 2 To Sheets.Count
     Worksheets(i).Copy
     MsgBox Sheets(1).Name
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Replace(Sheets(1).Name, """", "_") & ".xlsx"

    ActiveWorkbook.Close
Next i

Application.ScreenUpdating = True

End Sub
 
Public Function SheetExist(ShName)
    Dim sh As Worksheet
    On Error Resume Next
        Set sh = Worksheets(ShName)
        SheetExist = Not (Err.Number <> 0)
    On Error GoTo 0

End Function
 
1. Неплохо бы знать на какой строке это вылетает и до какого момента доходит вообще.
2. Если есть проблемы с памятью, то стоит отказаться от использования массивов. Это значит, что строки типа:
Код
Worksheets(imya).Rows(1).Value = Worksheets(1).Rows(1).Value
надо заменять на
Код
Worksheets(1).Rows(1).Copy
Worksheets(imya).Cells(1,1).PasteSpecial xlValues
3. Так же возможен вариант, что при очередном добавлении листа и данных на него у Excel просто не хватает данных, чтобы обработать "содержание" всех открытых книг и листов. В этом случае имеет смысл сразу сохранять листы в отдельные книги и закрывать тоже сразу.
Изменено: The_Prist - 05.10.2017 14:17:03
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Мне помнится когда-то мы уже обсуждали на форуме, что при добавлении\создании большого к-ва листов Экс спотыкается кажется, на 32-м листе. Думал что в новых версиях это пофиксено...
Я сам - дурнее всякого примера! ...
 
Цитата
kuklp написал:
Экс спотыкается кажется, на 32-м листе
не совсем так. Кол-во листов ограничено исключительно доступной памятью. Но для 32-битных приложений кол-во памяти для Excel не может быть выделено в размере, превышающим 2Гб и не важно сколько там Гб в оперативке в целом.
32 листа - скорее совпадение, если листы были забиты на много строк данными. Просто именно на этом кол-ве память забивалась.
Тоже самое и с открытыми книгами.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
помог п.2
спасибо!!!
Страницы: 1
Читают тему
Наверх