Вставить новую строку с порядковым номером после выполнения критериев - PullRequest
0 голосов
/ 21 января 2020

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

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

Я бы хотел, чтобы каждая кнопка сканировалась между диапазоном [то есть 11-0000 (MIN) и 11-9999 (MAX)] и выберите ячейку максимального значения, которая существует. В этой точке выбора вставьте целую новую строку ниже со следующим + 1 последовательным числом в столбце «B».

У меня есть кнопка, создающая строку таблицы, как мне хотелось бы, однако мне нужна помощь в определении ". Select (= Max (B: B))" и, насколько я понимаю, Макс также ограничит количество позиций, которые оно запрашивает? Я также играл с .Range ("B" & Rows.CountLarge) с небольшим или безуспешным результатом.

В идеале кнопка 11 - **** [как видно на экране cap] должен вставить порядковый номер ниже выделенной строки.

Может быть, я далеко над головой, но любое руководство, даже в подходе или фундаментальной структуре кода, поможет с благодарностью!

Private Sub CommandButton1_Click()

   Sheets("ENGINEERING-PART NUMBERS").Range("B" & Rows.CountLarge).End(xlUp).Select
   ActiveCell.Offset(1, 0).Select
   ActiveCell.EntireRow.Insert Shift:=xlDown

  ActiveCell.Value = "=ActiveCell + 1"

End Sub

Крышка экрана на листе

1 Ответ

0 голосов
/ 21 января 2020

Возможно, есть более простое решение, которое я упустил, но ниже будет работать.

Вставьте модуль в вашу книгу и добавьте следующий код:

Public Sub AddNextPartNumber(ByVal FirstCellInColumn As Range, Optional ByVal PartMask As Variant = "")

  Dim Temp As Variant, x As Long, MaxValueFound(1 To 2) As Variant

'Some error checking
  If PartMask = "" Then
    MsgBox "No part mask supplied", vbCritical
    Exit Sub
  ElseIf Not PartMask Like "*[#]" Then
    MsgBox "Invalid part mask supplied; must end in ""#"".", vbCritical
    Exit Sub
  ElseIf PartMask Like "*[#]*[!#]*[#]" Then
    MsgBox "Invalid part mask supplied; ""#"" must be continuous only.", vbCritical
    Exit Sub
  End If

'Get the column of data into an array
  With FirstCellInColumn.Parent
    Temp = .Range(FirstCellInColumn, .Cells(.Rows.Count, FirstCellInColumn.Column).End(xlUp))
  End With

'Search through the array and find the largest matching value
  For x = 1 To UBound(Temp, 1)
    If Temp(x, 1) Like PartMask Then
      If MaxValueFound(1) < Temp(x, 1) Then
        MaxValueFound(1) = Temp(x, 1)
        MaxValueFound(2) = x
      End If
    End If
  Next x

'Output new part number
  If MaxValueFound(2) = 0 Then

    'This part mask doesn't exist, enter one with 0's at the end of the list
    With FirstCellInColumn.Offset(x - 1, 0)
      .Value = Replace(PartMask, "#", 0)
      .Select
    End With

  Else

    'Get the length of the number to output
    Dim NumberMask As String, NumFormatLength As Long
    NumFormatLength = Len(PartMask) - Len(Replace(PartMask, "#", ""))
    NumberMask = String(NumFormatLength, "#")

    'Determine the new part number
    MaxValueFound(1) = Replace(MaxValueFound(1), Replace(PartMask, NumberMask, ""), "")
    MaxValueFound(1) = Replace(PartMask, NumberMask, "") & Format((MaxValueFound(1) * 1) + 1, String(NumFormatLength, "0"))

    'Insert row, add new part number and select new cell
    FirstCellInColumn.Offset(MaxValueFound(2), 0).EntireRow.Insert
    With FirstCellInColumn.Offset(MaxValueFound(2), 0)
      .Value = MaxValueFound(1)
      .Select
    End With

  End If

End Sub

Затем, для Для каждой кнопки вы пишете код, подобный следующему:

Private Sub CommandButton1_Click()

  'this is the code for the [ADD 11-****] button
  AddNextPartNumber Me.Range("B16"), "11-####"

End Sub

Private Sub CommandButton2_Click()

  'this is the code for the [ADD 22-****] button
  AddNextPartNumber Me.Range("B16"), "22-####"

End Sub

Это написано при условии, что вставка новой строки на ваш лист не повлияет на другие данные и что добавление новых данных в конец таблицы без вставка строки также не повлияет на другие данные.

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

Хорошо удачи в изучении веревок. Надеюсь, мои комментарии помогут вам понять, как работает то, что я написал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...