Runtime error 28 out of stack space как исправить

Icon Ex Номер ошибки: Ошибка во время выполнения 28
Название ошибки: Out of stack space
Описание ошибки: The stack is a working area of memory that grows and shrinks dynamically with the demands of your executing program.
Разработчик: Microsoft Corporation
Программное обеспечение: Windows Operating System
Относится к: Windows XP, Vista, 7, 8, 10, 11

Обзор «Out of stack space»

Люди часто предпочитают ссылаться на «Out of stack space» как на «ошибку времени выполнения», также известную как программная ошибка. Разработчики программного обеспечения пытаются обеспечить, чтобы программное обеспечение было свободным от этих сбоев, пока оно не будет публично выпущено. Хотя эти превентивные действия принимаются, иногда ошибки, такие как ошибка 28, будут пропущены.

Ошибка 28 может столкнуться с пользователями Windows Operating System, если они регулярно используют программу, также рассматривается как «The stack is a working area of memory that grows and shrinks dynamically with the demands of your executing program.». Когда это происходит, конечные пользователи программного обеспечения могут сообщить Microsoft Corporation о существовании ошибки 28 ошибок. Затем Microsoft Corporation может исправить эти ошибки в исходном коде и подготовить обновление для загрузки. Поэтому, когда вы сталкиваетесь с запросом на обновление Windows Operating System, это обычно связано с тем, что это решение для исправления ошибки 28 и других ошибок.

Что вызывает ошибку времени выполнения 28?

Ошибки выполнения при запуске Windows Operating System – это когда вы, скорее всего, столкнетесь с «Out of stack space». Следующие три наиболее значимые причины ошибок выполнения ошибки 28 включают в себя:

Ошибка 28 Crash – Ошибка 28 может привести к полному замораживанию программы, что не позволяет вам что-либо делать. Это возникает, когда Windows Operating System не реагирует на ввод должным образом или не знает, какой вывод требуется взамен.

Утечка памяти «Out of stack space» – при утечке памяти Windows Operating System это может привести к медленной работе устройства из-за нехватки системных ресурсов. Есть некоторые потенциальные проблемы, которые могут быть причиной получения проблем во время выполнения, с неправильным кодированием, приводящим к бесконечным циклам.

Ошибка 28 Logic Error – логическая ошибка возникает, когда компьютер генерирует неправильный вывод, даже если пользователь предоставляет правильный ввод. Это происходит, когда исходный код Microsoft Corporation вызывает уязвимость при обработке информации.

Microsoft Corporation проблемы с Out of stack space чаще всего связаны с повреждением или отсутствием файла Windows Operating System. Как правило, решить проблему позволяет получение новой копии файла Microsoft Corporation, которая не содержит вирусов. В качестве последней меры мы рекомендуем использовать очиститель реестра для исправления всех недопустимых Out of stack space, расширений файлов Microsoft Corporation и других ссылок на пути к файлам, по причине которых может возникать сообщение об ошибке.

Типичные ошибки Out of stack space

Общие проблемы Out of stack space, возникающие с Windows Operating System:

  • «Ошибка Out of stack space. «
  • “Out of stack space не является приложением Win32.”
  • «Извините, Out of stack space столкнулся с проблемой. «
  • «К сожалению, мы не можем найти Out of stack space. «
  • “Отсутствует файл Out of stack space.”
  • «Проблема при запуске приложения: Out of stack space. «
  • «Out of stack space не выполняется. «
  • «Out of stack space выйти. «
  • “Неверный путь к приложению: Out of stack space.”

Проблемы Windows Operating System Out of stack space возникают при установке, во время работы программного обеспечения, связанного с Out of stack space, во время завершения работы или запуска или менее вероятно во время обновления операционной системы. Документирование проблем Out of stack space в Windows Operating System является ключевым для определения причины проблем с электронной Windows и сообщения о них в Microsoft Corporation.

Out of stack space Истоки проблем

Большинство проблем Out of stack space связаны с отсутствующим или поврежденным Out of stack space, вирусной инфекцией или недействительными записями реестра Windows, связанными с Windows Operating System.

В частности, проблемы с Out of stack space, вызванные:

  • Недопустимые разделы реестра Out of stack space/повреждены.
  • Зазаражение вредоносными программами повредил файл Out of stack space.
  • Другая программа (не связанная с Windows Operating System) удалила Out of stack space злонамеренно или по ошибке.
  • Другая программа находится в конфликте с Windows Operating System и его общими файлами ссылок.
  • Поврежденная загрузка или неполная установка программного обеспечения Windows Operating System.

