0 / 0 / 0
Регистрация: 12.03.2020
Сообщений: 9

Ошибка "Subscript out of range"

14.03.2020, 12:07. Показов 26497. Ответов 15

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые знатоки, обращаюсь к Вам от безысходности. Имеется следующий цикл:
Visual Basic
1
2
3
4
5
6
Do Until Workbooks(НазваниеКниги).Worksheets(НазваниеЛиста).Cells(НомерСтроки, j) = ""
    With Workbooks(НазваниеКниги)
        Worksheets(НовыйЛист).Cells(СтрокаВывод, j) = Worksheets(НазваниеЛиста).Cells(НомерСтроки, j)
    End With
    j = j + 1
    Loop
Весь код работает, но когда дело доходит до него, ругается мол строка "Subscript out of range":
Visual Basic
1
Worksheets(НовыйЛист).Cells(СтрокаВывод, j) = Worksheets(НазваниеЛиста).Cells(НомерСтроки, j)
Понятия не имею в чем дело, вроде бы всем переменным значения присвоены, берутся они все из формы, куда все предварительно вводится, а ругается еще при первом действии, т.е. цикл по факту не начался.
Вложения
Тип файла: rar Книга1.rar (765.6 Кб, 11 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.03.2020, 12:07
Ответы с готовыми решениями:

Ошибка subscript out of range
В исходной матрице найти количество чётных элементов, больших 4, и нечётных элементов, меньших 67. Выдает ошибку subscript out of range....

Ошибка subscript out of range
Доброго дня уважаемые светлые головы. По данному вопросу много тем, но я так понимаю, что в каждом отдельном случае причина и одна и много...

Ошибка Subscript out of range
Здравствуйте, пытаюсь решить задачу, но столкнулся с проблемой в виде ошибки Subscript out of range Option Base 1 Sub prim4() ...

15
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37974 / 21007 / 4300
Регистрация: 12.02.2012
Сообщений: 34,567
Записей в блоге: 14
14.03.2020, 12:43
Эта ошибка может возникнуть, если отсутствует один из листов книги (не только из-за массивов)
0
0 / 0 / 0
Регистрация: 12.03.2020
Сообщений: 9
14.03.2020, 12:46  [ТС]
Да, я прекрасно понимаю, но я клацал debug и смотрел, что вместо переменных все названия листов и книг присутствуют, просто не могу понять в чем проблема
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37974 / 21007 / 4300
Регистрация: 12.02.2012
Сообщений: 34,567
Записей в блоге: 14
14.03.2020, 12:47
А чему равно j?
0
0 / 0 / 0
Регистрация: 12.03.2020
Сообщений: 9
14.03.2020, 12:51  [ТС]
j=1, а все названия предварительно вводятся в форме и в тестбоксы и потом беруться оттуда. Сам уже второй день сижу и туплю, может не замечаю чего-то
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12179 / 5029 / 805
Регистрация: 07.08.2010
Сообщений: 14,831
Записей в блоге: 4
14.03.2020, 13:25
Цитата Сообщение от pasha7598 Посмотреть сообщение
Workbooks(НазваниеКниги).Worksheets(Назв аниеЛиста).Cells(НомерСтроки, j)
вот и проверьте значения переменные
- явно где то нет значения
- или НомерСтроки<=0 или j<=0
0
224 / 135 / 45
Регистрация: 08.09.2012
Сообщений: 283
Записей в блоге: 1
14.03.2020, 13:28
Цитата Сообщение от pasha7598 Посмотреть сообщение
Сам уже второй день сижу и туплю, может не замечаю чего-то
здравствуйте!
Просто не надо выделываться и убирать Option Explicit
В результате у Вас полный бардак в переменных.
У меня при попытке запуска Вашего кода ошибка проявилась на строке
Visual Basic
1
If Abs(x - x0) < Отклонение Then
так как в необъявленных переменных находился текст и была попытка произвести с ним вычитание и т. д.
Дальше не смотрел.
1
Модератор
Эксперт MS Access
 Аватар для shanemac51
12179 / 5029 / 805
Регистрация: 07.08.2010
Сообщений: 14,831
Записей в блоге: 4
14.03.2020, 13:35
у вас нет в модулях обязательной строки Option Explicit и у вас не проходит компиляция
следовательно невозможно гарантировать выполнение и то, что другой модуль знает это имя

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
Private Sub ComboBox1_Change() ' список листов в открытой книге
    Dim Sheet As Worksheet: ComboBox2.Clear
    Dim НазваниеЛиста As String
    For Each Sheet In Workbooks((ComboBox1)).Worksheets
            Me.ComboBox2.AddItem (Sheet.Name)
    Next
    НазваниеЛиста = UserForm1.ComboBox2.Text
End Sub
Private Sub CommandButton1_Click()
    Dim НомерСтроки As Integer
    Dim НомерСтолбца As Integer
    Dim Режим As Single
    Dim Показания As Single
    Dim Точка As Single
    Dim НовыйЛист As String
    Dim СтрокаВывод As Integer
    Dim Отклонение As Single
    НомерСтроки = UserForm1.TextBox4.Value
    НомерСтолбца = UserForm1.TextBox5.Value
    Режим = UserForm1.TextBox2.Value
    Показания = UserForm1.TextBox3.Value
    Точка = Round(Режим / Показания, 0)
    НовыйЛист = UserForm1.TextBox6.Text
    НазваниеКниги = UserForm1.ComboBox1.Text    ''''' неизвестное имя
1
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,105
14.03.2020, 15:24
Лучший ответ Сообщение было отмечено pasha7598 как решение

Решение

pasha7598, смотрю на строки кода (рар у меня не читается) и думаю, а зачем там оператор With?
Если Worksheets(НовыйЛист) и Worksheets(НазваниеЛиста) находятся оба в Workbooks(НазваниеКниги), то он просто не нужен, а если книги разные, то тогда ясно почему вылетает ошибка, надо перед одним из листов поставить точку.

Добавлено через 2 минуты
Или активной в момент выполнения этого кода является не та книга, которую вы бы хотели

Добавлено через 32 минуты
т.к. оператор Do Until .... проходит, то выведите (или посмотрите в дебугере) до With значение переменной НовыйЛист и всё, думаю, станет ясно.
1
0 / 0 / 0
Регистрация: 12.03.2020
Сообщений: 9
14.03.2020, 21:36  [ТС]
НомерСтроки он точно положителен, ведь он вводится собственноручно с клавиатуры, а j зарание присвоено 1

Добавлено через 1 минуту
Просто в моем случае это определенно будут цифры и текста там оказаться не может никоим образом. Просто задача стоит такая, что нужно выбрать момент выхода установки на стационарный режим, так что возможно у Вас там где-то попался текст

Добавлено через 2 минуты
О боже, да, спасибо, заработало и как я мог забыть, что там нужна точка. Безумно благодарен за помощь.
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,447
14.03.2020, 22:01
pasha7598,
Попробуйте перед обоими точки :
Visual Basic
1
.Worksheets(НовыйЛист).Cells(СтрокаВывод, j) = .Worksheets(НазваниеЛиста).Cells(НомерСтроки, j)
и здесь...
Visual Basic
1
2
 
.Worksheets(НовыйЛист).Cells(СтрокаВывод+1+ m, v) = .Worksheets(НазваниеЛиста).Cells(НомерСтроки+ 2) + i, v)
1
Модератор
Эксперт MS Access
 Аватар для shanemac51
12179 / 5029 / 805
Регистрация: 07.08.2010
Сообщений: 14,831
Записей в блоге: 4
14.03.2020, 22:36
Цитата Сообщение от pasha7598 Посмотреть сообщение
ведь он вводится собственноручно с клавиатуры
да, номер строки вводится в форме, но не запоминается в public - переменную, так что в основном коде номер неизвестен
когда я вставила Option Explicit во все модули - компиляция не проходит
0
0 / 0 / 0
Регистрация: 12.03.2020
Сообщений: 9
14.03.2020, 23:01  [ТС]
Честно сказать, за это уже не совсем шарю, ибо чему в универе научили, тем и пытаюсь пользоваться, кручусь как могу, чтобы выполнить задачу
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,105
15.03.2020, 05:16
Цитата Сообщение от pasha7598 Посмотреть сообщение
чему в универе научили, тем и пытаюсь пользоваться
если будете пользоваться только университетскими знаниями, то ничего хорошего не получится, надо и самостоятельно получать дополнительные знания
Цитата Сообщение от Narimanych Посмотреть сообщение
Попробуйте перед обоими точки
если книги разные, то получите снова "Subscript out of range"
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,447
15.03.2020, 12:20
Цитата Сообщение от Burk Посмотреть сообщение
Сообщение от Narimanych
Попробуйте перед обоими точки
если книги разные, то получите снова "Subscript out of range"
Спасибо за просвещение...

В коде у него оба листа прописаны в одной и той же книге.
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,105
15.03.2020, 12:48
Narimanych, я и написал слово ЕСЛИ и что файл у меня не открылся. И про смену активного листа тоже

Добавлено через 7 минут
И писал это для автора, ваш уровень мне известен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2020, 12:48
Помогаю со студенческими работами здесь

Ошибка Subscript out of range
Зачастую вылетает ошибка.Пожайлуста помогите найти Sub Вычислить() Dim matr() As Single 'Объявление динамического массива Dim y, u,...

Ошибка - Subscript out of range
Объясните пожалуйста, что я делаю не так? Хочу просто скопировать Лист1 в другую книгу (уже открытую), в книге &quot;2.xlsx&quot; 33...

Ошибка Subscript out of range при вычислениях
Sub Zadacha4() Dim a As Integer Dim b As Integer Dim x(1 To 7) As Integer Dim l(1 To 5) As Integer Dim Sum1...

Ошибка при добавлении в массив - Subscript out of range
здравствуйте в коде при добавлении в массив получаю ошибку Sub s() Dim CountИменаTitleTag As Long CountИменаTitleTag = 0...

Ошибка в сравнении двух массивов (Subscript out of range)
Уважаемые форумчане, здравствуйте, есть программа сравнения двух массивов (прикрепленный файл). Если в правом массиве нет строки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru