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
Это естественно, откуда VBScript знает, что такое Cells? В этом случае нужно писать другой код. Получать через GetObject книгу, используя книгу получать активный лист и только тогда чего-то писать в Cells. Ну, или изучайте VBE
Будут созданы функции VBA и хранится они будут в ячейках excel или в текстовом отдельном документе и будут модифицироваться и нужно будет исполнять то что намодифицировалось
Цитата
Андрей VG написал: это естественно, откуда VBScript знает, что такое Cells? В этом случае нужно писать другой код. Получать через GetObject книгу, используя книгу получать активный лист и только тогда чего-то писать в Cells. Ну, или изучайте VBE
Пользователь, который не знаком с программированием, вряд ли напишет/модифицирет в ячейке толковый "код". Если же пользователь знаком с VBA - ему ничто не помешает написать отдельные функции/процедуры, которые будут вызываться в нужный момент по нужным условиям. В ЯЧЕЙКАХ зачем?
tod2020 написал: для дела нужно чтобы нужно чтобы например я присвоил текстовой перменной любой код VBA
Поделитесь - для какого дела? Единственное применение для ввода кода в процессе работы программы, которое я могу придумать - построение графика произвольной функции или решение произвольного уравнения. Пример: http://www.cyberforum.ru/visual-basic/thread723726.html Если Scriptcontrol больше недоступен программно - можно воспользоваться методом Андрей VG, создать скрипт на VBS/JS, который будет брать аргументы функции из текстового файла и записывать результаты в другой текстовый файл. В Excel можно вводить текст функции на языке формул (а не на бейсике) и вычислять в ячейке или с помощью Evaluate.
tod2020, ваша погоня за якобы универсальностью со стороны выглядит так: вместо того чтобы придумать и написать полностью рабочий код, Вы решаете дать возможность часть кода написать пользователю, в ячейку, и таким образом переложить на него ответственность, что вся эта конструкция может не работать! и дело не в перекладывании ответственности, а в том, что со старта придумано решение с большой дырой в коде, а "код в ячейку" - это попытка эту дыру прикрыть, но что-то мне подсказывает, что это попытка прикрыть другими дырами в коде, которые налепит не искушенный в программировании пользователь
не принимайте близко к сердцу. это взгляд со стороны на задачу, суть которой даже приблизительно не известна никому здесь, кроме Вас.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Ігор Гончаренко написал: суть которой даже приблизительно не известна никому здесь, кроме Вас.
я думаю она и не нужна, не нужно грузить людей лишним. По момему всё очень ясно просто: выполнить комнадную строку которая взята из ячейки функция EVALUATE же создана по код-формулы excel ? думаю создана другая функция под код- формулы VBA Нужен аналог evaluate для VBA
Ігор Гончаренко: суть которой даже приблизительно не известна никому здесь, кроме Вас... tod2020: я думаю она и не нужна, не нужно грузить людей лишним.
Вот это зря. Если Вы обратились за помощью, то подразумеваее, что на форме есть люди опытнее Вас. Зная задачу, легче давать правильные советы. Специалистам Ваша задача кажется по меньшей мере странной, а объяснить конечную цель Вы не хотите.
Я тоже склоняюсь к мысли, что то, что Вы хотите реализовать, далеко от оптимальности и здравого смысла
Цитата
хранение в ячейках повышает удобство, наглядность
Если уж пользователь сможет написать код в ячейке, то кто ему мешает написать это в редакторе?! Ведь там и проще, и нагляднее. и ошибки проверить можно...
И что оно у Вас выполняет? Где исполнение кода, взятого из ячейки?
Ваша "задумка" в моей реализации (если вдруг патентовать надумаете - я в соавторах! ):
Код
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