|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
Делаю на VBA в Excel построение графиков. Много графиков на одном. Есть несколько столбцов в Excel. Первый - это координата X, остальные столбцы - это Y. Количество строчек в столбце xk=1600. Если в программе задавать количество строчек около 30, то нормально работает, а когда ставлю 1600, вылезает ошибка: "Run-time error '1004' application-defined or object-defined error". Как я понимаю, это из-за присвоения oRange = aryX. А как поправить не знаю. Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2016, 09:13 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
Начать с того, что необходимо точно определить тот оператор, при выполнении которого возникает ошибка. Далее - присваивать переменной одного типа значение из переменной другого типа есть моветон. Автоконвертация типов не обязана уметь преобразовать что угодно во что угодно, да ещё и корректно. А ещё - объекты следует квалифицировать полностью. Вот мало ли какая именно коллекция из многочисленных Cells будет использоваться кодом... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2016, 10:54 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
Ошибку я исправил так: создал еще одну переменную и результат записал в нее. Код: vbnet 1. 2. 3. 4.
Но теперь возникла другая проблема. Хочу отнормировать графики на максимальное значение. Оно считается верно. Но нормировки не происходит почему-то. Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2016, 11:18 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
С максимумом разобрался. Теперь вопрос такой: как сделать, чтобы значения в ячейках не перезаписывались? А то получается, что после расчетов, в ячейки записываются уже отнормированные значения. Я вроде как их в ячейки не записываю, а только в переменную. А они почему-то оказываются в ячейках. Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2016, 11:42 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
merkinЯ вроде как их в ячейки не записываю, а только в переменную а на что, по-Вашему переменная ссылается? merkin Код: vbnet 1. 2. 3. 4.
обращаю внимание - oRange и oRange2 это ссылки на один и тот же диапазон. Т.е. они равны. Т.к. это объект-ссылка на диапазон - то все действия с одним или вторым влияют на оба(oRange и oRange2) и на исходный диапазон Range(Cells(1, MyCols(CurveNumber)), Cells(Xk, MyCols(CurveNumber))) потому как переменные эти - лишь ссылки на исходный диапазон, а не какая-то локальная и независимая копия диапазона. Иначе бы манипуляции со значениями таких объектов никак не отразились бы ни на графике, ни на листе. И как следствие, назначение ячейкам массива oRange2 каких-то значений отразится и на oRange и на исходном диапазоне: Код: vbnet 1. 2. 3.
учите матчасть, учите :) по сути oRange2 вообще не нужен. Вы зря думали, что он будет работать независимо от исходного и от oRange. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2016, 20:47 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
merkin, по сути, Вам вероятно, можно так сделать. Заменить этот блок: Код: vbnet 1. 2. 3. 4. 5.
таким: Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2016, 20:48 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
merkin, Эта строка работать не будет. oRange2 = aryX ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2016, 08:22 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
i45, почему же? По умолчанию объект Range применяет свойство .Value. Т.е. запись равносильна такой: Код: vbnet 1.
т.е. значения ячеек диапазона oRange2 будут заменены значениями массива aryX. Почему же это не должно работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2016, 10:50 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
Работоспособность (а если работоспособна - то правильность этой работы) этой конструкции зависит от типа переменной aryX. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2016, 16:40 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
Akinaзависит от типа переменной aryX Код: vbnet 1.
поэтому работоспособность этой части у меня лично не вызывает вопросов :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2016, 19:50 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
Variant - это общий тип. А для инициализироанной переменной это Variant/Что-то. И вот отэтого "что-то" всё изависит. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2016, 20:42 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
Akina, мы же приложенный код обсуждаем? Там нет причин, почему бы не работала строка oRange2.Value = aryX. Ведь переменная aryX объявлена с общим типом и далее по коду первое присвоение данных, которое идет это как раз назначение массива из диапазона ячеек. Плюс не вижу причин неработы даже в том случае, если ранее по коду переменной передавалось значение иного типа. Вот, например, код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
будет работать без проблем, хотя переменной типа Variant по ходу кода назначаются значения разных типов. Т.е. опять же - в изначальном коде автора это не вызовет ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2016, 08:53 |
|
Ошибка в простом коде
|
|||
---|---|---|---|
#18+
The_Pristмы же приложенный код обсуждаем? Там нет причин, почему бы не работала строка oRange2.Value = aryX. Ведь переменная aryX объявлена с общим типом и далее по коду первое присвоение данных, которое идет это как раз назначение массива из диапазона ячеек. Пардон, меня всегда смущает раздел - вернее, то, что именно в нём, а не в разделе MS Office, публикуются вопросы по VBA. Хотя тянет отвечать на них как на вопросы по VB. Да, в данном конкретном случае, ибо Excel VBA, переменная aryX после присвоения ей объекта Range получает субтип Array of Variant. Возражения снимаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2016, 11:36 |
|
|
start [/forum/topic.php?fid=60&fpage=20&tid=2155456]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 117ms |
0 / 0 |