Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Право записи в часть строки от содержания ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Право записи в часть строки от содержания ячейки (Макросы/Sub)
Право записи в часть строки от содержания ячейки
ovechkin1973 Дата: Воскресенье, 13.10.2019, 19:38 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Есть достаточно большой файл, в котором нужно отмечать данные разным пользователям в зависимости от выполнения работ. Т.е. каждом файле нужно в столбцах с "AX" до "BM", начиная с 10-ой строки вносить данные. Но доступ к редактированию строк в этом диапазоне строк у всех должен быть разный.Столбцы с "A" до "AW" включительно редактировать нельзя, как и шапку таблицы (диапазно "A1:BM9"). Если человек открыл файл и ввел в ячейку BN1 свою фамилию, то он имеет право вносить изменения только в те строки, где в столбце "AW" записана эта фамилия.
К сообщению приложен файл: _2.xlsm (81.7 Kb)


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
СообщениеЕсть достаточно большой файл, в котором нужно отмечать данные разным пользователям в зависимости от выполнения работ. Т.е. каждом файле нужно в столбцах с "AX" до "BM", начиная с 10-ой строки вносить данные. Но доступ к редактированию строк в этом диапазоне строк у всех должен быть разный.Столбцы с "A" до "AW" включительно редактировать нельзя, как и шапку таблицы (диапазно "A1:BM9"). Если человек открыл файл и ввел в ячейку BN1 свою фамилию, то он имеет право вносить изменения только в те строки, где в столбце "AW" записана эта фамилия.

Автор - ovechkin1973
Дата добавления - 13.10.2019 в 19:38
K-SerJC Дата: Понедельник, 14.10.2019, 08:19 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
чисто теоретические размышления по решению задачки:

т.е. если нужно другие данные изменить любой вносит другую фамилию и меняет?
если учетные записи пользователя у всех уникальные, может к ним тогда привязываться?
или на скрытом листе вести список логин/пароль
при изменении в ячейке bn1 запрашивать пароль сверять со списком если верный снимать защиту листа, ячейки совпадающие с Фио устанавливать незащищенные, остальные защищенные и ставить защиту листа...


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщениечисто теоретические размышления по решению задачки:

т.е. если нужно другие данные изменить любой вносит другую фамилию и меняет?
если учетные записи пользователя у всех уникальные, может к ним тогда привязываться?
или на скрытом листе вести список логин/пароль
при изменении в ячейке bn1 запрашивать пароль сверять со списком если верный снимать защиту листа, ячейки совпадающие с Фио устанавливать незащищенные, остальные защищенные и ставить защиту листа...

Автор - K-SerJC
Дата добавления - 14.10.2019 в 08:19
Nic70y Дата: Понедельник, 14.10.2019, 08:51 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
как-то так
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    u_01 = Target.Row
    u_02 = Range("aw" & u_01).Value
    u_03 = Range("bn1").Value
    u_04 = Cells(Rows.Count, "aw").End(xlUp).Row
    u_05 = Target.Column
    u_21 = Application.Match(u_03, Range("aw10:aw" & u_04), 0)
    u_22 = Application.IsNA(u_21)
    If u_22 And u_01 > 9 And u_05 > 49 Then
        Range("bn1").Select
    Else
        If u_02 <> u_03 And u_01 > 9 And u_05 > 49 Then
            u_06 = Application.Match(u_03, Range("aw" & u_01 + 1 & ":aw" & u_04), 0)
            u_07 = Application.IsNumber(u_06)
            If u_07 Then
                Cells(u_01 + u_06, u_05).Select
            Else
                u_08 = Application.Match(u_03, Range("aw1:aw" & u_04), 0)
                Cells(u_08, u_05).Select
            End If
        End If
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    u_04 = Cells(Rows.Count, "aw").End(xlUp).Row
    If Not Intersect(Target, Range("ax10:bm" & u_04)) Is Nothing Then
        Target.Offset(0, 1).Select
    End If
