Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6

Invalid procedure call or argument

17.08.2020, 11:43. Показов 2445. Ответов 26
Метки vba (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем
Есть такой скрипт:
Кликните здесь для просмотра всего текста

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
Sub AutoForm()
 
' --------------
' Перенос ячеек
' --------------
    Range("A3").Cut Range("C2")
 
    Range("A23").Cut Range("D2")
    Range("C23:C42").Cut Range("D3")
 
    Range("A43").Cut Range("E2")
    Range("C43:C62").Cut Range("E3")
 
    Range("A63").Cut Range("F2")
    Range("C63:C82").Cut Range("F3")
 
    Range("A83").Cut Range("G2")
    Range("C83:C102").Cut Range("G3")
 
    Range("A103").Cut Range("H2")
    Range("C103:C122").Cut Range("H3")
 
    Range("A123").Cut Range("I2")
    Range("C123:C142").Cut Range("I3")
 
    Range("A143").Cut Range("J2")
    Range("C143:C162").Cut Range("J3")
 
    Range("A163").Cut Range("K2")
    Range("C163:C182").Cut Range("K3")
 
    Range("A183").Cut Range("L2")
    Range("C183:C202").Cut Range("L3")
 
    Range("A203").Cut Range("M2")
    Range("C203:C222").Cut Range("M3")
 
    Range("A223").Cut Range("N2")
    Range("C223:C242").Cut Range("N3")
 
    Range("A243").Cut Range("O2")
    Range("C243:C262").Cut Range("O3")
       
' ----------------------
' Перемещение диаграммы
' ----------------------
'    ActiveSheet.Shapes("Диаграмма 1").IncrementLeft 46.3636220472
'    ActiveSheet.Shapes("Диаграмма 1").IncrementTop 316.3636220472
    
' ---------------------
' Изменение значений X
' ---------------------
'ActiveSheet.ChartObjects("Диаграмма 1").Activate
 
    ActiveSheet.ChartObjects("Диаграмма 1").Activate
    ActiveChart.FullSeriesCollection(2).Select
    ActiveChart.FullSeriesCollection(2).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(3).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(4).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(5).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(6).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(7).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(8).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(9).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(10).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(11).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(12).XValues = "=Лист1!$B$3:$B$22"
    
' ----------------------------
' Удаление прежних значений X
' ----------------------------
    Range("B23:B252").Select
    Selection.ClearContents
    
' ----------------------------
' Удаление заливки
' ----------------------------
    Cells.Select
    Range("B23").Activate
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
        
End Sub

Там, где кат-паст - я писал сам, а работу с графиком - через рекорд макрос.
При отладке спотыкается на строке
Visual Basic
1
ActiveSheet.ChartObjects("Диаграмма 1").Activate
с ошибкой
Run-time error '5': Invalid procedure call or argument

Ок, ординарной кавычкой закомментирую строки:
Visual Basic
1
2
    'ActiveSheet.ChartObjects("Диаграмма 1").Activate
    'ActiveChart.FullSeriesCollection(2).Select
Теперь код с графиком будет такой:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
ActiveChart.FullSeriesCollection(2).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(3).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(4).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(5).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(6).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(7).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(8).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(9).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(10).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(11).XValues = "=Лист1!$B$3:$B$22"
    ActiveChart.FullSeriesCollection(12).XValues = "=Лист1!$B$3:$B$22"
Почему отладчик спотыкается на первой строке?
Ошибка Run-time error '91': Object variable or With block variable not set
Куда и какой With мне втыкнуть?

Добавлено через 1 минуту
А, да, версия Excel 2013
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.08.2020, 11:43
Ответы с готовыми решениями:

Invalid procedure call or argument
здравствуйте, Ворд 2003, как можно на строке SelectionText = Selection.Text 'откидываем три первые буквы выделенного текста ...

Invalid procedure call or argument
здравствуйте, искал в интеренете ответа не нашел, для каждой задачи свое решение ошибка в этой строке For Each entry In...

Ошибка: Invalid procedure call or argument. Что не так?
Имеется код. Он вроде считает, а вроде и нет. Выдает ошибку: Invalid procedure call or argument. Private Sub CommandButton1_Click() ...

26
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
17.08.2020, 11:48
Matan!,
Visual Basic
1
Option Explicit
попробуйте в самое начало кода вставить и запустите
покажет где и какие переменные не заданы
1
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
17.08.2020, 11:54  [ТС]
КостяФедореев, перед Sub?
0
Заблокирован
17.08.2020, 11:56
Цитата Сообщение от Matan! Посмотреть сообщение
перед Sub?
как бы да, в самое начало модуля. Полезная штука, но здесь вряд ли поможет.
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
17.08.2020, 11:56  [ТС]
Цитата Сообщение от КостяФедореев Посмотреть сообщение
покажет где и какие переменные не заданы
Ни простым запуском, ни запуском с отладкой эта опция ничего не показала. Просто текст ошибок, которые я приводил выше..
0
sleep
 Аватар для I can
4930 / 4590 / 840
Регистрация: 13.04.2015
Сообщений: 9,740
17.08.2020, 11:58
Цитата Сообщение от КостяФедореев Посмотреть сообщение
Option Explicit
В данном случае мало поможет. Скорее всего на активном листе нет Диаграмма 1
1
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
17.08.2020, 12:01  [ТС]
Цитата Сообщение от passedbyz Посмотреть сообщение
Сам файл бы приложили с проблемой?
Файл с макросом или с данными?

Добавлено через 1 минуту
Я попробовал такое:
вместо
Visual Basic
1
ActiveSheet.ChartObjects("Диаграмма 1").Activate
пишу
Visual Basic
1
ActiveSheet.ChartObjects(1).Activate
получил такую ошибку:
Run-time error '1004': Application-defined or object-defined error
0
Заблокирован
17.08.2020, 12:02
Так сложно всё у нас? Упростите проблему до максимума (лишь бы она осталась), обезличте персональные данные...
1
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
17.08.2020, 12:03  [ТС]
Да, должен был сказать раннее.
Макрос у меня написан в отдельном файле. В файле с данными я просто выбираю и запускаю макрос из другого файла.

Добавлено через 51 секунду
Цитата Сообщение от passedbyz Посмотреть сообщение
Упростите проблему до максимума (лишь бы она осталась), обезличте персональные данные.
Сейчас состряпаю файл, попробую на нём
0
 Аватар для SlavaRus
1124 / 237 / 37
Регистрация: 15.03.2010
Сообщений: 728
17.08.2020, 12:23
Возсожно проблема как раз в том, что макрос находится в другой книге.
В коде явно книга не указана, эксель берет активную в данный момент книгу.
Не факт что так задумано.
Попробуй явно указать книгу и лист, к которому идет обращение в коде.
1
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
17.08.2020, 13:03  [ТС]
Пока экспериментировал, нашёл в чём проблема
Цитата Сообщение от SlavaRus Посмотреть сообщение
Возсожно проблема как раз в том, что макрос находится в другой книге.
Именно
Я-то, наивный, искушённый всякими си-шарпами и прочим, думал, что достаточно вызвать метод, потому в файле с макросом диаграмму не создал.

Потом, когда создал, увидел, что всё равно данные из файла с макросом задействуются, хотя я вызываю макрос в другом файле.

Решил перемещением моего скрипта в PERSONAL.XLSB (Личная книга макросов).
Ну, и везде в коде позаменял "Диаграмма 1" на 1.
Всем спасибо за участие

Добавлено через 17 минут
Цитата Сообщение от SlavaRus Посмотреть сообщение
В коде явно книга не указана, эксель берет активную в данный момент книгу.
Да, не указана, но ведь в данный момент времени активной может быть только одна книга?
Везде я обращаюсь к ActiveSheet.
0
 Аватар для SlavaRus
1124 / 237 / 37
Регистрация: 15.03.2010
Сообщений: 728
17.08.2020, 13:34
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

В vba необязательно должна быть активна книга, в которой нужно что-то изменить.
Для внесения изменений не нужны операторы select, activate. Главное правильно сослаться на нужный объект.
Книга, в которую вносится изменение должна быть открыта.
2
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
17.08.2020, 13:51  [ТС]
Цитата Сообщение от SlavaRus Посмотреть сообщение
Книга, в которую вносится изменение должна быть открыта.
Теперь понимаю - так как у меня макрос был записан в другой книге, то когда кликал по нему, активировалась эта самая другая книга.
0
Заблокирован
17.08.2020, 15:06
вот как раз тут и нужен OPTION EXPLICIT!
И объявление вовремя нужных листов и рэйнжев...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,699
Записей в блоге: 14
17.08.2020, 15:20
А где вы его запускаете? В первой строке стоит Range("A3"), а на каком листе этот диапазон? Option Explicit - не о том.

Добавлено через 1 минуту
Цитата Сообщение от Matan! Посмотреть сообщение
искушённый всякими си-шарпами и прочим, думал, что достаточно вызвать метод,
- ха-ха! Вызвать метод какого объекта? Ошибка 91 - именно об этом и говорит...
1
Заблокирован
17.08.2020, 15:21
Цитата Сообщение от Catstail Посмотреть сообщение
В первой строке стоит Range("A3"), а на каком листе этот диапазон?
на активном, тут как раз нет вопроса.
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
17.08.2020, 15:49  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Вызвать метод какого объекта? Ошибка 91 - именно об этом и говорит...
Хм..
Range() вроде эквивалентен .Range() или ActiveSheet.Range() .. Нет?
0
Заблокирован
17.08.2020, 16:57
Цитата Сообщение от Matan! Посмотреть сообщение
Range() вроде эквивалентен .Range() или ActiveSheet.Range() .. Нет?
Range() - это с активного листа или с того листа, где прописан код
.Range() - это про тот лист, где вы писали выше WITH SHEETS("ИМЯ_ЛИСТА")
ActiveSheet.Range() = ЭТО активный лист...
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,699
Записей в блоге: 14
17.08.2020, 18:01
Цитата Сообщение от passedbyz Посмотреть сообщение
на активном, тут как раз нет вопроса.
- добрый совет: в такие программы лист лучше передавать как параметр

Visual Basic
1
2
3
4
5
Sub .... (sh as WorkSheet,...)
 
   sh.Range(...)
 
End sub
А можно и Range передать. Тоже неплохо.
1
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
17.08.2020, 22:18
Цитата Сообщение от passedbyz Посмотреть сообщение
Range() - это с активного листа или с того листа, где прописан код
.Range() - это про тот лист, где вы писали выше WITH SHEETS("ИМЯ_ЛИСТА")
ActiveSheet.Range() = ЭТО активный лист...
добавлю

Range = ActiveBook.ActiveSheet.Range
.Range = вызовет ошибку если не в блоке With
ActiveSheet.Range = ActiveBook.ActiveSheet.Range
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.08.2020, 22:18
Помогаю со студенческими работами здесь

Run time error '5' invalid procedure call or argument
Option Explicit Sub Reshenie() Const e = 2.71828182846 Dim y As Double, A As Double, B As Double ' îáúÿâèë ïåðåìåííûå ...

Ошибка : Invalid procedure call of argument . Что не так ?
Private Sub Module1() Dim L, a, b As Double L = 14 a = 40 b = 30 Dim V As Double V = (L ^ 3 * Sin(2 * a) * Sin(b) * Cos(a)) /...

Ошибка: Run-time error '5', Invalid procedure call or argument
Вообщем сделал программу всё работала пока не дописал выражение до конца и тут бах ошибочка. Вот код: Private Sub CommandButton1_Click() ...

Функция Replace приводит к ошибке Run-time error ‘5’: Invalid procedure call or argument.
Прошу, подскажите в чем ошибка и как быть в следующей ситуации: Сбрасываю содержимое поля типа Гиперссылка в переменную типа String ...

Ошибка "Invalid procedure call or argument" при вычислении синуса
Вообщем такое дело,есть код: Private Sub CommandButton1_Click() x = CInt(TextBox1.Text) ' ввод значения x в форме ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru