bmv98rus, Я понял, видимо положение столбцов в таблице тоже имеет значение, тогда вот я воссоздал часть моей искомой таблицы с положением столбцов относительно друг друга. Применить правила ко всем столбцам где есть слово "цена". Таблице дал название "Пробная". Можете ещё потом сказать что и где нужно будет поменять в коде при 1) изменении положения столбцов 2) добавлении нового элемента со своим правилом деления на целые и дробные части.
bmv98rus, Я понял, видимо положение столбцов в таблице тоже имеет значение, тогда вот я воссоздал часть моей искомой таблицы с положением столбцов относительно друг друга. Применить правила ко всем столбцам где есть слово "цена". Таблице дал название "Пробная". Можете ещё потом сказать что и где нужно будет поменять в коде при 1) изменении положения столбцов 2) добавлении нового элемента со своим правилом деления на целые и дробные части.KrosTj
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 Then ' Is target one cell If Target <> "" And IsNumeric(Target) Then ' is Target non blank or numeric Set IListObject = Range(Target.Address).ListObject If Not IListObject Is Nothing Then ' is Target is part of table If IListObject = "Пробная" Then ' is table is taget table If InStr(1, LCase(Cells(IListObject.HeaderRowRange.Row, Target.Column)), "цена") <> 0 And _ Target = Int(Target) Then ' is Target column name contain "цена" Application.EnableEvents = False Select Case Cells(Target.Row, IListObject.Range.Column) Case "XAUUSD" Target = Round(Left(Target & "0000000", 7) / 10 ^ 3, 3) 'Target.NumberFormat = "0.000" ' Moved to conditional format Case "USDJPY" Target = Round(Left(Target & "0000000", 6) / 10 ^ 3, 3) 'Target.NumberFormat = "0.000" ' Moved to conditional format Case Else Target = Round(Left(Target & "0000000", 6) / 10 ^ 5, 5) 'Target.NumberFormat = "0.00000" ' Moved to conditional format End Select Application.EnableEvents = True End If End If End If End If End If End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 Then ' Is target one cell If Target <> "" And IsNumeric(Target) Then ' is Target non blank or numeric Set IListObject = Range(Target.Address).ListObject If Not IListObject Is Nothing Then ' is Target is part of table If IListObject = "Пробная" Then ' is table is taget table If InStr(1, LCase(Cells(IListObject.HeaderRowRange.Row, Target.Column)), "цена") <> 0 And _ Target = Int(Target) Then ' is Target column name contain "цена" Application.EnableEvents = False Select Case Cells(Target.Row, IListObject.Range.Column) Case "XAUUSD" Target = Round(Left(Target & "0000000", 7) / 10 ^ 3, 3) 'Target.NumberFormat = "0.000" ' Moved to conditional format Case "USDJPY" Target = Round(Left(Target & "0000000", 6) / 10 ^ 3, 3) 'Target.NumberFormat = "0.000" ' Moved to conditional format Case Else Target = Round(Left(Target & "0000000", 6) / 10 ^ 5, 5) 'Target.NumberFormat = "0.00000" ' Moved to conditional format End Select Application.EnableEvents = True End If End If End If End If End If End Sub
bmv98rus, Зелёным это комментарии или что? Я скопировал этот код и вставил куда нужно, но при вводе значений снова открывает эдитор с какой-то ошибкой. В этой таблице я только заменил название таблицы в кавычках на своё и слово "цена" на свои названия (у всех есть общие слова в заголовках). Не могли бы вы написать по-русски что и как заменять.
bmv98rus, Зелёным это комментарии или что? Я скопировал этот код и вставил куда нужно, но при вводе значений снова открывает эдитор с какой-то ошибкой. В этой таблице я только заменил название таблицы в кавычках на своё и слово "цена" на свои названия (у всех есть общие слова в заголовках). Не могли бы вы написать по-русски что и как заменять.KrosTj
А с какой ошибкой? Куда нужно это куда? По идее, в скрипте все очень прозрачно и даже комменты лишние. может при замене что убрали или лишнее вставили.
А с какой ошибкой? Куда нужно это куда? По идее, в скрипте все очень прозрачно и даже комменты лишние. может при замене что убрали или лишнее вставили.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
bmv98rus, Нужно наверно сказать, что в той части подлинной таблицы, которую я прикрепил 1 сообщением этой страницы темы справа от столбца "Цена 7" (последний столбец) и слева от "Инструменты" есть и другие столбцы. Это просто выдержка из середины таблицы, не её начало или конец. Может поэтому не получается. А вставлял в модуль листа той книги, где у меня реальная таблица. Ваш код под спойлером скопировал, вставил в модуль и изменил только 2 элемента - "Пробная" на название таблицы в моей книге и "Цена", изменил тоже на слово, которое имеют общим 4 столбца в искомой таблице. Т.е например, такие названия столбцов "Пробная цена", "Завышенная цена" и тд. В шаблонной таблице я тоже написал цена 1, цена 2, цена 3 и тд, чтобы показать разницу, которая есть между ними в моей таблице. Если так будет проще, то представьте что есть таблица X, в которой есть 4 столбца с тем расположением относительно друг друга, которое я показал в шаблонном файле с заданием и которые находятся где-то в её середине.
bmv98rus, Нужно наверно сказать, что в той части подлинной таблицы, которую я прикрепил 1 сообщением этой страницы темы справа от столбца "Цена 7" (последний столбец) и слева от "Инструменты" есть и другие столбцы. Это просто выдержка из середины таблицы, не её начало или конец. Может поэтому не получается. А вставлял в модуль листа той книги, где у меня реальная таблица. Ваш код под спойлером скопировал, вставил в модуль и изменил только 2 элемента - "Пробная" на название таблицы в моей книге и "Цена", изменил тоже на слово, которое имеют общим 4 столбца в искомой таблице. Т.е например, такие названия столбцов "Пробная цена", "Завышенная цена" и тд. В шаблонной таблице я тоже написал цена 1, цена 2, цена 3 и тд, чтобы показать разницу, которая есть между ними в моей таблице. Если так будет проще, то представьте что есть таблица X, в которой есть 4 столбца с тем расположением относительно друг друга, которое я показал в шаблонном файле с заданием и которые находятся где-то в её середине.KrosTj
bmv98rus, Ошибка такая - после ввода в клетку нужного столбца цифр и нажатия enter, открывается редактор кода (не знаю как называется), и пишет: Compile error: Expected End Sub. Оригинальный файл я не могу вам отправить, но я вот создал максимально приближённую ситуацию. Даже столбцы и саму таблицу назвал как у меня. Мне бы общий код, который имеет данный функционал, но который я мог бы применять к любым столбцам таблицы, просто изменяя целевые столбцы в самом коде.
bmv98rus, Ошибка такая - после ввода в клетку нужного столбца цифр и нажатия enter, открывается редактор кода (не знаю как называется), и пишет: Compile error: Expected End Sub. Оригинальный файл я не могу вам отправить, но я вот создал максимально приближённую ситуацию. Даже столбцы и саму таблицу назвал как у меня. Мне бы общий код, который имеет данный функционал, но который я мог бы применять к любым столбцам таблицы, просто изменяя целевые столбцы в самом коде.KrosTj
KrosTj Мне кажется что вы издеваетесь надо мной и собой. Где в приложенном файле код который в #22 ? Если к этому добавить постоянно меняющиеся условия, то .... Убрал УФ. Вернул формат в модуль. Проверка данных осталась обычная, её нужно распространять на иные столбцы если таковые появляются.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Const strTableName = "Diary" Const strItem = "Item" Const strColumnName = "Price" Dim IListObject As ListObject Dim RangeHeader Dim i As Integer If Target.Count = 1 Then ' Is target one cell If Target <> "" And IsNumeric(Target) Then ' is Target non blank or numeric Set IListObject = Range(Target.Address).ListObject If Not IListObject Is Nothing Then ' is Target is part of table If IListObject = strTableName Then ' is table is taget table If InStr(1, LCase(Cells(IListObject.HeaderRowRange.Row, Target.Column)), LCase(strColumnName)) <> 0 And _ Target = Int(Target) Then ' is Target column name contain "цена" RangeHeader = IListObject.HeaderRowRange For i = 1 To UBound(RangeHeader, 2) If LCase(RangeHeader(1, i)) = LCase(strItem) Then Application.EnableEvents = False With Target Select Case Cells(.Row, i + IListObject.Range.Column - 1) Case "XAUUSD" .Value = Round(Left(.Value & "0000000", 7) / 10 ^ 3, 3) .NumberFormat = "0.000" Case "USDJPY" .Value = Round(Left(.Value & "0000000", 6) / 10 ^ 3, 3) .NumberFormat = "0.000" Case Else .Value = Round(Left(.Value & "0000000", 6) / 10 ^ 5, 5) .NumberFormat = "0.00000" End Select End With Application.EnableEvents = True Exit For End If Next End If End If End If End If End If End Sub
[/vba]
Compile error: Expected End Sub. означает, что вы что-то не корректно вставили, это нарушен синтаксис, а не логика кода.
KrosTj Мне кажется что вы издеваетесь надо мной и собой. Где в приложенном файле код который в #22 ? Если к этому добавить постоянно меняющиеся условия, то .... Убрал УФ. Вернул формат в модуль. Проверка данных осталась обычная, её нужно распространять на иные столбцы если таковые появляются.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Const strTableName = "Diary" Const strItem = "Item" Const strColumnName = "Price" Dim IListObject As ListObject Dim RangeHeader Dim i As Integer If Target.Count = 1 Then ' Is target one cell If Target <> "" And IsNumeric(Target) Then ' is Target non blank or numeric Set IListObject = Range(Target.Address).ListObject If Not IListObject Is Nothing Then ' is Target is part of table If IListObject = strTableName Then ' is table is taget table If InStr(1, LCase(Cells(IListObject.HeaderRowRange.Row, Target.Column)), LCase(strColumnName)) <> 0 And _ Target = Int(Target) Then ' is Target column name contain "цена" RangeHeader = IListObject.HeaderRowRange For i = 1 To UBound(RangeHeader, 2) If LCase(RangeHeader(1, i)) = LCase(strItem) Then Application.EnableEvents = False With Target Select Case Cells(.Row, i + IListObject.Range.Column - 1) Case "XAUUSD" .Value = Round(Left(.Value & "0000000", 7) / 10 ^ 3, 3) .NumberFormat = "0.000" Case "USDJPY" .Value = Round(Left(.Value & "0000000", 6) / 10 ^ 3, 3) .NumberFormat = "0.000" Case Else .Value = Round(Left(.Value & "0000000", 6) / 10 ^ 5, 5) .NumberFormat = "0.00000" End Select End With Application.EnableEvents = True Exit For End If Next End If End If End If End If End If End Sub
[/vba]
Compile error: Expected End Sub. означает, что вы что-то не корректно вставили, это нарушен синтаксис, а не логика кода.bmv98rus