Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Синтаксис оператора: With objectExpression: как записать объект переменной
 
Еще раз спасибо Игорю Гончаренко! Теперь все работает.
Решение действительно оказалось простым. Задавая процедуру, содержащую основной процесс вычислений, нужно указать в скобках аргумент название не имеет значение причем тип ему задать пользовательский тот самый, который указан в Type у меня например этот список называется vars (переменные). Все переменные должны быть уже заданы посписочно, у меня они заданы глобально перед процедурой
Код
Public aaa As vars
Public bbb As vars
Public ccc As vars
...
Public MyVar

Sub Dis ()
MyVar = "aaa"   т.е. любое нужное в данный момент значение, которое указывается автоматически а не в ручную как здесь 
If MyVar = "aaa" Then
Vsepuchkom aaa
ElseIf MyVar = "bbb" Then
Vsepuchkom bbb
...
End If
End Sub

В другом модуле:

Public Sub Vsepuchkom (tribukvi As vars)
With tribukvi
...
End With
End Sub
Изменено: Олег_Архипка - 25 Окт 2018 01:24:57
Синтаксис оператора: With objectExpression: как записать объект переменной
 
Цитата
Ігор Гончаренко написал:
а не приходила идея написать в модуле 1 процедуру
Спасибо что подсказали, в моем случае все немного иначе, но в вашем решении я кажется увидел то что мне может подойти. Не судите строго я с VBA впервые познакомился лишь пару месяцев назад. А вам огромное спасибо, без подсказки очень тяжело начинающим.
Синтаксис оператора: With objectExpression: как записать объект переменной
 
Цитата
Казанский написал:
если сработает Set MyVar = today, тогда будет работать и With today
aaa.today aaa.yesterday и пр. aaa. ... это все переменные одного объекта имеющего название aaa, переменные заданы в отдельном модуле следующим образом
Код
Type vars
today As Byte
yesterday As Byte
...
End Type

В другом модуле все объекты со всеми переменными объявлены глобально
Код
Public aaa As vars
Public bbb As vars
Public ccc As vars
...

В третьем модуле записана основная процедура расчетов, она должна происходить только с переменными типа aaa. ...   либо только с переменными типа bbb. ... и так далее.
Код
With aaa
...
End With

или
Код
With bbb
...
End With

Прописать в модуле двадцать одинаковых блоков с aaa, bbb, ccc, и т.д. плохая идея т.к. блок имеет большой код вычислений. Вот я и пытаюсь найти способ как автоматически в зависимости от текущей необходимости подставлялись нужные три буковки после слова With

Это наверное можно решить с помощью ячейки, пусть в ячейку Range ("A1") автоматически будут прописываться три нужные буквы, тогда
With WorkSheets.Range("A1")
...
End With
В операциях будут участвовать все переменные с нужными на данный момент буквами впереди перед точкой.
Но как это сделать без привлечения таблицы excel только средствами VBA?  
Изменено: Олег_Архипка - 24 Окт 2018 21:19:29 (до писал)
Синтаксис оператора: With objectExpression: как записать объект переменной
 
Цитата
ivanok_v2 написал:а где именно вам ето предложено?
Код
dim rng as worksheet
set rng=ActiveSheet
with rng
  .Range("A1")=1
  .Range("A2")=2
end with
Синтаксис оператора: With objectExpression: как записать объект переменной
 
Прошу извинить если не смог сразу изложить точно проблему. Попробую еще раз.
У меня записан некий перечень операций. Все операции используют только переменные одного объекта. Допустим сам объект называется aaa переменные которые заданы как глобальные с помощью оператора Type имеют соответственно следующие названия aaa.today   aaa.yesterday ... Но таких объектов несколько десятков bbb  ccc ... И по некоторым из них нужно произвести точно такие же операции. Все операции записаны в отдельном модуле в процедуре между With ...  и End With для того что бы все операции были произведены только с привлечением переменных нужного в данный момент объекта. Сам объект, нужный в данный момент со всеми переменными определяет некая другая переменная которая по сути выполняет роль индикатора: если MyVar = "aaa" значит нужно запустить весь процесс с переменными объекта aaa, по завершению MyVar может принять значение "ccc" и тогда все вычисления должны быть выполнены с переменными объекта ccc
Синтаксис оператора: With objectExpression: как записать объект переменной
 
Дмитрий(The_Prist) Щербаков, мне тоже так казалось: напишу MyVar=today и все будет работать как будто With today .... и перед точкой буд то бы везде today но ничего подобного не происходит не хочет
Синтаксис оператора: With objectExpression: как записать объект переменной
 
Я понимаю, вы предлагаете вначале записать значение переменной MyVar в ячейку и уже от туда значение попадет к оператору With.
А без ячейки возможно это осуществить только средствами VBA?  
Синтаксис оператора: With objectExpression: как записать объект переменной
 
Именно так, как сделать что бы блок With производил операции именно с нужным в данный момент объектом, MyVar как раз соответствует названию объекта
Синтаксис оператора: With objectExpression: как записать объект переменной
 
Синтаксис оператора:
Цитата
With objectExpression  
[ statements ]  
End With
Как записать что бы objectExpression = MyVar
т.е. что бы операция выглядела следующим образом
Код
With MyVar  
...
End With

где MyVar это переменная состоящая из нескольких текстовых символов и имеет ограниченное число значений
вывод баланса через Binance API, в ячейку
 
Никто не откликнулся.
С задачей справился сам.
Возможно несколько коряво т.к. я не программист но между тем все работает
Если кому то понадобиться - результат в подгруженном файле
Нашел api коннектор, не могу запустить, похоже проблема с Unix-time
 
Несколько дней искал рабочий api коннектор с Binance, из всего что попадалось этот вариант показался наиболее подходящим:
ссылка
при тесте xlsm файла и попытки установить связь с Binance выскакивает проблема, связанная со временем, вероятно нужно синхронизировать время компа со временем сервера в формате Unix-time, автор таблицы даже сделал автовычисление временной дельты у меня она составила 3600153 ms, но как решить эту проблему я так и не смог разобраться.
Может кто нибудь осилит эту проблему или хотя бы подскажет что надо делать?

Вот такую информацию я нашел по этому поводу:
  • Конечной SIGNEDточке также требуется параметр timestamp,, который должен быть отправлен, который должен быть миллисекундной меткой времени, когда запрос был создан и отправлен.
  • Дополнительный параметр, recvWindowможет быть отправлен для указания количества миллисекунд после того, timestampкак запрос действителен. Если сообщение recvWindow не отправлено, по умолчанию оно равно 5000 .
  • Логика такова:if (timestamp < (serverTime +  1000 ) && (serverTime - timestamp) <= recvWindow) {
      // обрабатывать запрос
    } else {
      // отклонять запрос
    }
а в моем случае получается при отправке запроса (serverTime - timestamp) = 3 600 153 т.е. значительно больше установленного максимума в 5000 как это исправить?

Никто не откликнулся, но я сам почти разобрался, баланс уже выводит, кому интересно вот ссылка там найдете файл с решением по балансу
Изменено: Олег_Архипка - 16 Сен 2018 15:06:09 (нашел решение сам)
вывод баланса через Binance API, в ячейку
 
Не совсем дубль. Первый вариант я бы удалил если это возможно
вывод баланса через Binance API, в ячейку
 
Нужна таблица excel  с макросом.

Что должен делать макрос?
Запускаться при открытии таблицы excel и останавливаться при закрытии таблицы
Каждую минуту выводить баланс с аккаунта по двум активам USDT и EOS
Значения должны выводиться в таблице первой книги в следующие ячейки:
AF5 - USDT
AG5 - EOS

В макрос два ключа впишу сам

Примеры запросов только не на VBA   https://bablofil.ru/binance-api/
Изменено: Олег_Архипка - 10 Сен 2018 16:14:17 (добавил ссылку с примером)
связать таблицу Excel с аккаунтом Binance по api, запросы баланса, выставление ордеров в авто режиме из Excel
 