End Sub
[/vba]для начала
ну там, если шо, напильником пройтись


ЮMoney 41001841029809
 
Ответить
Сообщениекак-то так
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    u_01 = Target.Row
    u_02 = Range("aw" & u_01).Value
    u_03 = Range("bn1").Value
    u_04 = Cells(Rows.Count, "aw").End(xlUp).Row
    u_05 = Target.Column
    u_21 = Application.Match(u_03, Range("aw10:aw" & u_04), 0)
    u_22 = Application.IsNA(u_21)
    If u_22 And u_01 > 9 And u_05 > 49 Then
        Range("bn1").Select
    Else
        If u_02 <> u_03 And u_01 > 9 And u_05 > 49 Then
            u_06 = Application.Match(u_03, Range("aw" & u_01 + 1 & ":aw" & u_04), 0)
            u_07 = Application.IsNumber(u_06)
            If u_07 Then
                Cells(u_01 + u_06, u_05).Select
            Else
                u_08 = Application.Match(u_03, Range("aw1:aw" & u_04), 0)
                Cells(u_08, u_05).Select
            End If
        End If
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    u_04 = Cells(Rows.Count, "aw").End(xlUp).Row
    If Not Intersect(Target, Range("ax10:bm" & u_04)) Is Nothing Then
        Target.Offset(0, 1).Select
    End If
End Sub
[/vba]для начала
ну там, если шо, напильником пройтись

Автор - Nic70y
Дата добавления - 14.10.2019 в 08:51
RAN Дата: Понедельник, 14.10.2019, 09:36 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
    Set r = Range("A" & Cells(Rows.Count, 49).End(xlUp).Row & ":BM1")
    If Not Intersect(Target, r) Is Nothing Then
        If Target.Row < 10 Or Target.Column < 50 Then
            Application.EnableEvents = False
            Application.Undo
            Application.EnableEvents = True
        Else
            If Cells(Target.Row, 49) <> Cells(1, 66) Then
                Application.EnableEvents = False
                Application.Undo
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
    Set r = Range("A" & Cells(Rows.Count, 49).End(xlUp).Row & ":BM1")
    If Not Intersect(Target, r) Is Nothing Then
        If Target.Row < 10 Or Target.Column < 50 Then
            Application.EnableEvents = False
            Application.Undo
            Application.EnableEvents = True
        Else
            If Cells(Target.Row, 49) <> Cells(1, 66) Then
                Application.EnableEvents = False
                Application.Undo
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub
[/vba]

Автор - RAN
Дата добавления - 14.10.2019 в 09:36
ovechkin1973 Дата: Понедельник, 14.10.2019, 15:15 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
т.е. если нужно другие данные изменить любой вносит другую фамилию и меняет?

Проблема с хотелками по файлу более глобальная и правила форума требуют задавать в одной теме один вопрос. Поэтому про ФИО Админа файла я не задал.. может зря.

если учетные записи пользователя у всех уникальные, может к ним тогда привязываться?

Можно и так. Думал над этим, когда вопрос задавал. На работе у всех учётки свои, но иногда нужно кому то помочь своему товарищу.... Но ваш вопрос меня еще поразмышлять заставил.. Можно и по учеткам сделать привязку, просто если кто то хочет помочь с работой с файлом - пусть под учеткой своего товарища заходит в комп... Короче буду думать.
при изменении в ячейке bn1 запрашивать пароль сверять со списком если верный снимать защиту листа, ячейки совпадающие с Фио устанавливать незащищенные, остальные защищенные и ставить защиту листа...

Моих познаний в Эксель не хватит так сделать.. Да способы предложенные чуть ниже вашего поста работают.. работают по разному, пока не разобрался еще как..


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
Сообщение
т.е. если нужно другие данные изменить любой вносит другую фамилию и меняет?

Проблема с хотелками по файлу более глобальная и правила форума требуют задавать в одной теме один вопрос. Поэтому про ФИО Админа файла я не задал.. может зря.

