Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 循环代码不';t在某些工作表上填充正确的单元格_Vba_Excel - Fatal编程技术网

Vba 循环代码不';t在某些工作表上填充正确的单元格

Vba 循环代码不';t在某些工作表上填充正确的单元格,vba,excel,Vba,Excel,以下代码在某些工作表上正常工作。代码应该计算从1990年到2012年以及从2005年到2012年的百分比变化,并将计算结果分别放在最后一个非空行的第4行和第5行。除了3张外,所有的纸都是一样的。不同的表只有不同的数据年数。出于某种原因,这会导致VBA脚本将随机行中的百分比更改计算放在正确位置下方。此外,VBA脚本在同一张图纸上无法正常工作。我不知道为什么 Sub PercentChangeCalPIP() Dim iRow As Long Dim sheet_name As Range For

以下代码在某些工作表上正常工作。代码应该计算从1990年到2012年以及从2005年到2012年的百分比变化,并将计算结果分别放在最后一个非空行的第4行和第5行。除了3张外,所有的纸都是一样的。不同的表只有不同的数据年数。出于某种原因,这会导致VBA脚本将随机行中的百分比更改计算放在正确位置下方。此外,VBA脚本在同一张图纸上无法正常工作。我不知道为什么

Sub PercentChangeCalPIP()
Dim iRow As Long
Dim sheet_name As Range
For Each sheet_name In Sheets("WS").Range("I:I")
    If sheet_name.Value = "" Then
        Exit For
    Else
    With Sheets(sheet_name.Value)
'90-20## Percent Change
iRow = 14
Cell_val = .Cells(iRow, 1)
While Cell_val <> ""
    iRow = iRow + 3
    Cell_val = .Cells(iRow, 1)
Wend
.Cells(iRow + 3, 1) = "1990-2012"
'Column B,2

Cell_val = .Cells(iRow, 2)
While Cell_val <> ""
    iRow = iRow + 3
    Cell_val = .Cells(iRow, 2)
Wend
.Cells(iRow + 3, 2) = "=((B14/VLOOKUP(1990, A14:B46, 2,FALSE))-1)"
'Column C,3

Cell_val = .Cells(iRow, 3)
While Cell_val <> ""
    iRow = iRow + 3
    Cell_val = .Cells(iRow, 3)
Wend
.Cells(iRow + 3, 3) = "=((C14/VLOOKUP(1990, A14:C46, 3,FALSE))-1)"
'Column D,4

Cell_val = .Cells(iRow, 4)
While Cell_val <> ""
    iRow = iRow + 3
    Cell_val = .Cells(iRow, 4)
Wend
.Cells(iRow + 3, 4) = "=((D14/VLOOKUP(1990, A14:D46, 4,FALSE))-1)"
'Column E,5

Cell_val = .Cells(iRow, 5)
While Cell_val <> ""
    iRow = iRow + 3
    Cell_val = .Cells(iRow, 5)
Wend
.Cells(iRow + 3, 5) = "=((E14/VLOOKUP(1990, A14:E46, 5,FALSE))-1)"
'05-20## Percent Changes
Cell_val = .Cells(iRow, 1)
While Cell_val <> ""
    iRow = iRow + 4
    Cell_val = .Cells(iRow, 1)
Wend
.Cells(iRow + 4, 1) = "2005-2012"
'Column B,2

Cell_val = .Cells(iRow, 2)
While Cell_val <> ""
    iRow = iRow + 4
    Cell_val = .Cells(iRow, 2)
Wend
.Cells(iRow + 4, 2) = "=((B14/VLOOKUP(2005, A14:B46, 2,FALSE))-1)"
'Column C,3

Cell_val = .Cells(iRow, 3)
While Cell_val <> ""
    iRow = iRow + 4
    Cell_val = .Cells(iRow, 3)
Wend
.Cells(iRow + 4, 3) = "=((C14/VLOOKUP(2005, A14:C46, 3,FALSE))-1)"
'Column D,4

Cell_val = .Cells(iRow, 4)
While Cell_val <> ""
    iRow = iRow + 4
    Cell_val = .Cells(iRow, 4)
Wend
.Cells(iRow + 4, 4) = "=((D14/VLOOKUP(2005, A14:D46, 4,FALSE))-1)"
'Column E,5

Cell_val = .Cells(iRow, 5)
While Cell_val <> ""
    iRow = iRow + 4
    Cell_val = .Cells(iRow, 5)
Wend
.Cells(iRow + 4, 5) = "=((E14/VLOOKUP(2005, A14:E46, 5,FALSE))-1)"
End With
        End If
    Next sheet_name
End Sub
Sub-PercentChangeCalPIP()
暗淡无光
尺寸表名称作为范围
对于每个图纸,图纸(“WS”).范围(“I:I”)中的名称
如果工作表_name.Value=”“,则
退出
其他的
带图纸(图纸名称.值)
“90-20%的变化
iRow=14
单元格值=.Cells(iRow,1)
而单元格值为“”
iRow=iRow+3
单元格值=.Cells(iRow,1)
温德
.单元格(iRow+3,1)=“1990-2012”
"B栏,2
单元格值=.Cells(iRow,2)
而单元格值为“”
iRow=iRow+3
单元格值=.Cells(iRow,2)
温德
.单元格(iRow+3,2)=“(B14/VLOOKUP(1990,A14:B46,2,FALSE))-1)”
"C,3栏
单元格值=.Cells(iRow,3)
而单元格值为“”
iRow=iRow+3
单元格值=.Cells(iRow,3)
温德
.Cells(iRow+3,3)=“(C14/VLOOKUP(1990,A14:C46,3,FALSE))-1)”
"D栏,4
Cell_val=.Cells(iRow,4)
而单元格值为“”
iRow=iRow+3
Cell_val=.Cells(iRow,4)
温德
.Cells(iRow+3,4)=“(D14/VLOOKUP(1990,A14:D46,4,FALSE))-1)”
"E,5栏
Cell_val=.Cells(iRow,5)
而单元格值为“”
iRow=iRow+3
Cell_val=.Cells(iRow,5)
温德
.单元格(iRow+3,5)=“(E14/VLOOKUP(1990,A14:E46,5,FALSE))-1)”
'05-20###百分比变化
单元格值=.Cells(iRow,1)
而单元格值为“”
iRow=iRow+4
单元格值=.Cells(iRow,1)
温德
.单元格(iRow+4,1)=“2005-2012”
"B栏,2
单元格值=.Cells(iRow,2)
而单元格值为“”
iRow=iRow+4
单元格值=.Cells(iRow,2)
温德
.单元格(iRow+4,2)=“(B14/VLOOKUP(2005,A14:B46,2,FALSE))-1)”
"C,3栏
单元格值=.Cells(iRow,3)
而单元格值为“”
iRow=iRow+4
单元格值=.Cells(iRow,3)
温德
.Cells(iRow+4,3)=((C14/VLOOKUP(2005,A14:C46,3,FALSE))-1)
"D栏,4
Cell_val=.Cells(iRow,4)
而单元格值为“”
iRow=iRow+4
Cell_val=.Cells(iRow,4)
温德
.单元格(iRow+4,4)=“(D14/VLOOKUP(2005,A14:D46,4,FALSE))-1)”
"E,5栏
Cell_val=.Cells(iRow,5)
而单元格值为“”
iRow=iRow+4
Cell_val=.Cells(iRow,5)
温德
.Cells(iRow+4,5)=“(E14/VLOOKUP(2005,A14:E46,5,FALSE))-1)”
以
如果结束
下一页的名称
端接头
你有没有想过可能是什么问题

 While Cell_val <> ""
 iRow = iRow + 3

也许你有你自己的意图,我错过了。但使用间隔跳跃选择右边的行对我来说似乎有点奇怪

也许问题是床单不同???也许查找失败了??你试过调试它并看到它失败的地方吗???代码并没有完全失败。它只是没有将计算放在某些工作表上的正确位置。您是否尝试将工作表数据复制到另一个工作表,然后再试一次?可能工作表中有隐藏的列或其他东西..尝试了一下,不幸的是没有成功。不过,我确实通过将
iRow=14
更改为
iRow=.Cells(14,1).End(xlDown).Row
解决了这个问题,并消除了所有while循环。我希望我能发布一些工作表的图片,以提供更好的想法。本质上,出于美观的考虑,我需要百分比计算来填充
iRow=iRow+3
iRow=iRow+4
。非空的行数正好是3或4的乘积?在最后一行数据和百分比变化的第一行之间正好有3个空行。我确实通过将
iRow=14
更改为
iRow=.Cells(14,1).End(xlDown).Row
解决了这个问题,并去掉了所有while循环。然而,代码仍然在其中一张纸上给我带来麻烦。出于某种原因,在这一页上,它创建了重复的百分比变化计算,并将它们放在我有描述数据的技术注释的地方(这些注释从百分比变化计算的下面两行开始)。我注意到,您反复使用一个变量iRow作为移动索引。也许您可以通过跟踪iRow来调试代码。有时,只需在两行之间插入Msgbox(iRow)即可读取iRow。这有助于您了解插入结果的确切位置和时间。
 iRow = iRow + 1