В листе хронометражная карта выделен зеленным цветом есть ниспадающий список при выборе значения (2 столбец листа Прейскурант) вставляется данные в зеленные ячейки и идет пересчет но есть проблема, если значение в списке одинаковое то выбирается только первое верхнее т.е. если выбрать 280262201 их там два, выбрать второе там где Сидоров, высвечивается Петров ну и в ост. желтых ячейках по аналогии
и еще есть ли пример кода для следующей задачи если двойным кликом по ячейки 2 столбца листа Прейскуранта щелкнуть то как реализовать попадание этого значение в ячейку второго листа в позицию С8, с отображением уже пересчитанной Хронометражной карты, в дальнейшем первые 6 столбцов будут закрыты от изменений код собирал по кускам с разных мест, здесь уже помогли, но дальше еще нужна помощь Cells(9, 3) = WorksheetFunction.VLookup(Target, [КодСИ].Resize(, 7), 6, 0) подскажите предназначение 7 в данном коде, его как раз мне и скинули
В листе хронометражная карта выделен зеленным цветом есть ниспадающий список при выборе значения (2 столбец листа Прейскурант) вставляется данные в зеленные ячейки и идет пересчет но есть проблема, если значение в списке одинаковое то выбирается только первое верхнее т.е. если выбрать 280262201 их там два, выбрать второе там где Сидоров, высвечивается Петров ну и в ост. желтых ячейках по аналогии
и еще есть ли пример кода для следующей задачи если двойным кликом по ячейки 2 столбца листа Прейскуранта щелкнуть то как реализовать попадание этого значение в ячейку второго листа в позицию С8, с отображением уже пересчитанной Хронометражной карты, в дальнейшем первые 6 столбцов будут закрыты от изменений код собирал по кускам с разных мест, здесь уже помогли, но дальше еще нужна помощь Cells(9, 3) = WorksheetFunction.VLookup(Target, [КодСИ].Resize(, 7), 6, 0) подскажите предназначение 7 в данном коде, его как раз мне и скинулиCombat1971
7 в этом коде не нужно Но ведь тот код, что я скинул был другой! И там было нужно именно 7. Ну а тут достаточно 6. По VLOOKUP() - она всегда берёт первое совпадение, это не исправить, используйте что-то другое. P.S. Посмотрел код в файле - ну чтоб не путаться можно так и оставить всюду эту 7. А нужна она потому, что для VLOOKUP() нужно давать всю таблицу, а не только первый столбец - вот этим .Resize(, 7) я его и расширил на сколько нужно. Как решить задачу в целом таким подходом - я не знаю. Нужно кардинально что-то менять.
7 в этом коде не нужно Но ведь тот код, что я скинул был другой! И там было нужно именно 7. Ну а тут достаточно 6. По VLOOKUP() - она всегда берёт первое совпадение, это не исправить, используйте что-то другое. P.S. Посмотрел код в файле - ну чтоб не путаться можно так и оставить всюду эту 7. А нужна она потому, что для VLOOKUP() нужно давать всю таблицу, а не только первый столбец - вот этим .Resize(, 7) я его и расширил на сколько нужно. Как решить задачу в целом таким подходом - я не знаю. Нужно кардинально что-то менять.Hugo
т. е в моём случае заменить функцию ВПР не удастся, кардинально менять у меня знаний не хватает если бы пример похожий может быть и переделал бы... но все равно спасибо за помощь
т. е в моём случае заменить функцию ВПР не удастся, кардинально менять у меня знаний не хватает если бы пример похожий может быть и переделал бы... но все равно спасибо за помощьCombat1971
прейскурант иногда корректируется, могут добавляться или удалятся строки с последующим восстановлением нумерации, это не собьет код?, конечно не желательно бы так
прейскурант иногда корректируется, могут добавляться или удалятся строки с последующим восстановлением нумерации, это не собьет код?, конечно не желательно бы такCombat1971
Ну если следить за корректностью [КодСИ] - то не должен. Правда я затрудняюсь сказать как привязать выпадающий список номеров к диапазону [КодСИ] - тут формулистов нужно спросить... P.S.Сам нашёл:
Код
=СМЕЩ(КодСИ;0;-1)
Ну если следить за корректностью [КодСИ] - то не должен. Правда я затрудняюсь сказать как привязать выпадающий список номеров к диапазону [КодСИ] - тут формулистов нужно спросить... P.S.Сам нашёл:
а вот если без выпадающего списка, просто двойной клик по строке или ячейке в листе прейскурант и значение попадает на лист Хром. карта и там все расчитывется так не проще будет вот нашел такой код. [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) MsgBox "Был произведен двойной щелчок по ячейке " & Target.Address Cancel = True
End Sub
[/vba]
он правда срабатывает на любую ячейку, как закрепить на 2 столбец, дальше буду думать что делать с переменной ячейки
а вот если без выпадающего списка, просто двойной клик по строке или ячейке в листе прейскурант и значение попадает на лист Хром. карта и там все расчитывется так не проще будет вот нашел такой код. [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) MsgBox "Был произведен двойной щелчок по ячейке " & Target.Address Cancel = True
End Sub
[/vba]
он правда срабатывает на любую ячейку, как закрепить на 2 столбец, дальше буду думать что делать с переменной ячейкиCombat1971
Сообщение отредактировал Combat1971 - Пятница, 27.04.2018, 21:07
Вообщем все сделал, что хотел код на стр. Хрон. карты [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, [B1:B2003]) Is Nothing Then Cancel = True 'MsgBox "Áûë ïðîèçâåäåí äâîéíîé ùåë÷îê ïî ÿ÷åéêå " & Target.Address Worksheets("Õðîíîìåòðàæíàÿ êàðòà").Cells(8, 3).Value = Target.Value Worksheets("Õðîíîìåòðàæíàÿ êàðòà").Select End If End Sub
[/vba]
Большое спасибо Hugo за помощь!!!
Вообщем все сделал, что хотел код на стр. Хрон. карты [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, [B1:B2003]) Is Nothing Then Cancel = True 'MsgBox "Áûë ïðîèçâåäåí äâîéíîé ùåë÷îê ïî ÿ÷åéêå " & Target.Address Worksheets("Õðîíîìåòðàæíàÿ êàðòà").Cells(8, 3).Value = Target.Value Worksheets("Õðîíîìåòðàæíàÿ êàðòà").Select End If End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, [КодСИ]) Is Nothing Then Cancel = True With Sheets("Хронометражная карта") .Cells(8, 3) = Target .Cells(9, 3) = Target.Offset(, 5) .Cells(14, 1) = Target.Offset(, 7) .Cells(19, 16) = Target.Offset(, 4) .Cells(7, 3) = Target.Offset(, 2) & " " & Target.Offset(, 3) End With End If End Sub
[/vba] Не уверен правильные ли данные вытягивает.
Попробуйте так (кликать строго по [КодСИ]): [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, [КодСИ]) Is Nothing Then Cancel = True With Sheets("Хронометражная карта") .Cells(8, 3) = Target .Cells(9, 3) = Target.Offset(, 5) .Cells(14, 1) = Target.Offset(, 7) .Cells(19, 16) = Target.Offset(, 4) .Cells(7, 3) = Target.Offset(, 2) & " " & Target.Offset(, 3) End With End If End Sub
[/vba] Не уверен правильные ли данные вытягивает.Hugo
он правда срабатывает на любую ячейку, как закрепить на 2 столбец
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) If Target.Column=2 then MsgBox "Был произведен двойной щелчок по ячейке " & Target.Address Cancel = True
он правда срабатывает на любую ячейку, как закрепить на 2 столбец
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) If Target.Column=2 then MsgBox "Был произведен двойной щелчок по ячейке " & Target.Address Cancel = True