2016-07-12 4 views
0

Я хотел бы знать, есть ли способ удаленно дезактивировать файл excel через vba.Удаленное деактивация файла excel через vba

Проблема:
Наша компания использует файл excel для продажи, чтобы предоставить котировки клиенту. Теперь, когда есть обновление нашей схемы ценообразования, я отправляю новую версию файла Excel в команду продаж. Очевидная вещь, которая происходит следующая, заключается в том, что они не используют самую последнюю версию файла, чтобы дать цитату => клиент получает неправильную цену.

Что я пытался сделать:
Я применил замедленную бомбу, которая позволяет истечению срока действия файла в определенную дату. Проблема в том, что обновления файла excel происходят нерегулярно.

Что я имею в виду:
После запуска файла excel сценарий VBA запрашивает веб-сервер для самого последнего номера версии. Если номер версии в текущем открывающемся файле Excel меньше, чем тот, который предоставляется сервером, файл блокируется.

Можно ли это реализовать с помощью Excel и VBA? Я могу себе представить, что это вызывает некоторые проблемы с Windows Security и т. Д., Потому что это может выглядеть как троян или вирус.

Вы очень благодарны за помощь!

+0

Рассматривали ли вы использование общей книги? –

+0

Я действительно не слышал об этой функции. Однако, после быстрого google, это, кажется, не подходит к делу совершенно. Я бы не хотел, чтобы пользователь мог вносить изменения в книгу. Они должны только иметь возможность вводить специфику клиента, такую ​​как упорядоченная сумма и индивидуальная конфигурация, которые необходимы для предоставления отдельной цитаты.После этого они должны иметь возможность распечатать цитату и после закрытия файла она не должна содержать никаких изменений. – jonas778

+0

Вы можете сохранить последнюю дату выпуска на веб-странице и проверить обновление при открытии книги. –

ответ

0

Если вы посылаете им .xlsm файл следующий код (любезность Тома Urtis из «VBA и макросов для Microsoft Excel»), будет удалить файл, когда прошло выбранная дата. Будьте осторожны с этим кодом и всегда следите за сохранением резервной копии.

Вставьте этот раздел в раздел «рабочая тетрадь» vba, и он будет выполняться каждый раз, когда файл открывается. Если текущая дата после выбранной даты удалит файл.

Private Sub workbook_open() 

    If Date > CDate("13.07.16") Then 

     With ThisWorkbook 

      .Saved = True 
      .ChangeFileAccess xlReadOnly 
      Kill .FullName 
      .Close False 
     End With 

    End If 

End Sub 
+0

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

+0

Я считаю, что это то, что я уже реализовал. Проблема в том, что, когда новая версия файла Excel должна быть выдана до даты истечения срока действия старого файла, у вас все еще есть неопределенность в том, что торговый персонал будет использовать неправильный (старый) файл и давать неправильные кавычки. – jonas778

+0

Я действительно понимаю эту проблему, но я не думаю, что вы сможете выполнить полное действие поиска и удаления на unkown диске с высокой вероятностью успешного удаления конкретного файла без слишком большого количества ложноположительных удалений. Что я могу вам порекомендовать, так это периодически отправлять новые ценовые файлы (например, каждую пятницу) и удалять файлы с одинаковой частотой. Таким образом, ваши представители по продажам не смогут путать файлы. Я все же понимаю, что это субоптимально :) – seulberg1

0

Вы также можете проверить, но не по дате, по версии файла, ссылаясь на ячейку, в которой будет доступна версия.

Private Sub workbook_open() 

    If [A1].value > "v.02.15" Then 

     With ThisWorkbook 

      .Saved = True 
      .ChangeFileAccess xlReadOnly 
      Kill .FullName 
      .Close False 
     End With 

    End If 

End Sub 
+0

Но для этого требуется локальный файл для определения текущей (новейшей) версии. Или я не понимаю ваше предложение? Это то, что я хочу понять. Найти удаленную версию последней версии файла. – jonas778

0
Sub ПримерИспользования() 
    Dim ra As Range: On Error Resume Next 

    Set ra = GetQueryRange("http://ExcelVBA.ru/", 6) 
    Debug.Print ra '.Address ' переменная ra содержит ссылку на диапазон ячеек $A$1:$C$15, 
    ' содержащий данные 6-й таблицы главной страницы сайта ExcelVBA.ru 

End Sub 

Function GetQueryRange(ByVal SearchLink$, Optional ByVal Tables$) As Range 
    On Error Resume Next: Err.Clear 
    Dim tmpSheet As Worksheet: Set tmpSheet = ThisWorkbook.Worksheets("tmpWQ") 
    If tmpSheet Is Nothing Then 
     Application.ScreenUpdating = False 
     Set tmpSheet = ThisWorkbook.Worksheets.Add 
     tmpSheet.Name = "tmpWQ" 
     tmpSheet.Visible = xlSheetVeryHidden 
    End If 
    If tmpSheet Is Nothing Then 
     msg$ = "Не удалось добавить скрытый лист «tmpWQ» в файл программы" 
     MsgBox msg, vbCritical, "Невозможно выполнить запрос к сайту": End 
    End If 

    tmpSheet.Cells.Delete: DoEvents: Err.Clear 
    With tmpSheet.QueryTables.Add("URL;" & SearchLink$, tmpSheet.Range("A1")) 
     If Len(Tables$) Then 
      .WebSelectionType = xlSpecifiedTables 
      .WebTables = Tables$ 
     Else 
      .WebSelectionType = xlEntirePage 
     End If 
     .FillAdjacentFormulas = False: .PreserveFormatting = True 
     .RefreshOnFileOpen = False: DoEvents 
     .WebFormatting = xlWebFormattingAll 
     .Refresh BackgroundQuery:=False: DoEvents 
     If Err = 0 Then Set GetQueryRange = tmpSheet.UsedRange 
     .Delete: DoEvents 
    End With 
End Function 

Изменить ссылку в строке 3. окне Turn Locals Window Путь View \ Locals Window. Перед началом набора макросов Toggle Breakpoint (F9) в строке Debug.Print ra '.Address' ra variable contains a reference to a cell range $ A $ 1: $ C $ 15, Запустите макрос, а в окне Locals Window выберите ra \ Value2 - это будут данные с сайта.

Теперь данные с сайта будут храниться в переменной ra и принимать их могут быть похожи на следующее, чтобы изменить строку:

Debug.Print ra.Value2(2, 2) 'result: "У вас есть интернет-магазин?" 

Этот код копируется с сайта: http://excelvba.ru/code/WebQueryRange

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