если учетные записи пользователя у всех уникальные, может к ним тогда привязываться?

Можно и так. Думал над этим, когда вопрос задавал. На работе у всех учётки свои, но иногда нужно кому то помочь своему товарищу.... Но ваш вопрос меня еще поразмышлять заставил.. Можно и по учеткам сделать привязку, просто если кто то хочет помочь с работой с файлом - пусть под учеткой своего товарища заходит в комп... Короче буду думать.
при изменении в ячейке bn1 запрашивать пароль сверять со списком если верный снимать защиту листа, ячейки совпадающие с Фио устанавливать незащищенные, остальные защищенные и ставить защиту листа...

Моих познаний в Эксель не хватит так сделать.. Да способы предложенные чуть ниже вашего поста работают.. работают по разному, пока не разобрался еще как..

Автор - ovechkin1973
Дата добавления - 14.10.2019 в 15:15
ovechkin1973 Дата: Понедельник, 14.10.2019, 15:41 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Nic70y, код работает не совсем ожидаемо, как я думал, когда вопрос писал.. но по своему задачу решает. Он просто не дает выделить ячейку, которую нельзя редактировать, а если начинаешь редактировать данные не в "своей" ячейке, то редактирование не происходит и курсор уходит вниз по столбцу до ближайшей ячейки, которую можно редактировать. Пока с кодом не разобрался.... для меня сложно и специфический способ решения задачи. В закладки сохраню.


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
СообщениеNic70y, код работает не совсем ожидаемо, как я думал, когда вопрос писал.. но по своему задачу решает. Он просто не дает выделить ячейку, которую нельзя редактировать, а если начинаешь редактировать данные не в "своей" ячейке, то редактирование не происходит и курсор уходит вниз по столбцу до ближайшей ячейки, которую можно редактировать. Пока с кодом не разобрался.... для меня сложно и специфический способ решения задачи. В закладки сохраню.

Автор - ovechkin1973
Дата добавления - 14.10.2019 в 15:41
ovechkin1973 Дата: Понедельник, 14.10.2019, 15:42 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
RAN, Ваш вариант максимально мне подходит - буду изучать.


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
СообщениеRAN, Ваш вариант максимально мне подходит - буду изучать.

Автор - ovechkin1973
Дата добавления - 14.10.2019 в 15:42
ovechkin1973 Дата: Понедельник, 21.10.2019, 18:47 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Range("A" & Cells(Rows.Count, 49).End(xlUp).Row & ":BM1")
If Not Intersect(Target, r) Is Nothing Then
If Target.Row < 10 Or Target.Column < 50 Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Else
If Cells(Target.Row, 49) <> Cells(1, 66) Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End If
End If
End Sub
[/vba]
Господа профи - вопрос в принципе полностью соответствует данной теме. Как доработать макрос, чтобы в столбце AW можно было записать несколько фамилий через запятую людей, которые может редактировать диапазон. В ячейке BN1 будет записана всегда одна фамилия. Ну и еще есть одно ограничение на невнимательность пользователей данного файла. Фамилию в столбец AW могут занести и правильно типа "Иванов, Сидоров, Овечкин", а могут между фамилиями и несколько пробелов поставить. Но запятая точно будет.
Если мой вопрос противоречит правилам форума, то готов часть вопроса оформить отдельной темой.


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.

Сообщение отредактировал Pelena - Четверг, 24.10.2019, 21:34
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Range("A" & Cells(Rows.Count, 49).End(xlUp).Row & ":BM1")
If Not Intersect(Target, r) Is Nothing Then
If Target.Row < 10 Or Target.Column < 50 Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Else
If Cells(Target.Row, 49) <> Cells(1, 66) Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End If
End If
End Sub
[/vba]
Господа профи - вопрос в принципе полностью соответствует данной теме. Как доработать макрос, чтобы в столбце AW можно было записать несколько фамилий через запятую людей, которые может редактировать диапазон. В ячейке BN1 будет записана всегда одна фамилия. Ну и еще есть одно ограничение на невнимательность пользователей данного файла. Фамилию в столбец AW могут занести и правильно типа "Иванов, Сидоров, Овечкин", а могут между фамилиями и несколько пробелов поставить. Но запятая точно будет.
Если мой вопрос противоречит правилам форума, то готов часть вопроса оформить отдельной темой.