Продукт Solvusoft

Загрузка
WinThruster 2022 – Проверьте свой компьютер на наличие ошибок.

Совместима с Windows 2000, XP, Vista, 7, 8, 10 и 11

Установить необязательные продукты – WinThruster (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление

Обработка ошибок в макросе VBA Excel

Я пытаюсь создать книгу для своих требований. Первый лист содержит ячейку типа «Текст», предназначенную для значения ДАТА.

Я добавляю метод Workbook_Open для установки сегодняшней даты при открытии книги, как показано ниже.

Private Sub Workbook_Open() Sheet1.Range('F6') = Date End Sub 

И я также добавляю метод Worksheet_Change для листа этой ячейки. Это для проверки, как показано ниже.

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = '$F$6' Then 'Getting insertion date. insertionDate = Sheet1.Range('F6') 'If date field is not empty If insertionDate <> '' Then Call MsgBox('Insertion Date must be inserted.') End If End If End Sub 

После этого я протестировал свой код. При открытии трудовой книжки я получил следующую ошибку.

Run-time error '28': Out of stack space 

При нажатии кнопки «Отладка» курсор отображается в первой строке метода Worksheet_Change.

Я перепробовал все, что думал. Но ничего не происходит. Помоги мне. Спасибо.

Получил с этим кодом. Меня это не устраивает, но моя проблема решена.

Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address = '$F$6' Then 'Getting insertion date. insertionDate = Sheet1.Range('F6') 'If date field is not empty If insertionDate <> '' Then Call MsgBox('Insertion Date must be inserted.') End If End If Application.EnableEvents = True End Sub 
  • Возможно, ваш код попал в рекурсивное триггерное событие.
  • Нет, я думаю, это причина “Multiple Sub”. Спасибо за совет.

Msgbox не нужно Call заявление. Попробуйте удалить Call и снова протестируем. И у меня есть ссылка на https://support.microsoft.com/en-us/kb/126090?wa=wsignin1.0. Возможно, это объясняет вашу ошибку.

Возможные источники ошибки отмечены в коде

Option Explicit ' Candidate Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = '$F$6' Then 'Getting insertion date. Dim insertionDate as String ' Candidate insertionDate = Sheet1.Range('F6').Text ' Candidate 'If date field is not empty If insertionDate <> '' Then MsgBox('Insertion Date must be inserted.') ' Candidate End If End If End Sub 

Убедитесь, что вы разместили Worksheet_Change в модуле листа.

  • Фактически, в другом модуле insertDate объявлен как Public. Спасибо за совет.

Tweet

Share

Link

Plus

Send

Send

Pin

t17fenics

0 / 0 / 0

Регистрация: 11.03.2015

Сообщений: 4

1

11.03.2015, 12:47. Показов 3671. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день.
Разбираюсь с формами VBA, написал следующий код.
Он выводит квадратный объект перемещающийся в замкнутой области по заданному алгоритму.
Скорость движения можно менять, так же выводится дополнительная информация(скорость, координаты, размеры рабочей области)
Проблема в том, что спустя несколько минут(3-5) после запуска программа вываливается в out of stack.
Никакие данные кроме отскоков не накапливаются. На момент переполнения буфера на максимальной скорости количество отскоков доходит до ~6000.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
Public Sub Form_Run()
 
''размеры рабочей области
x = 300
y = 300
 
 
wt = 20 ''начальная задержка между сдвигами(обратнопропорциональна скорости движения объекта
 
sh = 0.6 '' методом экспериментов установлено, что минимальный сдвиг объекта возможен на 0.50000000000000001(видимо в бесконечном периуде)
 
pong = -1 ''Счетчик отскоков
 
''Формирование формы
UserForm2.Frame1.Visible = True
UserForm2.TextBox1.Visible = False
UserForm2.TextBox2.Visible = False
UserForm2.Label1.Visible = True
UserForm2.Label2.Visible = True
UserForm2.Label3.Visible = True
UserForm2.Label4.Visible = True
 
UserForm2.Height = x
UserForm2.Width = y
 
UserForm2.Frame1.top = 1
UserForm2.Frame1.left = 1
UserForm2.Frame1.Height = UserForm2.Height - 161 ''100 на рабочую область, 21 на заголовки и бордюры
UserForm2.Frame1.Width = UserForm2.Width - 7 ''7 на бордюры
''методом экспериментов установлено, что рамка равна 7(3,5 на сторону), заголовок равен 14
 
 
UserForm2.CommandButton1.Width = 20
UserForm2.CommandButton1.Height = 20
UserForm2.CommandButton1.caption = ""
UserForm2.CommandButton1.top = UserForm2.Frame1.top - 1
UserForm2.CommandButton1.left = UserForm2.Frame1.left - 1
 
UserForm2.CommandButton2.Width = 40
UserForm2.CommandButton2.Height = 30
UserForm2.CommandButton2.caption = pong & vbNewLine & "stop"
UserForm2.CommandButton2.top = UserForm2.Frame1.Height + 100
UserForm2.CommandButton2.left = UserForm2.Frame1.Width / 2 - UserForm2.CommandButton2.Width / 2
 
UserForm2.Label1.Width = 30
UserForm2.Label1.Height = 20
UserForm2.Label1.top = UserForm2.Frame1.Height + 10
UserForm2.Label1.left = UserForm2.Frame1.left + 10
UserForm2.Label1.caption = UserForm2.CommandButton1.left
 
UserForm2.Label2.Width = 30
UserForm2.Label2.Height = 20
UserForm2.Label2.top = UserForm2.Frame1.Height + 40
UserForm2.Label2.left = UserForm2.Frame1.left + 10
UserForm2.Label2.caption = UserForm2.CommandButton1.top
 
UserForm2.Label3.Width = 150
UserForm2.Label3.Height = 20
UserForm2.Label3.top = UserForm2.Frame1.Height + 70
UserForm2.Label3.left = UserForm2.Frame1.left + 10
UserForm2.Label3.caption = UserForm2.Frame1.Width & " X " & UserForm2.Frame1.Height & "(" & UserForm2.Width & " X " & UserForm2.Height & ")"
 
UserForm2.Label4.Width = 30
UserForm2.Label4.Height = 20
UserForm2.Label4.top = UserForm2.Label2.top
UserForm2.Label4.left = UserForm2.Label2.left + UserForm2.Label2.Width + 20
UserForm2.Label4.caption = wt
 
UserForm2.SpinButton1.top = UserForm2.Label1.top
UserForm2.SpinButton1.left = UserForm2.Label1.left + UserForm2.Label1.Width + 20
 
UserForm2.Show
 
''запуск цикла
bottom_right
 
End Sub
 
 
 
Sub SleepVB(mSeconds)
 
DoEvents
Sleep mSeconds
 
End Sub
 
 
 
Public Sub repaint()
''Процедура обновления содержимого формы. Выполняется после каждого пересчета координат объекта
check
UserForm2.Label1.caption = UserForm2.CommandButton1.top
UserForm2.Label2.caption = UserForm2.CommandButton1.left
UserForm2.Label4.caption = wt
UserForm2.CommandButton2.caption = pong & vbNewLine & "stop"
 
''Процедура задержки
SleepVB wt
 
End Sub
 
 
Public Sub bottom_right()
''Следующие 4 процедуры проссчитывают движение объекта
Test1
 
Do While UserForm2.CommandButton1.top < UserForm2.Frame1.Height - 24 ''размеры кнопки 20+ бордюр 2 с каждой стороны
    UserForm2.CommandButton1.top = UserForm2.CommandButton1.top + sh
    UserForm2.CommandButton1.left = UserForm2.CommandButton1.left + sh
    repaint
    
    If UserForm2.CommandButton1.left > UserForm2.Frame1.Width - 25 Then
        bottom_left
    End If
Loop
 
top_right
 
End Sub
 
 
Public Sub top_right()
 
Test1
 
Do While UserForm2.CommandButton1.left < UserForm2.Frame1.Width - 24  ''226
    UserForm2.CommandButton1.top = UserForm2.CommandButton1.top - sh
    UserForm2.CommandButton1.left = UserForm2.CommandButton1.left + sh
    repaint
    
    If UserForm2.CommandButton1.top < UserForm2.Frame1.top Then
        bottom_right
    End If
Loop
 
top_left
 
End Sub
 
Public Sub top_left()
 
Test1
 
Do While UserForm2.CommandButton1.top > UserForm2.Frame1.top - 1
    
    UserForm2.CommandButton1.top = UserForm2.CommandButton1.top - sh
    UserForm2.CommandButton1.left = UserForm2.CommandButton1.left - sh
    repaint
    
    If UserForm2.CommandButton1.left < UserForm2.Frame1.left Then
        top_right
    End If
 
Loop
 
bottom_left
 
End Sub
 
Public Sub bottom_left()
 
Test1
 
Do While UserForm2.CommandButton1.left > UserForm2.Frame1.left - 1
 
    UserForm2.CommandButton1.top = UserForm2.CommandButton1.top + sh
    UserForm2.CommandButton1.left = UserForm2.CommandButton1.left - sh
    repaint
    
    If UserForm2.CommandButton1.top > UserForm2.Frame1.Height - 25 Then
        top_left
    End If
 
Loop
 
bottom_right
 
End Sub

Подскажите пожалуйста, в чем может быть проблема?



0



Night Ranger

Заблокирован

11.03.2015, 12:57

2

Вы не пробывали перевести ваше сообщение и понять что оно озночает ?
(Недостаточно места в памяти)



0



Апострофф

Заблокирован

11.03.2015, 13:15

3

Цитата
Сообщение от t17fenics
Посмотреть сообщение

check

Цитата
Сообщение от t17fenics
Посмотреть сообщение

Test1

Что означают эти загадочные буквосочетания?



0



0 / 0 / 0

Регистрация: 11.03.2015

Сообщений: 4

11.03.2015, 13:20

 [ТС]

4

Сорри, не вычистил при публикации.
Не обращайте внимание, это дополнительные процедуры. Проблема существовала с самого раннего этапа написания кода, когда этих процедур еще не было.
Там есть еще код, просто удалил его из публикации, чтоб не грузить, оставил каркас. Проблема именно в опубликованном коде, проверено 20 раз уже.



0



Апострофф

Заблокирован

11.03.2015, 13:24

5

Цитата
Сообщение от t17fenics
Посмотреть сообщение

out of stack

происходит обычно при непродуманном рекурсивном вызове процедур друг из друга, что наглядно демонстрирует ваш случай.



0



0 / 0 / 0

Регистрация: 11.03.2015

Сообщений: 4

11.03.2015, 13:32

 [ТС]

6

Хм. ошибка проявляется только после 6000 запусков этих процедур.
я так понимаю экземпляры процедуры остаются в памяти?
может быть как то можно прибить процедуру при переходе в следующую?



0



Night Ranger

Заблокирован

11.03.2015, 13:42

7

Воспользуйтесь ключевыми словами .. is Nothing, если не иностранец..



0



0 / 0 / 0

Регистрация: 11.03.2015

Сообщений: 4

11.03.2015, 14:23

 [ТС]

8

Вобщем осознал корень проблемы. Спасибо Апострофф

Код просчитывающий движение надо как то по другому писать. без бесконечного вызова процедур друг из друга.



0



I am working on some project that contains 276 forms in Excel 2010. What is the purpose of the application: form1 appears, users input something, press next and I validate the user input so I know what is the next form that the user needs to fill. And so goes on, but somewhere in the middle of the whole process I get the error 28: out of stack space.

I have searched the internet, but didn’t found any way to solve this, so the user won’t be interrupted in the middle of the application.

Basically, what I want is somehow to clear the stack, if it is possible.

EDIT:

Private Sub btnNext_Click()
    'Getting the column where I need to insert the value from the form
    Dim coll As Integer
    coll = findColumn("WP10200")

    'Getting the row where I need to insert the value from the form
    Dim row As Integer
    row = ActiveCell.row

    'Getting the user value from the textbox
    Dim val As String
    val = txtValue.Text

    If val >= 1 And val <= 4 Then
        Cells(row, coll).Value = val

        If val = 1 Then
            Unload Me
            WP10215.Show
        Else
            Unload Me
            WP10202.Show
        End If
    Else
        MsgBox "Not valid input"
    End If

End Sub

Function findColumn(CellVal As String) As Integer
    Dim rng As Range
    Dim cell As Range
    Dim coll As Integer

    Set rng = Range("A1:JC1")

    For Each cell In rng.Cells
        Dim tmp As String
        tmp = cell.Value

        If tmp = CellVal Then
            coll = cell.Column
            Exit For
        End If
    Next cell

    findColumn = coll

End Function

Private Sub UserForm_Initialize()
    Me.txtValue.SetFocus
End Sub

This code is almost same in all forms (with some exceptions, i.e. different input, displaying some other form and so on)

WP10200 – is the id of the question the user needs to input something. WP10215 and WP10202 too, they are forms like this one with some logic inside.

Some additional info, all of these forms are in one macro that the user can start, and than it fills the forms as they show up.

 

denis76

Пользователь

Сообщений: 22
Регистрация: 19.02.2013

#1

31.05.2016 15:23:02

Добрый день!

Столкнулся неожиданно с такой ситуацией: при вызове вложенной процедуры в VBA появляется указанное сообщение об ошибке:

Код
... out of stack space...

Собственно говоря, процедура довольно громоздкая, обрабатывает и пересчитывает массивы данных размером примерно 10000*200 ячеек… хотя работала до сего времени вполне нормально…

Собственно говоря, в чем здесь может быть причина появления такого сообщения:
– много переменных?
– большой размер переменных (массивов)?
– большое кол-во вызовов функций?
– вызов функций с аргументами в виде больших массивов (используется несколько раз такое)?

Какие тут способы решения имеются – может, надо как-то уничтожать переменные после использования, очищать стек – как это сделать?… Может, какие-то параметры в реестре надо подправить или еще где?.. Что известно по данному вопросу уважаемым специалистам?..

Спасибо заранее…

 

Sanja

Пользователь

Сообщений: 14849
Регистрация: 10.01.2013

Собственно говоря почему-бы не в

ПОИСК

?

Согласие есть продукт при полном непротивлении сторон.

 

denis76

Пользователь

Сообщений: 22
Регистрация: 19.02.2013

#3

31.05.2016 15:46:06

Хорошо…

Вот, смотрю, там 5 случаев указано, к моему может, видимо, это относиться:

Цитата
…Your local variables require more local variable space than is available.Try declaring some variables at the module level instead. You can also declare all variables in the procedure static by preceding the Property,Sub, or Function keyword with Static. Or you can use the Static statement to declare individual Static variables within procedures…

Все равно странно, больше всего ведь места массивы занимают, но не на них ошибка вылезает…
И как, получается, каждую что ли переменную надо в начале модуля объявлять заранее? А потом что, уничтожать надо или как?

Еще вот, смотрю в редакторе VBA – там такая закладка Call stack – почему-то в ней список в 50 с лишним процедур, когда у меня столько их одновременно не вызывается… и некоторые повторяются почему-то…
И вообще, как-то размер и заполненность этого стека можно ли узнать и регулировать?..

 

Нет файла – нет идей, что тут не понятно.

 

Игорь

Пользователь

Сообщений: 3643
Регистрация: 23.12.2012

Причина – большой размер массивов
10,000*200 = 2 млн ячеек – таких массивов много в памяти Excel не удержит

Как вариант еще одной причины, – вызов функций с аргументами в виде больших массивов
Массивы такие надо передавать как byRef в другие функции
(ну и вообще сделать в коде так, чтобы не создавались лишние копии такого большого массива, – а то памяти не хватит)

 

denis76

Пользователь

Сообщений: 22
Регистрация: 19.02.2013

#6

31.05.2016 16:12:19

Цитата
kalbasiatka написал: Нет файла – нет идей, что тут не понятно.

Глубоко сомневаюсь, что данный файл кому-то разбирать охота будет… но думаю, что основные варианты можно предположить и без его досконального исследования…

 

denis76

Пользователь

Сообщений: 22
Регистрация: 19.02.2013

#7

31.05.2016 16:14:51

Цитата
Игорь написал: Причина – большой размер массивов

Про массивы – да, все так, но ведь он не выдает Out of memory (это прошло с установкой 64-битной версии), а вот на стек именно ругается-то… А каков этот стек и его допустимый размер – мне пока неведомо…

 

denis76

Пользователь

Сообщений: 22
Регистрация: 19.02.2013

#8

31.05.2016 16:17:04

Цитата
Игорь написал: Массивы такие надо передавать как byRef в другие функции

Так вроде бы по умолчанию они так и передаются, нет разве?.. И вроде как лишних копий не делается…

Изменено: denis7601.06.2016 22:06:07

 

Hugo

Пользователь

Сообщений: 23365
Регистрация: 22.12.2012

Мне стека не хватало пару раз из-за рекурсии.

 

denis76

Пользователь

Сообщений: 22
Регистрация: 19.02.2013

Разобрался, в чем дело… когда начал код улучшать, нашел место, где процедуры вызывают одна другую поочередно…

 

Hugo

Пользователь

Сообщений: 23365
Регистрация: 22.12.2012

#11

01.06.2016 12:07:48

Т.е. тоже виновата рекурсия?

Добавить комментарий