Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Excel VBA:重新启动循环计数器_Vba_Excel_Loops - Fatal编程技术网

Excel VBA:重新启动循环计数器

Excel VBA:重新启动循环计数器,vba,excel,loops,Vba,Excel,Loops,您好,我正在尝试重新启动循环计数器(iColumn)。我在各列之间循环,以替换模板(TemplateSheet)中的多个单词。是否可以在循环通过所有列(循环内部)后重新启动循环计数器。 我唯一的问题是在增加行值之后,它返回到循环(列),然后iColumn的值变为4,并终止内部循环 While Sheets("DataSheet").Cells(iRow, 1).Value <> "" While Sheets("DataSheet").Cells(1, iColumn) &l

您好,我正在尝试重新启动循环计数器(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
While工作表(“数据表”)。单元格(iRow,1)。值“”
而工作表(“数据表”)。单元格(1,iColumn)”
sFind=图纸(“数据表”)。单元格(1,iColumn)
sReplacement=图纸(“数据表”).单元格(iRow,iColumn)
sTemplate=Replace(sTemplate、sFind、sReplacement)
iColumn=iColumn+1
温德
表格(“输出表格”)。单元格(iRow,1)=模板
iRow=iRow+1
温德

重新启动循环计数器时,问题得到解决。但现在我必须覆盖替换函数,因为它不存储新替换的数据。

只需将
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工作表(“数据表”)。单元格(iRow,1)。值“”
而工作表(“数据表”)。单元格(1,iColumn)”
sFind=图纸(“数据表”)。单元格(1,iColumn)
sReplacement=图纸(“数据表”).单元格(iRow,iColumn)
sTemplate=Replace(sTemplate、sFind、sReplacement)
iColumn=iColumn+1
温德
MsgBox模板
iRow=iRow+1
iColumn=1
温德
您可以将代码简化如下:

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
While工作表(“数据表”)。单元格(iRow,1)。值“”
而工作表(“数据表”)。单元格(1,iColumn)”
sTemplate=替换(sTemplate,表格(“数据表”)。单元格(1,iColumn),表格(“数据表”)。单元格(iRow,iColumn))
iColumn=iColumn+1
温德
MsgBox模板
iRow=iRow+1
iColumn=1
温德

最后,请注意,
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
While工作表(“数据表”)。单元格(iRow,1)。值“”
而工作表(“数据表”)。单元格(1,iColumn)”
sFind=图纸(“数据表”)。单元格(1,iColumn)
sReplacement=图纸(“数据表”).单元格(iRow,iColumn)
sTemplate=表单(“模板表单”)。单元格(1,1)
表格(“输出表格”)。单元格(iRow,iColumn)=替换(sReplace,sTemplate,sFind)
iColumn=iColumn+1
温德
MsgBox模板
iRow=iRow+1
iColumn=1
温德

如果在
iRow=iRow+1
之后添加
iColumn=1
会怎么样?另外,在进入内部循环之前,
sFind
的定义是否应该正确?非常感谢@loannis!但我还有一个问题。我必须覆盖替换功能。因为它不会存储下一个新替换的数据。除了为什么你的方法不起作用之外,你能补充一个问题吗?这样你可以得到更好的帮助。。我觉得你想做的事情可以用一种简单得多的方式来完成。看见如果弗里曼的回答解决了您最初的问题,那么您最好接受/投票。谢谢您的建议@loannis。您能举一个您试图查找/替换的示例吗?看起来您正在下面的行中查找第一列中的字符串。然后用第一行的文本替换整个单元格。对吗?@bigbryan看起来我前几天在循环中给了你类似的答案。这没有修复你的循环吗?是的,先生@TonyL。谢谢你,先生。但我还有一个问题。我有三张数据表:数据表、模板表、输出表。我试图循环遍历每一列(数据表),以找到要替换的代码名(模板表上的相同代码名)。我将从“数据表”中获取替换词。然后我将新模板存储在“OutputSheet”中。现在我的问题是,我不知道如何覆盖新模板的替换函数。输出存储了来自第一个循环的模板的相同数据,并且永远不会替换,谢谢!这可能是你首先要问的问题:我在试着做“X”。这是我到目前为止所做的。这就是我遇到的问题。@bigbryan sTemplate当前是否在输出表中获得了所需的正确值?@bigbryan,在做了一些假设之后,我还更改了替换函数中参数的顺序。