Страницы: Пред. 1 2
RSS
VBA как исполнить код взятый из ячейки?
 
Нужен аналог evaluate для VBA
Изменено: tod2020 - 29.10.2017 13:16:13
 
Вы спрашиваете то, что Вам и так УЖЕ дали (в ответах есть подсказки в чем и как можно выполнить код. разбирайтесь и пользуйтесь)
понимаете, если в Evaluate написать ерунду - она тоже ничего не вычислит и вообще может упасть по ошибке.
не пишите ерунды в
scriptcontrol
или в
vbs-файл
и все они посчитают

удачи!
Изменено: Ігор Гончаренко - 29.10.2017 13:31:29
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Нужен аналог evaluate для VBA
Он не существует (невозможен)
По крайней мере, для 64-битных систем

Не верите?
Что ж, докажите, сделав работающий пример
А пока делаете, может поймете, что это тупиковый путь

PS: Я в некоторых своих проектах храню код отдельно (типа как у вас, в ячейке)
но при необходимости его запуска, программно создаю стандартный модуль, вставляю туда этот код (в виде макроса или списка макросов),
и запускаю.
Но это касается макросов целиком. Кусок кода так выполнить не получится.

PPS: как бы есть решение, которое можно запустить и на 64-битной системе (через HTA), я делал как-то, и это даже работало,
но все антивирусы начинали сильно ругаться при проверке такого файла (а я делал макрос для распространения), потому, отказался от этой затеи.
 
tod2020, посмотрите тему. Там в примере из #9 - пользовательская_функция (рабочего листа),
последний аргумент в которой - текст формулы.
Может надо типа этого ?
 
1.Один модуль может корректировать другой модуль?
2.ИЛИ Может один модуль экспортировать модуль в виде фала bas отредактировать и обратно импортировать и выполнить?
Изменено: tod2020 - 30.10.2017 11:40:08
 
В коде VBA можно изменять строки кода в модулях
Но вопросы не по теме
 
Дак тогда копируем из ячейки код и вставляем его в модуль в процедуру и выполняем
 
Вся тема о том, как выполнить код из ячейки. Изменение кода программно - совсем другая тема. Не нужно делать из темы солянку.
 
Спасибо за то что навели на мысли такие:
коррекция одного модуля другим

ну и за различнеы иные варианты и старания
 
Поздновато, но все же: раз так хочется выполнять код, записав в ячейке - изучайте язык Майя :) А точнее язык макросов 4.0, которые писались исключительно на листах макросов 4.0. Язык довольно древний, но пока что продолжает поддерживаться Microsoft. Сейчас по большей части функции этого языка известны как "макрофункции".
Использовать такие макросы можно только листах макросов, которые добавляются в книгу так: правая кнопка мыши на ярлыке любого листа -Вставить -Макрос MS Excel 4.0.
Но тут так же придется учесть, что справка по этим функциям давным-давно устарела и их использование очень сильно отличается от удобного VBA. Но зато это полностью отвечает требованиям - выполнить код, записав его в ячейку.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вот работает:

ЗАПУСКАЕМ PROC000 и волшебство проиходит
MODULE1
Код
1
2
3
Sub proc001()
Cells(5, 1).Value = 555
End Sub

MODULE2
Код
1
2
3
4
5
6
7
8
9
Sub proc000()
Call proc002
Call proc001
End Sub
 
Sub proc002()
ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule.DeleteLines (2)
ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule.InsertLines 2, [A1]
End Sub


ниже файл с кнопкой для исполнения

Я молодец?
Изменено: tod2020 - 01.11.2017 21:45:00
 
Не похвалят)))
 
Безусловно молодец. Но никакого открытия или чего-то, что здесь было бы кому-то неизвестно, Вы не сделали.
И не забывайте, что если будет отключено доверие к проекту VBA или проект будет защищен паролем - задумка поломается и работать перестанет.
Ну и конечно, статичная замена конкретной строки может повлечь ошибки, если вдруг в ячейку будет занесен текст, содержащий переносы строк. Это тоже советую учесть, если оно может иметь место быть.

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

нельзя нельзя нельзя нельзя.....
Изменено: tod2020 - 31.10.2017 19:35:21
 
дайте цитат с "нельзя!"

а вот недоумения "зачем?" было полно. думали немного по другому, но люди воспитанные, поэтому писали "зачем?" все это
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
дайте цитат с "нельзя!"
меня глючит и получается что только такое впечатление у меня сложилось лишь
 
Цитата
tod2020 написал:
все почемуто начали говорить о невозможности исполнения кода в ячейках
Нет уж - давайте конкретно: кто все? По именам (никам). И где эти "нельзя"?
 
А это потомучто так нудно читать много воды и я не внимательно потому читаю потомучто ой как нудно и не хочеться
Я люблю лаконичность, сам стараюсь без лишних слов прилюдий и церемнойи, потомучто дел много а распыляться на это ой как не хочется

Этим объяснением может я стану понятнее и мои поступки станут понятнее
Изменено: tod2020 - 31.10.2017 20:12:31
 
Цитата
tod2020 написал:
и я не внимательно потому читаю
Так читайте внимательно и не возводите напраслину на форумчан, утверждая то, чего не было.
Страницы: Пред. 1 2
Читают тему
Наверх
Loading...