Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 过滤器中的最后一行偏移量_Vba_Excel_Filter - Fatal编程技术网

Vba 过滤器中的最后一行偏移量

Vba 过滤器中的最后一行偏移量,vba,excel,filter,Vba,Excel,Filter,因此,我的宏的目的是将版本号添加到零件号。首先,用户将输入所有数据,然后我的宏将在表的底部创建一个新条目,其中包含该信息。然后它将根据零件号过滤表格。仍然在过滤器中,我需要它查看上一个条目并为我的当前条目添加1。例如,如果上一个是01,那么下一个就需要是02,依此类推。我在让我的宏运行add1部分时遇到了麻烦,下面是我的代码。我认为这可能不可能在过滤器中实现,或者我必须以不同的方式编写代码。任何洞察都会很棒,谢谢 'Update version number Sheets("New V

因此,我的宏的目的是将版本号添加到零件号。首先,用户将输入所有数据,然后我的宏将在表的底部创建一个新条目,其中包含该信息。然后它将根据零件号过滤表格。仍然在过滤器中,我需要它查看上一个条目并为我的当前条目添加1。例如,如果上一个是01,那么下一个就需要是02,依此类推。我在让我的宏运行add1部分时遇到了麻烦,下面是我的代码。我认为这可能不可能在过滤器中实现,或者我必须以不同的方式编写代码。任何洞察都会很棒,谢谢

    '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中的前一个值相等的值。您的方法将不起作用,因为您不是只在可见范围内工作,而是在所有范围内工作。您的代码将运行,但不会得到预期的结果。请参阅我的帖子,了解可能的解决方案。这太棒了!非常感谢。