Я создал таблицу (Excel 2007), которая будет отслеживать заказы в течение года. В рамках этого отслеживания мне нужно создать уникальный идентификатор на основе даты и количества заказов, которые поступают в день. Счетчик сбрасывается каждый день.Создание уникального идентификатора на основе даты и количества запросов
Например,
Запрос 1 = Дата: 02/02/16 -> ID # 20160202-01
Запрос 2 = Дата: 02/02/16 -> ID # 20160202-02
Запрос 3 = Дата : 02/03/16 -> ID # 20160202-01
Из-за характера бизнеса заказы поступают в формате электронной почты и затем вводятся в электронную таблицу через форму пользователя. Внутри этой пользовательской формы я попробовал оператор If..Then для увеличения переменной (n), если дата запроса соответствует предыдущей записи. Это работает, но значение (n) сбрасывается всякий раз, когда выполняется эта форма, что означает, что мое максимальное значение, которое я могу получить, равно 2.
Я считаю, что исправление заключается в создании (n) глобальной/общедоступной переменной, но я не знают, как использовать общедоступную переменную для доступа через пользовательскую форму. Кто-нибудь имеет какие-либо советы или хорошие ссылки, чтобы исправить эту проблему? Спасибо заранее за вашу помощь.
ОБНОВЛЕНИЕ: Спасибо всем за быструю обратную связь. Я просто застал коллегу и, по прихоти, спросил ее, есть ли у меня исправление. Она сообщила мне, что статическая переменная станет способом устранения этой проблемы. Это исправление помогло, но не является идеальным решением. Я поставлю соответствующий код для этого, чтобы показать выполненное исправление.
Sub CommandButtonSubmitClose_Click()
Static n As Integer
Dim ordDate As Date
Dim ordYear As Integer
Dim txtYear As String
Dim txtMonth As String
Dim txtDay As String
Dim txtCount As String
Dim IDnum As String
Dim prevRow As Long
Dim LastRow As Long, ws As Worksheet
'Define variables'
prevRow = LastRow - 1
txtYear = reqYear
txtMonth = Format(month(reqDate), "00")
txtDay = Format(day(reqDate), "00")
If ordDate = ws.Range("A" & prevRow).Value Then
n = n + 1
Else 'Determine daily count'
n = 1
End If
txtCount = Format(n, "00")
'Create ID Number'
IDnum = " " & txtYear & "" & txtMonth & "" & txtDay & "-" & txtCount & ""
Новые проблемы: Как указано в комментариях, переменная не сохраняется, если электронная таблица закрыта. Поэтому, если заказы приходят позже, этот счет сбрасывается, создавая дубликаты, которые заставляют все это сходить с ума. Кроме того, если в миксе не существует последовательной даты, генератор не работает.
Было бы хорошо, если бы мы увидели ваш текущий соответствующий код, это может быть легче найти ошибку вместо того, чтобы изобретать код. –
Вы не можете «сохранить» значение в переменной, когда электронная таблица закрыта и снова открыта. Как хранятся данные? На этом мы можем найти легкое решение. – MatthewD
Сохраните счет в ячейке на листе и введите код, увеличивающий указанную ячейку. – findwindow