В модуле листа условие, если ячейка O7=BACK, то запустить макрос
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$O$7" Then Exit Sub
If Target = Back Then Call Back
End Sub
В стандартном модуле должен после этого запуститься макрос Back. Увы выдается ошибка "argument not optional". Никак её побороть не могу, подскажите куда копнуть!?
Во вложении скрин ошибки и сама книга. Внимательно (!) она без программы, из которой по DDE получает инфу будет выдавать ошибки. Цитата из файла помощи к программе:
Скрытый текст
2. С помощью вызова одного из двух макросов, уже помещенных в файл.
Макросы имеют следующий синтаксис: Sub Back(channel As String, selection As String, price As String, amount As String) Sub Lay(channel As String, selection As String, price As String, amount As String)
Первый аргумент - это имя канала, в котором нужно сделать ставку - должно быть равно имени соответствующего листа. Второй параметр - название исхода. Третий и четвертый параметры - выражения для коэффициента и размера ставки. Выражения могут содержать цифры и/или выражения триггеров. Пример правильной VBA подпрограммы, отправляющей ставку ПРОТИВ в канале Baccarat Turbo:
Код
Sub LayBaccarat()
Lay "BACCARAT_TURBO", "Natural Win", "lay_price", 6
End Sub
Если вы собираетесь использовать эти подпрограммы в ваших макросах, подразумевается, что вы знакомы с технологией VBA и Excel программированием. Обе подпрограммы описаны в "Module1" VBA проекта. Следовательно вам необходимо добавить ваш код в тот же проект, т.е. в ту же книгу. Наиболее удачной идеей является редактирование файла xfeeder.xlt перед вызовом Excel из X-Feeder. Обратите внимание, что макросы должны быть выключены в момент открытия файла, т.к. некоторые начальные действия попытаются обновить DDE ссылки на программу, что приведет к большому количеству сообщений об ошибках, если X-Feeder не запущен.
Maxim39, здравия. Во-первых, код следует оформлять соответствующим тэгом. (кнопка на панели инструментов области текста сообщения <...>) Во-вторых, Вы вызываете процедуру Back без параметров, а она подразумевает передачу ей обязательных параметров, судя по скрину.
Доброй ночи, JayBhagavan! Спасибо что не спите (= И за быстрый ответ, сейчас буду пробовать.
Ссори, в VBA слаб... не понял про теги. Такой код тоже вызывает ошибку:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$O$7" Then
If IsEmpty(Target) Then Exit Sub
IF Range("O7") = Back THEN
CALL Back
End If
End Sub
'Инфа отсюда http://www.programmersforum.ru/showthread.php?t=60413 (второе сообщение)
Процедура Back принимает четыре аргумента указанные в скобках после названия (channel as string, selection as string ....). Ошибка означает, что Вы пытаетесь запустить Back без передачи аргументов, что неприемлемо. Решение: 1. Запуск CALL Back в такой форме CALL Back ("Пример1", "Пример2", "Цена вопроса", "Еще чтото"). Таким образом запуск процедуры Back будет выполнен успешно т.к. она получила все объявленные аргументы. 2. Второй вариант сделать аргументы опциональными и присвоить им значения по умолчанию.
Что касается тегов VBA не причем. В момент когда создаете сообщение на форуме и хотите вставить код, часть кода нужно нажать Кнопка форматирования кода <...> после чего вставить код в форму с серым фоном.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$O$7" Then Exit Sub
If Target.Value = "B" Then Call Back 'теперь выделяется call Back
End Sub
Короче приложите свой файл и проблемы уйдут. Вы чего-то там наляпали, не знаете сами чего. Видимо ни процедур, ни других нужных вещей в проекте нет. Вот ошибки и лезут одна за другой.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Файл приложил сразу в первом посте, только внимательно, перед этим другие рабочие книги закрыть и заодно отключить макросы, т.к. книга будет ссылаться на программу которая у Вас не запущена и будет выдавать ошибки!
Тогда не буду скачивать. Зачем ковырять проект, который заведомо содержит неисправляемые ошибки.
Если Ваша процедура BACK записана вроде:
Код
Function BACK(ByVal sArg as string)
'непосредственно код процедуры
End Function
значит она с аргументами. Т.е. если внутри скобок что-то написано и там есть хоть один As без Optional(Optional sArg as string) - значит надо в эту функцию/процедуру передать этот sArg:
Код
call Back(Target.Value)
Совет такой: потратьте пару часиков на чтение о передаче аргументов в функцию. Да и вообще об азах VBA. Форумы никак не для обучения Вас всех самых начальных азов - это Вы должны почерпнуть из литературы и прочих материалов, коих в сети толпы. Я привел лишь маленький пример и если не поймете - я уж извините, из темы устранюсь. Хотя может кому-то сейчас захочется посвятить Вас во все азы программирования в VBA, чтобы Вы поняли что такое аргумент в функции/процедуру и когда его надо обязательно передавать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Sub Back(channel As String, selection As String, price As String, amount As String)
Back "HILO_STANDARD", "Card 1 or further", "back_price", 5 'БЕСКОНЕЧНАЯ РЕКУРСИЯ?
'''''End Sub - У ПРОЦЕДУРЫ М.Б. ТОЛЬКО ОДИН END SUB
Dim feed As Integer, counter As Integer
Dim data As String
counter = 0
feed = 0
While counter < 5 And feed = 0
feed = Application.DDEInitiate("xfeeder", "betting")
Wend
If feed > 0 Then
data = "back|" & channel & "|" & selection & "|" & price & "|" & amount
Dim cw As Worksheet, ldws As Worksheet
Set cw = ThisWorkbook.ActiveSheet
Set ldws = ThisWorkbook.Worksheets("Loading")
If cw.name = ldws.name Then
Set cw = ThisWorkbook.Worksheets(1)
cw.Activate
End If
ldws.Activate
Range("AA1000") = data
Application.DDEPoke feed, "bet", Range("AA1000")
cw.Activate
End If
End Sub
'ПРИМЕР ВЫЗОВА
SUB EXAMPLE
CALL BACK("channel", "selection", "price", "amount")
END SUB
The_Prist, спасибо Вам за помощь и потраченное время, заходил на Ваш сайт, понимаю что занимаетесь сложными проектами и обучение начинающих не в приоритете. Книги скачал, но многое не понятно... буду дальше изучать.
Sclif666, спасибо за хороший пример, что-то я ступил с несколькими End Sub, буду дальше пробовать.
Спасибо всем за подсказки, постараюсь разобраться! Если проблему решу - отпишусь здесь.
Sclif666, огромное СПАСИБО,только сейчас понял свою ошибку, сделал как Вы написали и всё заработало как надо! (см.скриншот) Вы хорошие люди, что не ленитесь и помогаете таким новичкам как я!