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

Вход

Регистрация

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

 

= Мир MS Excel/Общий файл и резерв ячеек. - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Общий файл и резерв ячеек. (Макросы/Sub)
Общий файл и резерв ячеек.
fairylive Дата: Среда, 24.02.2016, 17:25 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Есть общий файл с таблицей которая заполняется разными людьми. Так как люди часто заполняют строчки одновременно возникают конфликты. И не всегда они решаются в пользу того кто первым сделал запись. В итоге некоторые записи перезаписываются и теряются.

Придумали такое решение - зашёл в книгу, написал например Резерв и свою фамилию в строчках которые планируешь заполнить и вышел с сохранением. Если случился конфликт - то выбрать пункт где приоритет имеют чужие данные (те что раньше вводились). Затем заходишь снова и уже вводишь вместо Резерва со своей фамилией то что хотел. Не уверен на счёт выхода. По идее должно работать и просто сохранение, но мы для верности закрываем файл, возможно зря.

Нужен макрос чтобы данная процедура сама выполнялась например от сочетания клавиш. Обработка конфликта (пусть и гипотетического) для меня пока нерешаемая задача, хотя если кто-то сможет написать и без этого, буду признателен. Макрос понятное дело должен уметь понимать где закончились строчки с данными и пошли пустые строчки, спускаться на строку ниже, резервировать, прописывать имя пользователя в одну из ячеек резервируемой строки (у всех файлов ведь есть автор - вот хотя бы этого автора или имя компьютера), сохранять файл (совсем круто если ещё и конфликт решать).
 
Ответить
СообщениеЕсть общий файл с таблицей которая заполняется разными людьми. Так как люди часто заполняют строчки одновременно возникают конфликты. И не всегда они решаются в пользу того кто первым сделал запись. В итоге некоторые записи перезаписываются и теряются.

Придумали такое решение - зашёл в книгу, написал например Резерв и свою фамилию в строчках которые планируешь заполнить и вышел с сохранением. Если случился конфликт - то выбрать пункт где приоритет имеют чужие данные (те что раньше вводились). Затем заходишь снова и уже вводишь вместо Резерва со своей фамилией то что хотел. Не уверен на счёт выхода. По идее должно работать и просто сохранение, но мы для верности закрываем файл, возможно зря.

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

Автор - fairylive
Дата добавления - 24.02.2016 в 17:25
al-Ex Дата: Среда, 24.02.2016, 20:30 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 156
Репутация: 56 ±
Замечаний: 0% ±

