Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2012, 19:56   #1
aNJay
 
Регистрация: 22.12.2012
Сообщений: 7
По умолчанию VBA: передать "математическое действие" переменной

Помогите решить такую задачку.
Нужно передать "математическое действие" переменной.
что то типа:
Код:
... 
fnSum(2, "+", 3)
.... 
 
Function fnSum(a As Double, x As String, b As Double) 
fnSum = ' ??? (2+3) 
End Function
p.s. перебор не канает, там не одно действие.
aNJay вне форума Ответить с цитированием
Старый 22.12.2012, 20:34   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Во вложении форма калькулятора.
Импортируете ее в проект VBA.
Посмотрите код,напишете функцию под себя на основе процедуры
ProcessKey
Вложения
Тип файла: rar Калькулятор.rar (14.4 Кб, 15 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 22.12.2012, 20:47   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

задачку решает application.Evaluate
вычисляет выражение заданное строкой.
понимает математические операции, элементарные функции, скобки...
application.Evaluate("(5-3)^3+cos(0)+log(10)") - вернет 8+1+1 = 10.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 23.12.2012, 00:29   #4
aNJay
 
Регистрация: 22.12.2012
Сообщений: 7
По умолчанию

спасибо, попробую.
IgorGO
В MSWord Evaluate() не работает,
есть у Ворда аналог етой функції.

Последний раз редактировалось aNJay; 23.12.2012 в 00:32.
aNJay вне форума Ответить с цитированием
Старый 23.12.2012, 12:54   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Selection.InsertFormula Formula:="=(143-5*8)", NumberFormat:=""
в результате в документ вставлено поле и посчитано его значение 103.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.12.2012, 22:26   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Можно использовать внешний объект - работает в VBA любого приложения и в VBS:
http://www.cyberforum.ru/vbscript-ws...ml#post3734478
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 25.12.2012, 09:08   #7
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Более подробное описание того, что предложено в сообщении #6.

Раннее связывание

Подключаем библиотеку объектов:
Tools - References... - MS Script Control версия.
Код:
Sub Макрос3()
    
    'Создаём переменную "oScript",
    'создаём объект "MSScriptControl.ScriptControl" и даём
    'этому объекту имя "oScript".
    'Через это имя затем работаем с этим объектом.
    Dim oScript As New MSScriptControl.ScriptControl
    
    Dim sExpression As String
    Dim dResult As Double
    
    'Помещаем в переменную математическое выражение.
    'Дробные числа нужно с точкой указывать.
    sExpression = "2+2.1"
    
    'Не знаю, зачем, но нужно выполнить эту команду.
    oScript.Language = "VBScript"
    
    'Расчёт математического выражение и помещение результата
    'в переменную "dResult".
    dResult = oScript.Eval(sExpression)
    
End Sub
Позднее связывание
Код:
Sub Макрос2()

    Dim oScript As Object
    Dim sExpression As String
    Dim dResult As Double
    
    sExpression = "2+2.1"
    
    'Создаём объект "MSScriptControl.ScriptControl" и даём этому
    'объекту имя "oScript". Через это имя затем работаем с этим объектом.
    Set oScript = CreateObject("MSScriptControl.ScriptControl")
    
    oScript.Language = "VBScript"
    
    dResult = oScript.Eval(sExpression)
    
End Sub
Примечание

В кодах показаны только принципы - результаты никуда не выводятся.

Последний раз редактировалось Скрипт; 25.12.2012 в 09:33.
Скрипт вне форума Ответить с цитированием
Старый 26.12.2012, 00:49   #8
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
Сообщение от Скрипт Посмотреть сообщение
Более подробное описание того, что предложено в сообщении #6.
Код:
Sub Макрос3()
    
    'Не знаю, зачем, но нужно выполнить эту команду.
    oScript.Language = "VBScript"
    
End Sub
http://www.excelworld.ru/forum/2-2227-1

Цитата:
Сообщение от Казанский Посмотреть сообщение
работает в VBA любого приложения
office x64?
Тишина – самый громкий звук

Последний раз редактировалось nerv; 26.12.2012 в 00:54.
nerv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Как передать значениет с <input type="text"> в тег <a href="serch.php?serch=(сюда)"> SevenXP PHP 3 22.04.2012 03:14
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Можно ли в "EXCEL" задать свое действие клавише valerij Microsoft Office Excel 26 06.06.2007 16:25