Автор - ovechkin1973
Дата добавления - 21.10.2019 в 18:47
Pelena Дата: Понедельник, 21.10.2019, 19:16 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 19177
Репутация: 4417 ±
Замечаний: ±

Excel 365 & Mac Excel
Вопрос действительно по доработке макроса, поэтому пусть остается в этой теме.
А вот код надо не под спойлер класть, а оформлять тегами с помощью кнопки #. Исправьте


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеВопрос действительно по доработке макроса, поэтому пусть остается в этой теме.
А вот код надо не под спойлер класть, а оформлять тегами с помощью кнопки #. Исправьте

Автор - Pelena
Дата добавления - 21.10.2019 в 19:16
RAN Дата: Понедельник, 21.10.2019, 19:45 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Будем надеяться, что исправит
[vba]
Код
    Dim spl, fl As Boolean
    spl = Split(Cells(1, 66), ",")
    For i = LBound(spl) To UBound(spl)
        If Cells(Target.Row, 49) = Trim(spl(i)) Then fl = True: Exit For
    Next
    If Not fl Then
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
    End If
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеБудем надеяться, что исправит
[vba]
Код
    Dim spl, fl As Boolean
    spl = Split(Cells(1, 66), ",")
    For i = LBound(spl) To UBound(spl)
        If Cells(Target.Row, 49) = Trim(spl(i)) Then fl = True: Exit For
    Next
    If Not fl Then
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
    End If
[/vba]

Автор - RAN
Дата добавления - 21.10.2019 в 19:45
ovechkin1973 Дата: Четверг, 24.10.2019, 20:34 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Будем надеяться, что исправит

[vba]
Код
Dim spl, fl As Boolean
    spl = Split(Cells(Target.Row, 49), ",")
    For i = LBound(spl) To UBound(spl)
        If Cells(1, 66) = Trim(spl(i)) Then fl = True: Exit For
    Next
    If Not fl Then
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
    End If
[/vba]

Андрей, огромное человеческое! Код мне товарищ допилил. Работает отлично!


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
Сообщение
Будем надеяться, что исправит

[vba]
Код
Dim spl, fl As Boolean
    spl = Split(Cells(Target.Row, 49), ",")
    For i = LBound(spl) To UBound(spl)
        If Cells(1, 66) = Trim(spl(i)) Then fl = True: Exit For
    Next
    If Not fl Then
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
    End If
[/vba]

Андрей, огромное человеческое! Код мне товарищ допилил. Работает отлично!

Автор - ovechkin1973
Дата добавления - 24.10.2019 в 20:34
ovechkin1973 Дата: Четверг, 24.10.2019, 20:36 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
А вот код надо не под спойлер класть, а оформлять тегами с помощью кнопки #. Исправьте

Елена, сильно извиняюсь, но не могу исправить. Видимо поздно. Но Ваши замечания учел в следующем посту.
[admin]ОК. Исправила первый код[/admin]


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.

Сообщение отредактировал Pelena - Четверг, 24.10.2019, 21:37
 
Ответить
Сообщение
А вот код надо не под спойлер класть, а оформлять тегами с помощью кнопки #. Исправьте

Елена, сильно извиняюсь, но не могу исправить. Видимо поздно. Но Ваши замечания учел в следующем посту.
[admin]ОК. Исправила первый код[/admin]

Автор - ovechkin1973
Дата добавления - 24.10.2019 в 20:36
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Право записи в часть строки от содержания ячейки (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!