#excel #vba #copy-paste
#excel #vba #копировать-вставить
Вопрос:
Я настроил электронную таблицу Excel для отслеживания моих сделок с опционами на акции. У меня есть шаблоны для различных сделок с опционами (например, iron condor, бычий дебетовый спред). Я вычисляю с интервалом в одну минуту прибыль / убыток (P / L) и сравниваю с моей целевой прибылью. Недавно я добавил предупреждение, требующее кодирования на VBA.
Я хотел бы скопировать свой шаблон options и вставить его на тот же лист, чтобы вставленная функция работала без необходимости писать новую инструкцию VBA для каждой новой позиции по опционам (т. Е. Каждый раз, когда я копирую и вставляю свой шаблон торговли опционами).
Я пробовал как абсолютное, так и относительное присвоение имен значениям диапазона, ни одно из которых не сработало после вставки шаблона параметров (который содержит код предупреждения VBA) в новую позицию.
Я прибегал к нескольким операторам If, которые работают, но кодирование является беспорядочным, и мне приходится писать новую инструкцию VBA «If» для каждой новой позиции параметров.
Есть ли способ обновлять инструкцию VBA всякий раз, когда шаблон копируется и вставляется в новое место на ТОМ ЖЕ листе?
Пример «Операторов If» VBA: рассмотрите первые два оператора If в качестве шаблонов, а последний — как скопированный и вставленный в новое место.
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("$K$10").Value >= Range("$L$9").Value Then
MsgBox Prompt:="Option has exceded target, CASH IN! ", Title:="OPTION ALERT"
End If
If Range("$K$20").Value >= Range("$L$19").Value Then
MsgBox Prompt:="Option has exceded target, CASH IN! ", Title:="OPTION ALERT"
End If
.
.
.
If Range("$K$249").Value >= Range("$L$248").Value Then
MsgBox Prompt:="Option has exceded target, CASH IN!", Title:="OPTION ALERT"
End If
End Sub
Комментарии:
1. Не будет ли цикл for для последней строки работать? например.
For i = 10 To Range("K" amp; Rows.Count).End(xlUp).Row
2. Звучит как отличное решение, если ячейки были непрерывными. К сожалению, между ячейками диапазона есть несколько строк, некоторые с числами, которые будут сравниваться с текстами, давая ложное срабатывание при каждом минутном обновлении. Хорошее предложение, просто не сработает в моем случае.
3. И являются ли ваши ячейки, которые вы хотите проверять, не постоянно на одинаковом расстоянии друг от друга? Если это так, вы можете
Step
в цикле For пропустить все x ячеек. Или используйте вспомогательный столбец, чтобы определить строки, которые вы хотите вычислить, а затем выполнить цикл на их основе. Однако, не видя вашего фактического листа, трудно понять, что может сработать в вашем случае, поскольку мне не совсем понятно ваше расположение.4. К сожалению, нет, не фиксированное количество строк. Шаблоны для конкретных стратегий опций различаются по количеству строк. Когда я добавляю шаблон для торговли опционами, я размещаю в электронной таблице по дате истечения срока действия, а не по торговой стратегии (которая варьируется от 7 до 10 строк). В электронной таблице может быть до 300-400 строк, что является причиной необходимости оповещения в дополнение к условному форматированию, чтобы ячейка прибыли стала ярко-желтой, чтобы привлечь внимание. Предупреждение предотвращает необходимость непрерывной прокрутки для поиска ячеек, которые достигли цели.
5. Хорошо, если у вас есть условное форматирование, которое проверяет ячейки, тогда вы можете просто использовать VBA, чтобы найти выделенные ячейки и сообщить об их положении или что вы хотите сделать. Цвет ячейки в условном формате определяется с помощью:
DisplayFormat.Interior.Color
.