Excel VBA: автоматическое увеличение идентификационного номера внутри текста - PullRequest
0 голосов
/ 12 января 2019

У меня есть здесь пример кода того, как происходит автоматическое увеличение ID-номера и пример вывода программы

enter image description here

Sub AddData()
Dim ws As Worksheet 'define worksheet
Set ws = ThisWorkbook.Worksheets("Sheet3")

Dim Deadline As Range 'define deadline range
Set Deadline = ws.Range("H1")

Dim Submitted As Range 'define submitted range
Set Submitted = ws.Range("H3")


Dim nRow As Long 'find next free row = last used used row +1
nRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1

ws.Cells(nRow, "A").Value = "ABC-00" & nRow & ""
ws.Cells(nRow, "B").Value = Deadline.Value
ws.Cells(nRow, "C").Value = Submitted.Value
End Sub

Как видите, у меня есть 3 разных поля. ID, СРОК ДЕЙСТВИЯ, ОТПРАВЛЕН

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

Как вы заметили, первый идентификатор - это ABC-001, и он внезапно переходит в ABC-003 вместо ABC-002.

Как я полагаю, возможно, причина в том, что он следует за строкой # данных, поэтому после ABC-001 он отображается как ABC-003, потому что этот идентификационный номер - строка # 3

Есть ли способ получить последний вставленный идентификатор и быть основой для создания нового идентификатора?

Ответы [ 3 ]

0 голосов
/ 12 января 2019

Я бы запрограммировал эту задачу: просто возьмите последнее использованное и добавьте 1.

Sub AddData()

    Dim Ws As Worksheet
    Dim AbcID As Range
    Dim Deadline As Range
    Dim Submitted As Range
    Dim AbcNum As Integer

    Set Ws = ThisWorkbook.Worksheets("Sheet3")          'define worksheet
    With Ws
        Set AbcID = .Cells(.Rows.Count, "A").End(xlUp)  'last used
        Set Deadline = .Range("H1")                     'define deadline cell
        Set Submitted = .Range("H3")                    'define submitted cell
    End With

    With AbcID
        If .Row > 1 Then AbcNum = Val(.Value)
        Set AbcID = .Offset(1)
    End With

    With AbcID
        .Value = AbcNum + 1
        .NumberFormat = """ABC""" & "-000"
        .Offset(0, 1).Value = Deadline.Value
        .Offset(0, 2).Value = Submitted.Value
    End With
End Sub
0 голосов
/ 12 января 2019

Первым ответом был сотовый телефон. Ваш "nRow" - это оригинальный номер плюс один. Таким образом, вы должны снова вычесть 1. Для получения правильных результатов вы должны установить цифру на 3 цифры. Если вам больше 10 и больше 100, вы можете увидеть разницу. Простое объединение символов (00 и 1) приведет к другим результатам позже.

ws.Cells(nRow, "A").Value = "ABC-" & Format(nRow - 1, "000")
0 голосов
/ 12 января 2019

Изменение

ws.Cells(nRow, "A").Value = "ABC-00" & nRow & ""

до

ws.Cells(nRow, "A").Value = "ABC-00" & (nRow - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...