[英]Excel VBA: Restart Loop Counter
嗨,我正在尝试重启我的循环计数器(iColumn)。 我循环遍历列以替换模板中的多个单词(TemplateSheet)。 循环遍历所有列(内部循环)后是否可以重新启动循环计数器。
我唯一的问题是在递增行值后,它返回到循环(列),然后iColumn的值变为4并终止内部循环。
While Sheets("DataSheet").Cells(iRow, 1).Value <> ""
While Sheets("DataSheet").Cells(1, iColumn) <> ""
sFind = Sheets("DataSheet").Cells(1, iColumn)
sReplacement = Sheets("DataSheet").Cells(iRow, iColumn)
sTemplate = Replace(sTemplate, sFind, sReplacement)
iColumn = iColumn + 1
Wend
Sheets("OutputSheet").Cells(iRow, 1) = sTemplate
iRow = iRow + 1
Wend
在重新启动循环计数器时解决了该问题。 但是现在我必须覆盖替换函数,因为它不存储新替换的数据。
只需将iColumn
的值重置为您需要的初始值即可。 我假设1
。
While Sheets("DataSheet").Cells(iRow, 1).Value <> ""
While Sheets("DataSheet").Cells(1, iColumn) <> ""
sFind = Sheets("DataSheet").Cells(1, iColumn)
sReplacement = Sheets("DataSheet").Cells(iRow, iColumn)
sTemplate = Replace(sTemplate, sFind, sReplacement)
iColumn = iColumn + 1
Wend
MsgBox sTemplate
iRow = iRow + 1
iColumn = 1
Wend
您可以像这样简化代码:
While Sheets("DataSheet").Cells(iRow, 1).Value <> ""
While Sheets("DataSheet").Cells(1, iColumn) <> ""
sTemplate = Replace(sTemplate, Sheets("DataSheet").Cells(1, iColumn), Sheets("DataSheet").Cells(iRow, iColumn))
iColumn = iColumn + 1
Wend
MsgBox sTemplate
iRow = iRow + 1
iColumn = 1
Wend
最后,请注意, MsgBox
调用的位置只能获得sTemplate
的最终值,而不是任何中间值。 当然,这可能就是你所追求的。
如果sTemplate具有您在单元格中所需的值,那么您需要将单元格设置为该数据,如下所示:
Sheets("DataSheet").Cells(iRow, iColumn) = sTemplate
这是整个循环:
While Sheets("DataSheet").Cells(iRow, 1).Value <> ""
While Sheets("DataSheet").Cells(1, iColumn) <> ""
sFind = Sheets("DataSheet").Cells(1, iColumn)
sReplacement = Sheets("DataSheet").Cells(iRow, iColumn)
sTemplate = Sheets("TemplateSheet").Cells(1, 1)
Sheets("OutputSheet").Cells(iRow, iColumn) = Replace(sReplacement, sTemplate, sFind)
iColumn = iColumn + 1
Wend
MsgBox sTemplate
iRow = iRow + 1
iColumn = 1
Wend
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.