Excel 2010
Так, что-ли?
Макрос вставляет две строки и подпись (Юзер/дата) под выбранной ячейкой и сохраняет файл.
[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Sub Name_Insert()

Dim oRow As Integer
Dim name_comp As String
    oRow = ActiveCell.Row
    name_comp = Space(255)

  h = GetComputerName(name_comp, 255) 'имя пользователя
  
ActiveSheet.Cells(oRow + 1, 1).EntireRow.Insert 'вставка строки
ActiveSheet.Cells(oRow + 1, 1).Value = "внесено: " & Trim(name_comp) 'Имя пользователя
ActiveSheet.Cells(oRow + 2, 1).EntireRow.Insert ' 'вставка строки
ActiveSheet.Cells(oRow + 2, 1).Value = "Дата: " & CStr(Now) 'Дата

Application.DisplayAlerts = False    'запрет сообщений
ActiveWorkbook.Save                  'сохраняем файл
Application.DisplayAlerts = True     'разрешение сообщений

End Sub
[/vba]
Цитата
Обработка конфликта (пусть и гипотетического) для меня пока нерешаемая задача

*Вообще стандартные механизмы использовать надо.
Вот, например: Использование общей книги для совместной работы над документом
К сообщению приложен файл: 6627490.xlsm(19Kb)


Сообщение отредактировал al-Ex - Четверг, 25.02.2016, 04:12
 
Ответить
СообщениеТак, что-ли?
Макрос вставляет две строки и подпись (Юзер/дата) под выбранной ячейкой и сохраняет файл.
[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Sub Name_Insert()

Dim oRow As Integer
Dim name_comp As String
    oRow = ActiveCell.Row
    name_comp = Space(255)

  h = GetComputerName(name_comp, 255) 'имя пользователя
  
ActiveSheet.Cells(oRow + 1, 1).EntireRow.Insert 'вставка строки
ActiveSheet.Cells(oRow + 1, 1).Value = "внесено: " & Trim(name_comp) 'Имя пользователя
ActiveSheet.Cells(oRow + 2, 1).EntireRow.Insert ' 'вставка строки
ActiveSheet.Cells(oRow + 2, 1).Value = "Дата: " & CStr(Now) 'Дата

Application.DisplayAlerts = False    'запрет сообщений
ActiveWorkbook.Save                  'сохраняем файл
Application.DisplayAlerts = True     'разрешение сообщений

End Sub
[/vba]
Цитата
Обработка конфликта (пусть и гипотетического) для меня пока нерешаемая задача

*Вообще стандартные механизмы использовать надо.
Вот, например: Использование общей книги для совместной работы над документом

Автор - al-Ex
Дата добавления - 24.02.2016 в 20:30
StoTisteg Дата: Среда, 24.02.2016, 21:28 | Сообщение № 3
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
Я бы сделал защиту книги (с любым паролем, хоть username) по событию Open и снятие по событию Close...


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
СообщениеЯ бы сделал защиту книги (с любым паролем, хоть username) по событию Open и снятие по событию Close...

Автор - StoTisteg
Дата добавления - 24.02.2016 в 21:28
fairylive Дата: Четверг, 25.02.2016, 12:00 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Так, что-ли?

Почти. Имя компьютера как оказалось мало подходит (не имеет отношения к пользователю). Видимо нужно имя пользователя username (фамилия пользователя на английском языке), хотя оно всё равно не совпадает с именем Автор (Имя и Фамилия на русском языке).
И с переходом строк. Если не делать автоопределение конца таблицы с данными, логика в том чтобы строчки (дата, пользователь) вставлялись относительно выделенной ячейки есть. Но тогда логично что пользователь будет выбирать пустую строчку и резервировать её. То есть макрос не должен спускаться ниже относительно выбранной. А оставаться в той строке которую выбрал пользователь. Дату хорошо бы вводить только во второй столбец, фамилию в шестой. Ну и хорошо бы тогда проверку сделать - пустые ли эти ячейки. Чтобы макрос не срабатывал на строчках с уже введёными данными. Первый столбец - это порядковый номер строк с данными - часто уже заполнен. То есть проверку надо делать начиная со второго столбца.
 
Ответить
Сообщение
Так, что-ли?

Почти. Имя компьютера как оказалось мало подходит (не имеет отношения к пользователю). Видимо нужно имя пользователя username (фамилия пользователя на английском языке), хотя оно всё равно не совпадает с именем Автор (Имя и Фамилия на русском языке).
И с переходом строк. Если не делать автоопределение конца таблицы с данными, логика в том чтобы строчки (дата, пользователь) вставлялись относительно выделенной ячейки есть. Но тогда логично что пользователь будет выбирать пустую строчку и резервировать её. То есть макрос не должен спускаться ниже относительно выбранной. А оставаться в той строке которую выбрал пользователь. Дату хорошо бы вводить только во второй столбец, фамилию в шестой. Ну и хорошо бы тогда проверку сделать - пустые ли эти ячейки. Чтобы макрос не срабатывал на строчках с уже введёными данными. Первый столбец - это порядковый номер строк с данными - часто уже заполнен. То есть проверку надо делать начиная со второго столбца.

Автор - fairylive
Дата добавления - 25.02.2016 в 12:00
al-Ex Дата: Пятница, 26.02.2016, 01:12 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 156
Репутация: 56 ±
Замечаний: 0% ±

Excel 2010
хорошо бы тогда проверку сделать - пустые ли эти ячейки
Макрос создаёт чистую строку сдвигая вниз всё содержание таблицы. Так что проверка не требуется.

Вот уточненный вариант с учётом Ваших пожеланий, вариант вставки строки можно выбрать,
1. Вставляем строку под выделенной ячейкой
2. Вставляем строку в самый низ (определяется по содержанию 1 столбца.)
К сообщению приложен файл: InsertRow.xlsm(23Kb)


Сообщение отредактировал al-Ex - Пятница, 26.02.2016, 07:42
 
Ответить
Сообщение
хорошо бы тогда проверку сделать - пустые ли эти ячейки
Макрос создаёт чистую строку сдвигая вниз всё содержание таблицы. Так что проверка не требуется.

Вот уточненный вариант с учётом Ваших пожеланий, вариант вставки строки можно выбрать,
1. Вставляем строку под выделенной ячейкой
2. Вставляем строку в самый низ (определяется по содержанию 1 столбца.)

Автор - al-Ex
Дата добавления - 26.02.2016 в 01:12
fairylive Дата: Пятница, 26.02.2016, 12:06 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
al-Ex, спасибо! Второй вариант подходит больше. Будем применять. Вообще считаю неплохое решение для всех кто имеет дело с общим файлом и построчным заполнением таблицы. По сочетанию клавиш например ctrl+р (рэ русская) резервируется строчка для дальнейшего редактирования. Фокус в том что делается это мгновенно и с сохранением. Меньше шансов встретиться с конфликтом с другим пользователем. Хотя шанс есть так как после моего сохранения другой пользователь пока сам не сохранится не увидит чужих изменений.

Возможно есть смысл в макрос перед добавлением строки внести ещё одно сохранение. Тогда сначала отобразятся чужие строки, затем после них добавится новая. В этом случае по идее вообще никогда конфликтов не будет. На практике правда подозреваю что при большом размере файла могут быть тормоза при его сохранении и не понятно как отработает макрос.
 
Ответить
Сообщениеal-Ex, спасибо! Второй вариант подходит больше. Будем применять. Вообще считаю неплохое решение для всех кто имеет дело с общим файлом и построчным заполнением таблицы. По сочетанию клавиш например ctrl+р (рэ русская) резервируется строчка для дальнейшего редактирования. Фокус в том что делается это мгновенно и с сохранением. Меньше шансов встретиться с конфликтом с другим пользователем. Хотя шанс есть так как после моего сохранения другой пользователь пока сам не сохранится не увидит чужих изменений.

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

Автор - fairylive
Дата добавления - 26.02.2016 в 12:06
al-Ex Дата: Пятница, 26.02.2016, 22:06 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 156
Репутация: 56 ±
Замечаний: 0% ±

Excel 2010
Возможно есть смысл в макрос перед добавлением строки внести ещё одно сохранение
Вряд-ли это снимет все Ваши проблемы, но можете поэкспериментировать:


* вообще, я бы иначе организовал работу с общей книгой.
1. Для исключения конфликтов каждому пользователю выделить свой лист в книге,
на нём сохраняются строки только этого пользователя.
2. сводный лист где будут видны все строки всех пользователей, формировать макросом,
каждый раз когда пользователь открывает книгу
и сохранять его не надо при сохранении книги (перед сохранением удалить сводный лист, тоже макросом)
Строки разных пользователей сохраняются на их индивидуальных листах.
Так вы радикально избегаете возможных конфликтов и потерь части информации.
в общих чертах, как-то так.


Сообщение отредактировал al-Ex - Суббота, 27.02.2016, 02:10
 
Ответить
Сообщение
Возможно есть смысл в макрос перед добавлением строки внести ещё одно сохранение
Вряд-ли это снимет все Ваши проблемы, но можете поэкспериментировать:


* вообще, я бы иначе организовал работу с общей книгой.
1. Для исключения конфликтов каждому пользователю выделить свой лист в книге,
на нём сохраняются строки только этого пользователя.
2. сводный лист где будут видны все строки всех пользователей, формировать макросом,
каждый раз когда пользователь открывает книгу
и сохранять его не надо при сохранении книги (перед сохранением удалить сводный лист, тоже макросом)
Строки разных пользователей сохраняются на их индивидуальных листах.
Так вы радикально избегаете возможных конфликтов и потерь части информации.
в общих чертах, как-то так.

Автор - al-Ex
Дата добавления - 26.02.2016 в 22:06
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Общий файл и резерв ячеек. (Макросы/Sub)
Страница 1 из 11
Поиск:

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