powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / помогите исправить функцию, чтобы она работала
51 сообщений из 51, показаны все 3 страниц
помогите исправить функцию, чтобы она работала
    #34796297
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите исправить функцию, чтобы она работала....
Модератор:
У вас уже 4 топика на двух форумах об одном и том же.
Вы бы определились. Мне определиться будет проще.
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34796664
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kleraпомогите исправить функцию, чтобы она работала....
Модератор:
У вас уже 4 топика на двух форумах об одном и том же.
Вы бы определились. Мне определиться будет проще.
а как она должна работать?
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34796692
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне просто срочно нужна помощь....
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797157
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kleraмне просто срочно нужна помощь....Те, кто помогает в решении проблем на этом форуме, весьма занятые люди, которые также ценят свое время как и Вы.
То, что у вас написано в коде, не позволяет понять, что Вы хотите получить в результате, поэтому я и попросил Вас написать словами, как хотите, чтоб программа работала.
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797234
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я бы хотела, чтобы при нажатии на кнопку, запускалась функция, а тело функии бралось из ячейки
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797269
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваша функция, хоть и коряво (не понятно, зачем ей нужны параметры и зачем используется функция CVar ), работает, а вот формула в ячейке - это нонсенс если в книге не существует именованных диапазонов (формул) k и t :

=И(k=1; t=2)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797303
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
критиковать ВСЕ мастера
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797480
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то мне подсказывает, что с такой реакцией на анализ твоего примера с указанием ошибок и при полном отсутсвии объяснения конкретной задачи, ты долго будешь ждать ответа.

Последний раз пытаюсь помочь твоей беде:

1) поскольку твоя формула говорит о полном непонимании принципов использования в них переменных, попробуй описать задачу средствами тебе доступными.

2) поскольку твоя функция говорит о полном непонимании назначения и принципов действия пользовательских функций, а также типов данных, попробуй описать задачу средствами тебе доступными.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797540
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Klera, Вас особо и не критикуют, мне лично даже сложно понять, в чем вы ошиблись, потому, что неясно, что хотели сделать, все смешалось :). Вам уже три раза предлагают разъяснить задачу.
Воспользуйтесь тем, что Вам уже два раза вам предлагает свою помощь MVP – более квалифицированного ответа вы здесь не получите.
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797620
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую сформулировать зададачу:

есть лист1 Excel, где есть кнопка, нажав на которую, выполняется
s = uslovie(1, 2, 3)
то есть функция с параметрами (1,2,3), то есть st=1 k=2 l=3

Function uslovie(st As Integer, k As Boolean, l As Boolean)
Dim t
t = st

If CBool(Evaluate(Лист1.Cells(2, 1).Value)) Then
MsgBox ("работает условие")
End If
End Function

в Лист1.Cells(2, 1).Value написано t=0, и при нажатии на кнопку функция мне выдает сообщение работает условие. что НЕ верно, так как st=1 что не равно 0. мне надо как то изменить функцию, чтобы она работала....
помогите кто знает
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797711
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Явно перепутаны мухи и катлеты.
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797756
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может Вы хотели что-то вроде этого?
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797812
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Klera...st=1 k=2 l=3...
...st As Integer, k As Boolean, l As Boolean...Boolean это True/False, а ты присваиваешь k - 2 (Integer) и l - 3 (Integer)


Klera...Dim t
t = st...Если ты хочешь переменную типа Variant, то зачем декларируешь st как Integer в параметрах? Да еще вводишь дополнительную переменную расходующую память.


Klera...CBool(Evaluate(Лист1.Cells(2, 1).Value))Каково назначение функции CBool и метода Evaluate в этой строке?


Klera...в Лист1.Cells(2, 1).Value написано t=0...В твоей книге нет именованного диапазона или формулы с именем t, а значит ячейка Лист1.Cells(2, 1) будет всегда содержать ошибку.


Klera, ну серьезно, ты читаешь то, что пишешь?

Поскольку ты не желаешь переходить на простой русский язык, а с пьяной настойчивостью продолжаешь использовать малознакомый тебе язык формул и VBA, то я оставляю надежду что-либо понять.

При этом, мне не хотелось бы тебя оставлять один на один с этой проблемой, поэтому вешаю свою догадку.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797818
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, файл отвалился.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797857
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vbaproможет Вы хотели что-то вроде этого?

может быть записано любое условие, как например isnull(t)
или t>0
Тогда не работает(((
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797893
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)пардон, файл отвалился.

KL
[MVP - Microsoft Excel]

Это совсем не то что мне надо, но я не знаю как еще обьяснить, спасибо за тепрение,
по простому что мне надо

Код: plaintext
1.
2.
3.
function(s as integer,l as integer)
if лист1.cells( 1 , 1 ).value then ' если выполняется условие считанное с ячейки
msgbox("работает") 
end if
в ячейке лист1.cells(1,1).value может быть любое условие, как например isnull(l) или s>0
и не обязательно что условие будет на оба параметра, может только на один из параметров

ну как еще обьяснить...
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34797999
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я понял уважаемая Klera хочет хранить в ячейках условия для выполнения некоторой функции
т.е данная ф-ция - это некоторый интерпритатор

т.е к примеру
пусть в ячейке А1 записано к=0
а в ячейке А2 - к <> 0

если вызвать функцию и передать ей А1
то в теле ф-ции должно выполнится условие
If k=0...

если вызвать функцию и передать ей А2
то в теле ф-ции должно выполнится условие
If k<>0...

Это похоже на ф-цию Eval, но не совсем


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798019
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKotнасколько я понял уважаемая Klera хочет хранить в ячейках условия для выполнения некоторой функции
т.е данная ф-ция - это некоторый интерпритатор

т.е к примеру
пусть в ячейке А1 записано к=0
а в ячейке А2 - к <> 0

если вызвать функцию и передать ей А1
то в теле ф-ции должно выполнится условие
If k=0...

если вызвать функцию и передать ей А2
то в теле ф-ции должно выполнится условие
If k<>0...

Это похоже на ф-цию Eval, но не совсем


I Have Nine Lives You Have One Only
THINK!

Хоть кто то меня понимает, да именно это я хочу, но как это сделать???
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798027
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
причем условие может быть любое, например isnull(k) and k in (1,2)
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798032
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не уверен, но единственная возможность создание кода на лету
я с этим не сталкивался

НО здесь на форуме это уже обсуждалось
так что в ПОИСК



I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798042
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Klera KL (XL)пардон, файл отвалился.

KL
[MVP - Microsoft Excel]

Это совсем не то что мне надо, но я не знаю как еще обьяснить, спасибо за тепрение,
по простому что мне надо

Код: plaintext
1.
2.
3.
function(s as integer,l as integer)
if лист1.cells( 1 , 1 ).value then ' если выполняется условие считанное с ячейки
msgbox("работает") 
end if
в ячейке лист1.cells(1,1).value может быть любое условие, как например isnull(l) или s>0
и не обязательно что условие будет на оба параметра, может только на один из параметров

ну как еще обьяснить...

В таком случае, как я уже говорил, корень зла не в функции (сработала бы и первая), а в формуле в ячейке [A1]. Единственный способ записать уравнение в ячейке Excel используя переменную ввиде буквы это создав именованный диапазон или формулу (меню Вставка-Имя-Присвоить... (по-моему я это говорю уже в третий раз). Во всех остальных случаях выражения

=isnull(l)
=s>0
=OR(t=1;k=2;l=3)

и т.д. дадут ошибку #NAME (#ИМЯ), т.к. Excel будет думать, что l, s, t, k это функции, именованный диапазон или именованная формула, но будет не в состоянии распознать их.

Кстати, возвращаясь к твоей последней функции (и это тоже в третий раз):

Код: plaintext
1.
2.
3.
function(s as integer,l as integer)
     if лист1.cells( 1 , 1 ).value then ' если выполняется условие считанное с ячейки
     msgbox("работает") 
     end if

параметры s as integer,l as integer ей абсолютно не нужны - она их никак не использует

и вообще ей незачем быть функцией так как значений она тоже не возвращает

в итоге имеем:

Код: plaintext
1.
2.
Sub uslovie()
     If Лист1.Cells( 1 , 1 ) then MsgBox("работает") 
End Sub

ну максимум:

Код: plaintext
1.
2.
3.
4.
5.
Sub uslovie(cell As Range)
     If cell.Value then MsgBox("работает") 
End Sub
Sub Test()
     uslovie Лист1.Cells( 1 , 1 )
End Sub

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798043
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKotне уверен, но единственная возможность создание кода на лету
я с этим не сталкивался

НО здесь на форуме это уже обсуждалось
так что в ПОИСК



I Have Nine Lives You Have One Only
THINK!

я сегодня искала весь день, и ничего не нашла.
Если есть ссылка буду признательна
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798057
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите здесь




I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798068
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если то то ищите по ключевому слову InsertLines



I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798164
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKotесли то то ищите по ключевому слову InsertLines



I Have Nine Lives You Have One Only
THINK!

прочитала, но не знаю как применить к моему примеру? как написать что InsertLines применяется для ячейки.....

????
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798183
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы просто пишете текст процедуры(функции) и посылаете его в insertLines

и так для каждой ячейки

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798255
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не уверен, но вроде можно сделать так
создаете свою ф-цию

потом по надобности, используя
Код: plaintext
1.
2.
3.
4.
Метод ReplaceLine 
Замещает одну строку программы другой. 

Синтаксис 
объект.ReplaceLine(строка, текст) 

заменяете условие на нужное, а потом выполняете ее

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798326
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При беглом взгляде на решение с пом. манипуляций с объектом VBAProject, создается впечатление, что результата таким образом достичь можно, но какой ценой:

- в проекте VBA нужно создать ссылку на соотв. библиотеку Microsoft Visual Basic For Applications Extensibility #.#
- для Office 2002-2007 в меню Сервис-Макрос-Безопасность... , закладка Надежные издатели , нужно отметить Доверять доступ к Visual Basic Project
- условия в ячейке нужно будет писать по-английски
- условия в ячейке нужно будет писать в синтаксисе VBA
- условия в ячейке нужно будет писать в текстовом формате

Отсюда вопрос - оно вообще надо?

Ведь берутся же откуда-то параметры для функции. Если они жестко записаны в процедуре вызываемой кнопкой, то почему нельзя их жестко записать в ячейках на листе

[B1]=1
[C1]=2
[D1]=3

и проверять условия нормальной формулой

[A1]=AND(B1=1,C1=2,D1=3)

а результат передавать ввиде параметра процедуры

Код: plaintext
1.
2.
3.
4.
5.
Sub uslovie(blResult As Boolean)
     If blResult then MsgBox("работает") 
End Sub
Sub Test()
     uslovie Лист1.Cells( 1 , 1 )
End Sub

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34798360
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не хочется тратить ячейки, то можно создать именованные формулы, что-то типа прилагаемого файла

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34799557
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может кто с такой проблемой сталкивался,HELP
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34799559
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HELP
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34799634
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пойму как передать параметры в метод InsertLines
еще раз напомню задачу, нужно с помощью метода InsertLines вставить в тело функции условие, которое должно отработать, условие считаное с определенной ячейки и содержит условие на параметры функции

Помогите кто сталкивался...
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34799644
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)Если не хочется тратить ячейки, то можно создать именованные формулы, что-то типа прилагаемого файла

KL
[MVP - Microsoft Excel]

мне надо именно функцию, если можно было бы так сделать в виде процедуры я бы с удовольствием (просто такая ситуация-есть проет на VBA, который работает, раньше условие было вшито в функцию, сейчас мне надо чтобы это условие задавал пользователь для этой функции), прочитала про InsertLines и не поняла как бы мне это использовать для моего случая....?
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34799651
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKotне уверен, но вроде можно сделать так
создаете свою ф-цию

потом по надобности, используя
Код: plaintext
1.
2.
3.
4.
Метод ReplaceLine 
Замещает одну строку программы другой. 

Синтаксис 
объект.ReplaceLine(строка, текст) 

заменяете условие на нужное, а потом выполняете ее

I Have Nine Lives You Have One Only
THINK!

Идея хорошая, но у меня что то пока не получается...
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34799655
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKotвы просто пишете текст процедуры(функции) и посылаете его в insertLines

и так для каждой ячейки

I Have Nine Lives You Have One Only
THINK!

Можно пример?
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34799776
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function Test(NewCode As String) As String
    
    Test = ""
    Application.VBE.CodePanes( 1 ).CodeModule.ReplaceLine  6 , "    If " & NewCode & " then "
    'положение нижеследующей строки не менять иначе менять параметры метода ReplaceLine
    If DlyaZameny Then
        Test = NewCode
    End If
    
    Exit Function
EH:
    Test = "Ошибка "
End Function

только есть небольшие (большие проблемы)

ЗЫЖ попробуйте и найдите решение своей задачи другим путем ИМХО

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34799954
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написала:

Код: plaintext
1.
2.
3.
4.
5.
6.
With Application.ActiveWorkbook.VBProject.VBComponents("main").CodeModule
.DeleteLines  15 
.InsertLines  15 , st
End With
If CBool(t >  0 ) = True Then
MsgBox ("УРА")
End If

работает, перекидывает считанное условие с ячейки, но не проверяет.
как сделать так чтобы условие проверялось при этом????
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34799973
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нужно заморачиваться изменением кода на лету, если не нравится предложение KL(XL), то вот вам решение другим путём
Если в ячейке писать условия такого типа k=1 and t=2 (только без проверок типа isNull)
То код следующий

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub main()
 s = uslovie( 2 ,  1 ,  3 )
End Sub

Function uslovie(t As Integer, k As Integer, l As Integer)
Dim flag
flag = Evaluate("(" & Replace(Replace(Replace(Replace(Лист1.Cells( 1 ,  1 ), _
                      "k", k), "t", t), "l", l), "and", ")*(") & ")")

If flag Then
   MsgBox ("условие выполнено")
 Else
   MsgBox ("условие НЕвыполнено")
End If

End Function

Если в ячейке писать условия такого типа (k=0)*(t=2)*(ISNUMBER(l)) , т.е. по правилам Эксель и используя функции Эксель обязательно в английском их написании, то код можно подсократить до следующего

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub main()
 s = uslovie( 2 ,  0 ,  3 )
End Sub

Function uslovie(t As Integer, k As Integer, l As Integer)
Dim flag
flag = Evaluate(Replace(Replace(Replace(Лист1.Cells( 1 ,  1 ), _
                      "k", k), "t", t), "l", l))

If flag Then
   MsgBox ("условие выполнено")
 Else
   MsgBox ("условие НЕвыполнено")
End If

End Function
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34800019
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeggasadНе нужно заморачиваться изменением кода на лету, если не нравится предложение KL(XL), то вот вам решение другим путём
Если в ячейке писать условия такого типа k=1 and t=2 (только без проверок типа isNull)
То код следующий

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub main()
 s = uslovie( 2 ,  1 ,  3 )
End Sub

Function uslovie(t As Integer, k As Integer, l As Integer)
Dim flag
flag = Evaluate("(" & Replace(Replace(Replace(Replace(Лист1.Cells( 1 ,  1 ), _
                      "k", k), "t", t), "l", l), "and", ")*(") & ")")

If flag Then
   MsgBox ("условие выполнено")
 Else
   MsgBox ("условие НЕвыполнено")
End If

End Function

Если в ячейке писать условия такого типа (k=0)*(t=2)*(ISNUMBER(l)) , т.е. по правилам Эксель и используя функции Эксель обязательно в английском их написании, то код можно подсократить до следующего

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub main()
 s = uslovie( 2 ,  0 ,  3 )
End Sub

Function uslovie(t As Integer, k As Integer, l As Integer)
Dim flag
flag = Evaluate(Replace(Replace(Replace(Лист1.Cells( 1 ,  1 ), _
                      "k", k), "t", t), "l", l))

If flag Then
   MsgBox ("условие выполнено")
 Else
   MsgBox ("условие НЕвыполнено")
End If

End Function


условие будут писатьпользователи, и я думаю что так они не смогут написать, поэтому надо программировать на лету, то что я написала выше вставляет, нужный код, но не проверят, сейчас бьюсь нам тем чтобы функция проверяла, пробовала через goto и на это условие, программа зацыкливает...
как исправить пока не знаю...
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34800058
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Klera
условие будут писатьпользователи, и я думаю что так они не смогут написать?
Как они не смогут написать?
может так
[k=1 and t=2
или вот так
(k=1)*(t=2)

А как тогда смогут?
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34800278
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем для тех кто тож столкнулся с такой задачей, выкладываю РАБОЧИЙ код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub main()
peredat
S = uslovie( 1 ,  2 ,  3 )
End Sub
Sub peredat()
Dim st As String
st = "if " & Лист1.Cells( 2 ,  1 ).Value & " then"
With Application.ActiveWorkbook.VBProject.VBComponents("main").CodeModule
.DeleteLines  14 
.InsertLines  14 , st
End With
End Sub
Function uslovie(t As Integer, k As Integer, l As Integer)
If t >  0  Then
MsgBox ("выполняется условие")
End If
MsgBox ("расчет окончен")
End Function

Пользуйтесь.
P.S.не забудьте для этого установить флажок "доверять доступ к Visual Basic Project"(меню сервис-макрос-безопастность-вкладка Надежные издатели)
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34800412
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем делать так
Код: plaintext
1.
.DeleteLines  14 
.InsertLines  14 , st
когда можно просто
Код: plaintext
.ReplaceLine  14 , st

ну это так к слову

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34800459
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кто знает, как написать обработчик на считанную ячейку, то есть если там написано что то типа "t in (0)" или еще какая нить ерунда которая не преобразуется в корректное услоие, чтобы не вставлял строку, а выходил из процедуры (sub peredat)
???
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34800773
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть мне нужна функция которая при считывании с ячейки проверяет выражение на правильность синтаксиса выражения
???
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34800915
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KleraТо есть мне нужна функция которая при считывании с ячейки проверяет выражение на правильность синтаксиса выражения
???

В моём то варианте всё тип-топ с ошибками
Последний раз предлагаю
В ячейку записываем k=0 and t=2 and ISNUMBER(l) , т.е. условия с обычными опреаторами, либо функции Эксель, только в английском написании.
Код следующий

Код: plaintext
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.
Sub main()
 S = uslovie( 2 ,  0 ,  3 )
End Sub

Function uslovie(t As Integer, k As Integer, l As Integer)
Dim flag  As Boolean

On Error Resume Next
flag = Evaluate("(" & Replace(Replace(Replace(Replace(Лист1.Cells( 1 ,  1 ), _
                      "k", k), "t", t), "l", l), "and", ")*(") & ")")
Debug.Print flag
Debug.Print Err.Number
If Err.Number <>  0  Then
   Debug.Print Err.Number
   flag = False
   MsgBox ("неверное условие")
   Exit Function
End If
On Error GoTo  0 

If flag Then
   MsgBox ("условие выполнено")
 Else
   MsgBox ("условие НЕвыполнено")
End If
End Function
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34800920
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эти строки лишние
Код: plaintext
1.
Debug.Print flag
Debug.Print Err.Number
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34800985
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хмммммм..........
мне просто нужен мой вариант........
как исправить?
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34801022
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KleraХмммммм..........
мне просто нужен мой вариант........
как исправить?
никак
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34803746
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никто не сталкивался с такой проблемой?
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34803795
Klera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть как осуществить перехват синтаксической ошибки

Код: plaintext
syntax error

??
Модератор:
Внимательно читаем правила .
...
Рейтинг: 0 / 0
помогите исправить функцию, чтобы она работала
    #34803913
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правила форума на SQL.RU # Рекомендации
Не рекомендуется:
# Публиковать сообщения с бессмысленными темами. Например: <Люди помогите>, <Проблема!!>, <Срочно нужна помощь!>, <может знаете?> и т.д.
# Задавать несколько вопросов из разных областей в одном сообщении.
# Отправлять сообщение одновременно в несколько форумов. Модераторы соответствующих форумов вправе удалить такие сообщения.
# Создавать несколько топиков с одинаковым вопросом.


...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / помогите исправить функцию, чтобы она работала
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]