Проблема с моим одним из следующего кода последовательности - PullRequest
0 голосов
/ 21 октября 2019

Итак, у меня есть эта пользовательская форма, которая всякий раз, когда она попадает в строку, нумеруется как 1,2,3 и т. Д.

Dim ws As Worksheet: Set ws = ThisWorkbook.ActiveSheet
Dim LastRow As Long, nums As Range
Dim number As Range
Dim NextRow As Long
Dim number As Range
Dim LastItem As Range

LastRow = ws.Range("A:A").find("No.", lookat:=xlWhole, LookIn:=xlValues).Row
NextRow = ws.Range("A:A").find(What:="", After:=Cells(LastRow, 1)).Row
Set number= ws.Range("A:A").find("Number")
Set LastItem = ws.Range("A:A").find("Email")


If Not number Is Nothing Then
    'find the occupied range below the header
    Set nums = ws.Range(number.Offset(1, 0), ws.Cells(LastItem.Count, 1).End(xlUp).Offset(1, 0))
    'populate max. value plus one
    nums.Cells(nums.Cells.Count).Value = Application.Max(nums) + 1
End If

Проблема, с которой я столкнулся, заключается в том, что на моем листе Excel, посередине есть некоторая информация, поэтому ws.Cells (Row.Count.1) не будет работать, так как он будет вводить данные полностью внизу. Когда я впервые нажимаю кнопку на пользовательской форме, она вводит данные в строку 5, и это хорошо. Но во второй раз вместо перехода к 6-й строке он просто останется в 5-й строке и заменит данные. Как мне установить, где он может перейти к следующему ряду. Спасибо.

1 Ответ

1 голос
/ 21 октября 2019

Как обсуждалось в комментариях, вы используете фиксированное местоположение со смещением 1, которое всегда будет одним и тем же конечным местоположением, например, 3 + 1 равно 4, независимо от того, сколько раз вы его повторно запускаете.

Вы можете захватить последнюю строку и использовать ее в зависимости от того, знаете ли вы, в каком столбце будут храниться данные (предполагается, что это «A» (columns(1)).

Dim ws As Worksheet: Set ws = ThisWorkbook.ActiveSheet
Dim LastRow As Long, nums As Range 
Dim number As Range
Dim NextRow As Long
Dim number As Range
Dim LastItem As Range

LastRow = ws.Cells(ws.Rows.Count,1).End(xlUp).Row 'CHANGED
NextRow = ws.Range("A:A").find(What:="", After:=Cells(LastRow, 1)).Row
Set number= ws.Range("A:A").find("Number")
Set LastItem = ws.Range("A:A").find("Email")


If Not number Is Nothing Then
    'find the occupied range below the header
    Set nums = ws.Range(number.Offset(1, 0), ws.Cells(LastRow,1)) 'CHANGED
    'populate max. value plus one
    ws.Cells(LastRow+1,1).Value = Application.Max(nums) + 1 'CHANGED
End If

Произведено три измененияв ваш код для поддержки поиска последней строки в столбце «А» и использования последней строки.

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