Страницы: 1 2 След.
RSS
VBA как исполнить код взятый из ячейки?
 
как исполнить код взятый из ячейки?
Изменено: tod2020 - 28.10.2017 12:53:15
 
Код
Sub tt()
    With CreateObject("scriptcontrol")
        .Language = "VBScript"
        .AddCode ([a1])
    End With
End Sub

Но:
Цитата
Игорь написал:
MS Script Control существует только в 32-битной версии
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=69772
Изменено: Hugo - 28.10.2017 13:04:38
 
каааак????? всё пропало
Изменено: tod2020 - 28.10.2017 13:22:31
 
Доброе время суток
Цитата
tod2020 написал:
всё пропало
Почему? Можно ведь и так
Код
Public Sub RunVBScriptFromCellCode()
    Dim fso As Object
    Dim pStream As Object
    
    Dim runFile As String
    Set fso = CreateObject("Scripting.FileSystemObject")
    runFile = Environ$("TEMP") & "\runFile.vbs"
    Set pStream = fso.CreateTextFile(runFile, True)
    pStream.Write Range("A1").Value
    pStream.Close
    Shell "wscript " & runFile
End Sub
 
А может существует так?:
Код
perem= "код в виде текста"
функция (perem)

или
Код
Application.функция (perem)
Изменено: tod2020 - 28.10.2017 14:08:00
 
Цитата
tod2020 написал:
А может существует так?:
И что говорит по этому поводу Google и MSDN?
С другой стороны, вы можете оформить предложенный код функцией с параметром текст выполняемого кода.
 
Цитата
Андрей VG написал:
И что говорит по этому поводу Google и MSDN?
есть
Код
application.evaluate

но это исполнение в редакторе vba формлу ячеек.
Это всё что удалось нарыть
Изменено: tod2020 - 29.10.2017 10:58:01
 
Цитата
Андрей VG написал: Почему? Можно ведь и так
УЖЕ
Код
Cells(5, 1).Value = 500 

не работает
Должна быть простая встроенная функция, которая исполняет код в виде взятого откудато текста из ячейки или из перменной
Изменено: tod2020 - 29.10.2017 12:41:58
 
ВЫЧИСЛИТЬ()
Согласие есть продукт при полном непротивлении сторон
 
интересная функция но она не может выполнить "MsgBox "получилось""
 
Что значит 'выполнить "MsgBox "получилось""'? Вывести сообщение? Какой код РЕАЛЬНО Вам нужно выполнить?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал: Что значит 'выполнить "MsgBox "получилось""'? Вывести сообщение? Какой код РЕАЛЬНО Вам нужно выполнить?
для дела нужно чтобы нужно чтобы например я присвоил текстовой перменной любой код VBA
например :
Код
"Cells (5,1) = 100" 

или
Код
"MsgBox "привет"""

и функция выполнила код содержащийся в переменной
 
Цитата
tod2020 написал:
Cells(5, 1).Value = 500
Это естественно, откуда VBScript знает, что такое Cells? В этом случае нужно писать другой код. Получать через GetObject книгу, используя книгу получать активный лист и только тогда чего-то писать в Cells. Ну, или изучайте VBE
 
А смысл в этой задумке?
 
Будут созданы функции VBA и хранится они будут в ячейках excel или в текстовом отдельном документе и будут модифицироваться и нужно будет исполнять то что намодифицировалось

Цитата
Андрей VG написал: это естественно, откуда VBScript знает, что такое Cells? В этом случае нужно писать другой код. Получать через GetObject книгу, используя книгу получать активный лист и только тогда чего-то писать в Cells. Ну, или изучайте  VBE
Понятно. Нужно найти универсальное средство тогда
 
Пользователь, который не знаком с программированием, вряд ли напишет/модифицирет в ячейке толковый "код". Если же пользователь знаком с VBA - ему ничто не помешает написать отдельные функции/процедуры, которые будут вызываться в нужный момент по нужным условиям.
В ЯЧЕЙКАХ зачем?
 
Цитата
Юрий М написал:
В ЯЧЕЙКАХ зачем?
хранение в ячейках повышает удобство, наглядность
 
Цитата
Юрий М написал:
Пользователь, который не знаком с программированием, вряд ли напишет
я понимаю но это не для моего случая
 
Цитата
tod2020 написал:
Нужно найти универсальное средство тогда
соглашусь с Юрием, вряд ли кто занимался подобной нелепицей. Так что скорее всего подобное универсальное вам придётся писать самому.
Успехов
 
Цитата
tod2020 написал:
Будут созданы функции VBA и хранится они будут в ячейках excel или в текстовом отдельном документе
Этим "текстовым документом" и будет модуль ))
По теме: я не знаю, как это реализовать, но утверждение
Цитата
tod2020 написал:
хранение в ячейках повышает удобство, наглядность
мне кажется сомнительным.
 
Цитата
tod2020 написал:
для дела нужно чтобы нужно чтобы например я присвоил текстовой перменной любой код VBA
Поделитесь - для какого дела?
Единственное применение для ввода кода в процессе работы программы, которое я могу придумать - построение графика произвольной функции или решение произвольного уравнения. Пример: http://www.cyberforum.ru/visual-basic/thread723726.html
Если Scriptcontrol больше недоступен программно - можно воспользоваться методом Андрей VG, создать скрипт на VBS/JS, который будет брать аргументы функции из текстового файла и записывать результаты в другой текстовый файл.
В Excel можно вводить текст функции на языке формул (а не на бейсике) и вычислять в ячейке или с помощью Evaluate.

PS Пардон, долго писал сообщение.
Изменено: Казанский - 29.10.2017 11:59:42
 
Всё должно быть просто
Изменено: tod2020 - 29.10.2017 12:00:50
 
tod2020,
ваша погоня за якобы универсальностью со стороны выглядит так:
вместо того чтобы придумать и написать полностью рабочий код, Вы решаете дать возможность часть кода написать пользователю, в ячейку, и таким образом переложить на него ответственность, что вся эта конструкция может не работать!
и дело не в перекладывании ответственности, а  в том, что со старта придумано решение с большой дырой в коде, а "код в ячейку" - это попытка эту дыру прикрыть, но что-то мне подсказывает, что это попытка прикрыть другими дырами в коде, которые налепит не искушенный в программировании пользователь

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

Цитата
Ігор Гончаренко написал:
что вся эта конструкция может не работать!
будет введено "On Error"
Изменено: tod2020 - 29.10.2017 12:33:38
 
Цитата
Ігор Гончаренко написал:
суть которой даже приблизительно не известна никому здесь, кроме Вас.
я думаю она и не нужна, не нужно грузить людей лишним.
По момему всё очень ясно просто: выполнить комнадную строку которая взята из ячейки
функция EVALUATE же создана по код-формулы excel ?  думаю создана другая функция под код- формулы VBA
Нужен аналог evaluate для VBA
Изменено: tod2020 - 29.10.2017 12:32:58
 
Цитата
Ігор Гончаренко: суть которой даже приблизительно не известна никому здесь, кроме Вас...
tod2020: я думаю она и не нужна, не нужно грузить людей лишним.
Вот это зря. Если Вы обратились за помощью, то подразумеваее, что на форме есть люди опытнее Вас. Зная задачу, легче давать правильные советы. Специалистам Ваша задача кажется по меньшей мере странной, а объяснить конечную цель Вы не хотите.

Я тоже склоняюсь к мысли, что то, что Вы хотите реализовать, далеко от оптимальности и здравого смысла :)
Цитата
хранение в ячейках повышает удобство, наглядность
Если уж пользователь сможет написать код в ячейке, то кто ему мешает написать это в редакторе?! Ведь там и проще, и нагляднее. и ошибки проверить можно...
 
...
Изменено: tod2020 - 29.10.2017 13:13:21
 
И что оно у Вас выполняет? Где исполнение кода, взятого из ячейки?

Ваша "задумка" в моей реализации (если вдруг патентовать надумаете - я в соавторах! :)):
Код
Sub Func1()
Cells(6, 1).Value = "MsgBox(ccc)" ' в ячейку записываем строку кода
Cells(6, 2).Value = "получилось" ' в ячейку записываем текст
xxx = Cells(6, 1).Value ' строка кода из ячейки в переменную
ссс = Cells(6, 2).Value ' ' текст из ячейки в переменную
Debug.Print  ActiveSheet.Evaluate (ххх) ' выполняем код?
End Sub
 
так, поспешил
 
tod2020, а чем предложенный Вами код будет отличаться от такого?
Код
Sub Func1()
ccc = "получилось!"
'Cells(6, 1).Value = 600
'xxx = "Cells(6, 1).Value = 600"
'ActiveSheet.Evaluate (xxx)
'ActiveSheet.Evaluate (MsgBox(ccc))
MsgBox ccc
End Sub



Страницы: 1 2 След.
Читают тему
Наверх