2015-12-22 2 views
-1

У меня есть две книги, общий «xlsx» файл A, который хранит данные и без обмена файлом «xlsm» B, который содержит мои макросы. Я хотел бы регулярно отслеживать изменения в файле A и защищать паролем эту историю изменений. Я знаю, что в файле A есть функция «Отслеживание изменений», и она может создать отдельный лист, содержащий историю изменений. Однако этот лист находится в книге A, которая используется совместно. Есть ли способ написать макрос в B, чтобы периодически извлекать эту историю изменений из A, помещать ее в файл xlsx C с паролем?Периодически сохраняйте изменения общей книги в изолированной книге

Здесь я хотел бы предотвратить изменение истории изменений. Только у меня есть к нему доступ. Обратите внимание, что я не могу сделать файл «Макрос включен» и писать макрос в нем.

Thank.

+0

Можете ли вы просто скрыть лист с отслеживаемыми изменениями, чтобы никто не знал, что он существует? Если это не действительное действие, было бы не слишком сложно просто скопировать содержимое этого листа в другую книгу. – NinjaLlama

+0

Спасибо, NinjaLlama. Функция «Отслеживание изменений» должна быть активирована человеком, использующим файл A. И когда этот человек сохраняет и закрывает файл A, этот лист, содержащий историю изменений, также исчезнет (хотя, если вы снова откроете файл A и активируете «Track Changes» », вы получите ту же историю изменений. Моя трудность заключается в написании кода в файле B, чтобы открыть файл A и активировать« Track Changes ». – user5700405

ответ

0

При открытии общего доступа ВБ, обновить данные изменения, затем скопируйте лист истории

Sub Demo() 
    Dim wbShared As Workbook 
    Dim wbHistory As Workbook 

    Set wbHistory = Application.Workbooks.Open(_ 
     Filename:="\\Path\To\Your\History\FileC.xlsx", _ 
     Password:="Password") 

    Set wbShared = Application.Workbooks.Open(_ 
     FileName:="\\Path\To\Your\Shared\FileA.xlsx") 

    ' Generate History Sheet (maybe change xlAllChanges to suit needs) 
    With wbShared 
     .HighlightChangesOptions _ 
      When:=xlAllChanges, _ 
      Who:="Everyone" 
     .ListChangesOnNewSheet = True 
    End With 

    ' Copy out History to FileC 
    wbShared.Worksheets("History").Copy After:=wbHistory.Sheets(wbHistory.Sheets.Count) 

    ' Clean Up 
    wbShared.Close False 
    wbHistory.Close True 
End Sub 
+0

Спасибо, Крис, за ответ. Я нашел решение некоторое время назад. Очень похоже на ваш совет здесь! – user5700405

0

Используя свою личную книгу, вы можете использовать макросы, чтобы открыть общую книгу и снова скопировать лист в частную книгу.

EDIT: К сожалению, я пропустил часть о сохранении его в файл C.

Вот, чтобы вы начали:

Sub wbCopy() 
    Dim sharedWb, myWb As Workbook 
    Dim sharedWs As Worksheet 

    Set myWb = New Workbook 

    Workbooks.Open Filename:="192.168.0.10\sharedWorkbook.xls", ReadOnly:=True 
    Set sharedWb = "sharedWorkbook.xls" 
    Set sharedWs = sharedWb.Worksheets(2) 

    sharedWs.Copy myWb.Worksheets(Sheets.Count) 

    Workbooks("sharedWorkbook.xls").Close 

    myWb.SaveAs Filename:="File C.xls" 
End Sub 
+0

Спасибо Vegard. Как и в моем ответе NinjaLlama, проблема связана с« Изменениями трека » »в файле A. Его нужно активировать вручную, когда открыт файл A. После сохранения файла A этот лист, содержащий историю изменений, исчез. Поэтому, если я использую код в файле B для открытия файла A, нет листа «Изменить историю». Я хотел бы использовать код для его активации из файла B. – user5700405

+0

Непосредственно ответ на ваш вопрос выходит за рамки, в которые я могу внести свой вклад. Часть меня сомневается, что это возможно, используя только «родные» инструменты. Я написал ручной инструмент для сравнения Excel файлы, однако ... если вы будете довольны сравнением версий «до» и «после» файла, это легко осуществить, используя только простой VBA. – Vegard

+0

На самом деле, я не знаю, почему я предположил, что вы не можете поместить макросы в файл A. Можете ли вы поместить макросы в файл A? – Vegard

Смежные вопросы