Связать таблицу Excel с аккаунтом Binance по api

Имеется рабочая таблица excel

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

Так же нужен вывод в определенные ячейки текущего баланса по двум активам, обновление сведений о балансе каждую минуту

Есть еще одна проблемка, которую нужно решить: каждую минуту последняя строка с формулами должна копироваться и создавать новую


Сроки обозначьте сами.
Оплата по договоренности.
Таблица если нужно, будет отправлена на указанный вами мэйл (без формул) после достигнутой договоренности.
Изменено: Олег_Архипка - 10 Сен 2018 14:18:02 (первый вариант оказался слишком длинный, упростил)
Копирование формул из ячеек более верхней строки в соответствующие ячейки текущей строки
 
Возможно вы правы, нужно испытать. Однако мне кажется это не очень надежный вариант. Мы не знаем по какому сложному алгоритму умная таблица вычисляет что и куда мне нужно вставить. Может вначале она решит так как мне нужно, а через час при обновлении данных решит сделать как то иначе. Макрос был бы надежнее.
Копирование формул из ячеек более верхней строки в соответствующие ячейки текущей строки
 
Есть Книга 1
в ячейку B1 поступают переменные данные от внешнего источника. данные записываются по изменению (работает макрос). данные записываются вниз в столбец B начиная с B4 (ниже последнего записанного значения все ячейки пустые, всего в таблице 65536 строк). в строке 4 в диапазоне от ячейки C4 до ячейки AA4 во всех ячейках записаны формулы

Нужен макрос:
При записи очередного нового значения в столбце B в той же строке (в которой появилась последняя запись) нужно заполнить все ячейки в диапазоне от C до AA такими же формулами (только формулы, без значений) которые записаны в ячейках строкой выше, естественно порядковый номер строк в формулах должен измениться на единицу.

Допустим в ручную такая операция выглядела бы так:
Появилось новое значение в ячейке B5
Выделяем часть предыдущей строки с формулами от C4 до AA4 включительно
Копируем
Выделяем часть текущей строки с пустыми ячейками от C5 до AA5 включительно
Вставляем
Нужно сделать что бы это происходило автоматически

В настоящий момент это исполнено не самым лучшим образом:
Все ячейки уже заполнены путем копирования аж до последней строки 65536, причем формулы записаны так что если в столбце B нет никакого значения, то и все последующие ячейки в этой строке до столбца AA так же принимают нулевые значения. Проблема в таком варианте очевидна: каждый раз при обновлении данных каждую минуту система производит расчет по всей таблице, что требует значительных вычислительных ресурсов и львиная доля тратится на вычисления с нулевыми значениями.

Помогите исправить и сделать работу таблицы более оптимальной. Нужно что бы строка с формулами появлялась только тогда, когда появляется исходное значение в начале строки (в столбце B)
Автоматическая запись изменяющихся каждую минуту данных в таблицу
 
Хочу выразить свою огромную благодарность Владимиру Захарову! Огромное вам спасибо! В разобранном вами примере действительно содержится нужное решение. Хотелось бы более детально изучить код данного макроса, что бы понять сам алгоритм, по которому выполняются действия. Еще несколько деталей с которыми столкнулся: значения параметра, которые я получаю содержит невидимый апостроф, а так же точку в записи десятичного числа. Сразу не понял в чем причина, почему все не работает, но потом разобрался. С помощью базовых функций удалил невидимые символы и заменил точку на запятую - все заработало! Однако в данной таблице почему то идет запись строки и спустя секунду снова идет запись с тем же показаниями либо с одинаковым временем либо с разницей во времени всего 1 секунда, т.е. получается все пишется двойными одинаковыми строками. У меня временной шаг обновления данных стоит 1 минута.

Так же спасибо SAS888 за предложенный вариант решения. Пока не успел испытать этот вариант, но обязательно попробую так как очень интересно получить еще один результат.
Изменено: Олег_Архипка - 21 Авг 2018 13:27:59 (Дописал благодарность еще одному участнику темы)
Автоматическая запись изменяющихся каждую минуту данных в таблицу
 
