2013-08-01 6 views
0

В моей организации у нас есть шаблон Excel, который все сотрудники должны заполнять часто. Этот шаблон содержит сотни/тысячи файлов Excel (книг) в год.Создать уникальный идентификатор книги из шаблона в Excel

Для организации я настоятельно должен иметь уникальный идентификатор для каждого из этих файлов (то есть уникальный идентификатор для каждой книги, сгенерированный этим шаблоном).

В настоящее время, моя идея состоит в том, чтобы создать следующий идентификатор в ячейке книги:

[пользователь] - [YYYYMMDD] - [ччммсс]

, в котором:

  • user - это строка, представляющая имя пользователя сотрудника, которое будет заполнено пользователем. Так что проблем здесь нет.
  • YYYYMMDD в год, месяц и день конкатенации
  • hhmmss в час, минуту и ​​второй сцепляются

Для этого эффекта, я должен был бы, что мой шаблон Excel автоматически заполняет ячейку с YYYYMMDD-hhmmss информацией с в точная дата и время генерации.

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

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

Может ли кто-нибудь помочь?

Большое спасибо заранее!

ответ

0

Идея иметь поле даты/времени хорошее ...создать книгу smilar к этому

enter image description here

добавить следующий код в модуль ThisWorkbook:

Private Sub Workbook_Open() 
    If [B2] = "" Then 
     ' timestamp 
     [B2] = Now() 

     ' suppress warning when saving macro containing workbook in non-macro format 
     Application.DisplayAlerts = False 

     ' save under calculated name 
     ActiveWorkbook.SaveAs [B1] & "-" & Format([B2], "YYYYMMDD-hhmmss") 

     ' turn on alerts again 
     Application.DisplayAlerts = True 
    End If 
End Sub 

и сохранить как включен шаблон макро

Затем создать [File - New] из этого шаблона .... он будет немедленно сохранен под именем пользователя с удаленным макросом, чтобы код не ударил его в другой раз.

Имя пользователя может быть извлечено из среды или из реестра.

В качестве альтернативы вы можете проверить, имеет ли файл истинное имя или (по-прежнему), имя: Book nnn, что означает, что он не был сохранен ранее; это устраняет необходимость резервирования ячейки временной метки в вашей книге

+0

Это почти идеально! – flai

0

Вот несколько функций, которые вы можете использовать для получения своего идентификатора. Если вы разместите это внутри модуля vba на своем шаблоне, вы сможете вызвать функции из рабочих листов или другого кода vba (например, в книге просто введите «= get_id()», в vba вы сделаете что-то вроде «id = get_id()», чтобы назвать это:

Option Explicit

Public Function lpad(string1, padded_length, _ 
        Optional pad_string = " ") 
    Dim chars 

    chars = padded_length - Len(string1) 
    lpad = WorksheetFunction.Rept(pad_string, chars) & string1 

End Function 

Public Function get_id() 
    Dim user 
    Dim YYYYMMDD 
    Dim hhmmss 

    user = Environ("username") 
    YYYYMMDD = Year(Now()) & lpad(Month(Now()), 2, 0) & lpad(Day(Now()), 2, 0) 
    hhmmss = lpad(Hour(Now()), 2, 0) & lpad(Minute(Now()), 2, 0) & lpad(Second(Now()), 2, 0) 

    get_id = user & "-" & YYYYMMDD & "-" & hhmmss 

End Function 

функция LPAD только для форматирования (так что вы получите 07 за июль вместо 7 и т.д.) Кроме того, я добавил кое-что здесь, чтобы установить. пользователь для переменной окружения Windows для имени текущего пользователя, но если вы хотите пробовать пользователя, то эту деталь можно легко заменить.

Сообщите мне о новинках и если у вас есть вопросы.

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