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 - Fatal编程技术网

Vba 搜索一个表中的值数,调整另一个表中的行数

Vba 搜索一个表中的值数,调整另一个表中的行数,vba,excel,Vba,Excel,我试图搜索“商品”出现在表列中的次数:证券[策略]。然后,我想取这个数字并相应地调整另一个工作表上的表(名为:商品)的大小。如果它在Securities[Strategy]列中出现6次,则商品表应调整为6行,依此类推 我对VBA很陌生。当我运行下面的代码时,什么都没有发生 Sub AdjRow() Dim Count1 As Integer Count1 = Application.WorksheetFunction.CountIf(Range("Securities[Stra

我试图搜索“商品”出现在表列中的次数:证券[策略]。然后,我想取这个数字并相应地调整另一个工作表上的表(名为:商品)的大小。如果它在Securities[Strategy]列中出现6次,则商品表应调整为6行,依此类推

我对VBA很陌生。当我运行下面的代码时,什么都没有发生

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不会影响任何事情,除此之外。