Я понял вам нужен реальный источник переменных данных все равно каких лишь бы прототип работал. Мне кажется в таком качестве могли бы подойти какие нибудь данные с биржи, только нужно поискать от куда и как их взять.
Автоматическая запись изменяющихся каждую минуту данных в таблицу
 
Параметр очень чувствительный, вероятность того что через минуту окажется точно такое же значение почти равна нулю. Однако важно что бы каждой минуте соответствовало конкретное значение протоколируемого параметра, даже если его значение вдруг окажется точно таким же как и минуту назад.

значения в файле, расположенного по конкретному url-адресу, постоянно меняются с какой точно частотой не могу сказать т.к. не знаю, но меня вполне устраивают значения, которые фиксируются в Excel каждую минуту (т.к. именно такой параметр обновления данных можно задать в Power Query для данной связи с источником данных посредством url-адреса)
Автоматическая запись изменяющихся каждую минуту данных в таблицу
 
В базовый Excel встроена оболочка Power Query, с помощью которой после ввода определенного url-адреса и установки режима обновления 1 мин. в отдельной табличке появляются значения нужного мне параметра. Допустим это температура воздуха. Файл с конкретной ссылкой предоставить не могу т.к. данная информация является приватной.
Автоматическая запись изменяющихся каждую минуту данных в таблицу
 
Уже третий день ищу на различных форумах. Глаза опухли. К сожалению почти не владею языком VBA, так бы наверное уже разглядел ниточку, за которую уцепиться, попадались готовые решения немного схожих задач.
Автоматическая запись изменяющихся каждую минуту данных в таблицу
 
Хотелось бы сделать так что бы совсем кнопок не нажимать, что бы в таблицу каждую минуту в новой строке добавлялись новые записи в столбце ТЕКУЩЕЕ ВРЕМЯ и в столбце ЗНАЧЕНИЕ ПЕРЕМЕННОЙ.
Я бы назвал это протоколом изменений значения переменной. Где найти такой макрос?
Автоматическая запись изменяющихся каждую минуту данных в таблицу
 
Можно поставить вопрос иначе:
в Excel можно выбрать любую ячейку с данными (допустим B1) нажать правую кнопку мыши и выбрать команду КОПИРОВАТЬ,
затем выбрать любую пустую ячейку (допустим D2) нажать правую кнопку мыши и выбрать параметры вставки ЗНАЧЕНИЯ
В ячейке D2 отобразиться текущее значение данных из ячейки B1, теперь даже если данные в B1 изменятся в D1 они останутся такими же как при первичном заполнении.
Сейчас я описал как эта операция делается в ручную. Можно ли задать эту операцию формулой для автоматического выполнения?
Автоматическая запись изменяющихся каждую минуту данных в таблицу
 
Задача:

Дано: в открытом листе Excel заполнены две ячейки, содержащие данные, которые меняются автоматически каждую минуту[

A1 - текущее время, формула ячейки: ТДАТА

B1 – возвращает числовое значение из другой ячейки другого листа, в которую значения поступают из интернета, значения меняются с циклом обновления 1 минута.

Требуется: создать динамическую таблицу значений в столбцах CD, начиная со второй строки

С2 – зафиксированное время и D2 – соответствующее этому времени значение из B1

С3 – зафиксированное время и D3 – соответствующее этому времени значение из B1

… и так далее, временной шаг записи данных 1 минута.

Каждую минуту должна создаваться новая строка в таблице с соответствующими новыми данными, при этом предыдущие данные таблицы должны сохраняться в неизменном виде.

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

Весь процесс должен происходить в автоматическом режиме.

Каким образом можно решить данную задачу?

Если бы была функция, которая автоматически сохраняла значение переменной в данный момент времени так что бы в последствии это значение уже более не менялось вслед за переменной – то для решения данной задачи можно было бы обойтись стандартным функциями Excel, даже не прибегая к макросам. К сожалению я такой функции не нашел. Если такая есть – подскажите, если нет помогите найти решение другими средствами.

Страницы: 1
Наверх