Vba 过滤器中的最后一行偏移量
因此,我的宏的目的是将版本号添加到零件号。首先,用户将输入所有数据,然后我的宏将在表的底部创建一个新条目,其中包含该信息。然后它将根据零件号过滤表格。仍然在过滤器中,我需要它查看上一个条目并为我的当前条目添加1。例如,如果上一个是01,那么下一个就需要是02,依此类推。我在让我的宏运行add1部分时遇到了麻烦,下面是我的代码。我认为这可能不可能在过滤器中实现,或者我必须以不同的方式编写代码。任何洞察都会很棒,谢谢Vba 过滤器中的最后一行偏移量,vba,excel,filter,Vba,Excel,Filter,因此,我的宏的目的是将版本号添加到零件号。首先,用户将输入所有数据,然后我的宏将在表的底部创建一个新条目,其中包含该信息。然后它将根据零件号过滤表格。仍然在过滤器中,我需要它查看上一个条目并为我的当前条目添加1。例如,如果上一个是01,那么下一个就需要是02,依此类推。我在让我的宏运行add1部分时遇到了麻烦,下面是我的代码。我认为这可能不可能在过滤器中实现,或者我必须以不同的方式编写代码。任何洞察都会很棒,谢谢 'Update version number Sheets("New V
'Update version number
Sheets("New Version ").Select
part = Range("B4").Value
Sheets("PN_List").Select
ActiveSheet.Range("$A$1:$K$3000").AutoFilter Field:=1, Criteria1:=part
ActiveWorkbook.Worksheets("PN_List").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("PN_List").AutoFilter.Sort.SortFields.Add Key:= _
Range("B1:B3000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("PN_List").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Worksheets("PN_List").Activate
With Range("B" & Rows.Count).End(xlUp).Offset(1)
.Value = "0" & .Offset(-1).Value + 1
End With
我猜你的手机格式是“普通” 在单元格上单击鼠标右键,转到“设置单元格格式”。将类别更改为“文本” 或者,如果希望在VBA中完成,请添加以下内容:
.Value = "0" & .Offset(-1).Value + 1
.Style = "Text"
根据请求:
'Update version number
Sheets("New Version ").Select
part = Range("B4").Value
Sheets("PN_List").Select
ActiveSheet.Range("$A$1:$K$3000").AutoFilter Field:=1, Criteria1:=part
ActiveWorkbook.Worksheets("PN_List").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("PN_List").AutoFilter.Sort.SortFields.Add Key:= _
Range("B1:B3000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("PN_List").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Worksheets("PN_List").Activate
With Range("B" & Rows.Count).End(xlUp).Offset(1)
' following line was added to set text format in the target cell
.NumberFormat = "@"
.Value = "0" & .Offset(-1).Value + 1
End With
让我们重新编写一下代码
Dim wsNewVersion = Thiwworkbook.Sheets("New Version")
Dim wsPNList = Thiwworkbook.Sheets("PN_List")
part = wsNewVersion.Range("B4").Value
wsPNList.Range("A1:K3000").AutoFilter Field:= 1, Criteria1:=part
wsPNList.AutoFilter.Sort.SortFields.Clear
wsPNList.AutoFilter.Sort.SortFields.Add Key:= _
wsPNList.Range("B1:B3000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With wsPNList.AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'~~> Below code is what you need i guess
Dim myrng As Range, lrow As Long
Dim myadd
'~~> Get the Range Address of the visible cells only
lrow = wsPNList.Range("A" & Rows.Count).End(xlUp).Row
Set myrng = wsPNList.Range("B1", Range("B" & lrow)).Offset(1, 0).Resize(lrow - 1).SpecialCells(xlCellTypeVisible)
'~~> pass addresses in array
myadd = Split(myrng.Address, ",")
'~~> Now you know the address, you can assign the value
With wsPNList
.Range(myadd(UBound(myadd))).Value = Range(myadd(UBound(myadd) - 1)).Value + 1
End With
希望这就是你需要的。我相信是这样:)但谁知道呢。“我在让我的宏运行add 1时遇到了麻烦”--到底是什么问题?问题是它确实需要最后一个条目,并向当前条目加上一个值。当我使用代码中的块运行最后一个
时,它会在B列最底部的单元格下方放置一个新值,新值是前一行中值的+1。我能看到的唯一问题是没有保留前导0,您可以通过在With
声明和Value
语句之间添加.NumberFormat=“@”
来解决。您好,Andy,您能告诉我更新后我的新代码是什么样子吗。谢谢你想要的东西可能在一个过滤器中:D。我假设你过滤a列中的零件号。当显示所有零件号时,最后一个条目在B列的相邻单元格中没有值。因此,您需要为其添加与过滤器+1中的前一个值相等的值。您的方法将不起作用,因为您不是只在可见范围内工作,而是在所有范围内工作。您的代码将运行,但不会得到预期的结果。请参阅我的帖子,了解可能的解决方案。这太棒了!非常感谢。