3

Добрый день,

Я работаю над таблицей Excel, где у меня есть таблица данных. Эти данные представляют несколько показателей, которые мой отдел хочет отслеживать. Всякий раз, когда кто-то хочет заполнить таблицу новыми данными, предыдущие данные в ячейках теряются.

Как кто-то может создать отдельный лист, где вы можете автоматически хранить все значения этой таблицы? Я имею в виду, когда изменение выполняется в одной из ячеек таблицы, новое значение будет автоматически сохраняться в другой таблице, в которой будут храниться все значения (старые и новые) ячеек? Я пробовал "отслеживать изменения", но я не уверен, что мне так нравится.

Кто-нибудь знает более эффективный способ сделать это? Через макрос например?

Спасибо!

4 ответа4

3

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

2

(Я нахожусь на мобильном телефоне, поэтому я не могу дать очень подробный ответ прямо сейчас.)

Я написал код именно для этого. Моим намерением было отслеживать все изменения на критическом листе, отредактированном несколькими пользователями. Если возник спор о том, откуда поступили данные, я мог бы просмотреть журнал. Вот части VBA, которые пригодятся.

Событие Worksheet_Change будет срабатывать при каждом изменении рабочего листа.

If Not Intersect(Target, Range("A1:G12")) Is Nothing не скажет, находятся ли измененные ячейки в некотором диапазоне, о котором вы заботитесь.

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

Сделай удар и посмотри, как далеко ты доберешься. Я могу быть немного более многословным завтра.


Следующий день Править

Вот некоторый код, который будет смотреть диапазон A1:G12 на любом листе с кодом в нем. Если r - строка, которая была изменена, то код скопирует все из Ar:Gr в лист с кодовым именем shtLog . (Кодовое имя - это имя, отображаемое в VBA, а не имя на вкладке, которую вы видите в Excel.) Это должно заставить вас двигаться в правильном направлении.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Integer
    Dim c As Integer
    Dim arr(1 To 1, 1 To 12)
    If Not Intersect(Target, Range("A1:G12")) Is Nothing Then
        r = Target.Row
        For c = 1 To 12
            arr(1, c) = Cells(r, c).Value
        Next
        With shtLog
            .Range(.Cells(.UsedRange.Rows.Count + 1, 1), .Cells(.UsedRange.Rows.Count + 1, 12)) = arr
        End With
    End If
End Sub
0

С помощью функции добавления Sheetgo вы можете сохранить историю изменений переменных в Excel. Больше информации в этом посте: https://sheetgo.com/track-changes-excel-files/ (* отказ от ответственности: я являюсь соучредителем Sheetgo).

0

Мы (отказ от ответственности, я основатель) создали систему аудита для Excel (подобно тому, что делает Google Docs, но для Excel). Для него не требуется общая рабочая книга, а контрольный журнал сохраняется в локальной базе данных SQL, поэтому к нему можно получить доступ из любой рабочей книги и сохранить на отдельном листе. Посмотрите: http://www.officeautomata.com

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .