Vba 搜索一个表中的值数,调整另一个表中的行数
我试图搜索“商品”出现在表列中的次数:证券[策略]。然后,我想取这个数字并相应地调整另一个工作表上的表(名为:商品)的大小。如果它在Securities[Strategy]列中出现6次,则商品表应调整为6行,依此类推 我对VBA很陌生。当我运行下面的代码时,什么都没有发生Vba 搜索一个表中的值数,调整另一个表中的行数,vba,excel,Vba,Excel,我试图搜索“商品”出现在表列中的次数:证券[策略]。然后,我想取这个数字并相应地调整另一个工作表上的表(名为:商品)的大小。如果它在Securities[Strategy]列中出现6次,则商品表应调整为6行,依此类推 我对VBA很陌生。当我运行下面的代码时,什么都没有发生 Sub AdjRow() Dim Count1 As Integer Count1 = Application.WorksheetFunction.CountIf(Range("Securities[Stra
Sub AdjRow()
Dim Count1 As Integer
Count1 = Application.WorksheetFunction.CountIf(Range("Securities[Strategy]"), "Commodity")
Count1 = Count1 + 12
ActiveSheet.ListObjects("Commodity").Resize Range("$A$12:$J$" & Count1)
End Sub
要帮助调试,您可以使用
Debug.print
将键值打印到即时窗口,或使用MsgBox
将键值打印到消息框。不过在这种情况下,我很好奇当您尝试运行宏时是否会收到任何错误消息。编辑代码并尝试运行它,当我从CountIf
中得到的结果大于1时,它运行正常,但当结果大于1或小于1时,它会因错误而中止。如果试图调整大小的表没有标题,我假设如果CountIf
大于零,宏将正常运行
这是我调试代码时得到的代码、示例数据和输出。我运行了3次代码,从CountIf
-函数返回值为8、1和2。请注意,我在第二次运行时没有获得listobject的第三个地址,这是因为代码在尝试将listobject
仅设置为其标题时中止(A2:J2
)
代码
Option Explicit
Sub AdjRow()
Dim r As Range
Dim i As Long
Dim lo As ListObject
Set r = Sheet2.Range("Securities[Strategy]")
i = Application.WorksheetFunction.CountIf(r, "Test1")
i = i + 1
Set lo = Sheet1.ListObjects("Commodity")
Debug.Print i
Debug.Print r.Address
Debug.Print lo.Range.Address
lo.Resize Range("$A$2:$J$" & i)
Debug.Print lo.Range.Address
End Sub
表1
第2张
输出到即时窗口
9$A$2:$A$10
$A$2:$J$9
$A$2:$J$9
2
$A$2:$A$10
$A$2:$J$9
3
$A$2:$A$11
$A$2:$J$9
$A$2:$J$3
您确定
Count1
返回的值高于零吗?我在调试时进行了检查。Count1的号码是对的。我还不太了解它,但我认为使用ActiveSheet而不是引用正确的工作表会阻止宏执行任何操作。我似乎记得我尝试过使用工作表(“SheetName”).ListObjects…(等等)-但那也不起作用。最后,我将工作表和表格分配给一个变量(Var),正如下面Eirik所指出的,然后使用Var.Resize Range…-作为指挥官。我感谢你的帮助。谢谢艾瑞克-非常有帮助。我对宏非常陌生,但我认为问题可能是我使用了上面的“活动表”。我不认为这个命令有任何作用。我到了可以点击run的地方;而且,什么也不会发生。我会在VB中调试,并且我可以判断范围countif是否工作。它不会调整表的大小。现在我只需要弄清楚如何使新行的格式与表的其余部分匹配。新行显示为不同的格式。我想可能是使用了“Integer”作为我的计数变量(“上面的I”),而不是“Long”@Tyler使用Integer而不是Long不会影响任何事情,除此之外。