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
如何使excel vba移动到for循环中的下一个单元格?_Excel_Vba - Fatal编程技术网

如何使excel vba移动到for循环中的下一个单元格?

如何使excel vba移动到for循环中的下一个单元格?,excel,vba,Excel,Vba,我这里有一个宏的代码,它从一个工作表到另一个工作表进行一些数据拾取和放置。现在这段代码完成了我希望它完成的90%。问题是,如果它遇到一个没有任何内容的源单元格(因此Len(cellVal)=0和cellVal=“”),它将覆盖目标单元格 您将看到,在第二个ElseIf块中有一条注释。现在它不进行任何签名,但如果该语句的计算结果为true,即源单元格中没有任何内容,则我希望Excel在不修改目标单元格内容的情况下移到下一个源单元格 关于如何实现这一点有什么想法吗 富兰克林 For i = 7 To

我这里有一个宏的代码,它从一个工作表到另一个工作表进行一些数据拾取和放置。现在这段代码完成了我希望它完成的90%。问题是,如果它遇到一个没有任何内容的源单元格(因此
Len(cellVal)=0
cellVal=“”
),它将覆盖目标单元格

您将看到,在第二个ElseIf块中有一条注释。现在它不进行任何签名,但如果该语句的计算结果为true,即源单元格中没有任何内容,则我希望Excel在不修改目标单元格内容的情况下移到下一个源单元格

关于如何实现这一点有什么想法吗

富兰克林

For i = 7 To endPointFlash
    Dim cellVal As String
    cellVal = Cells(i, "G")

    If (Len(cellVal)) > 0 Then
        RawData.Activate
    ElseIf (Len(cellVal)) = 0 Or cellVal = "" Then
        ' need to tell excel to do nothing and move to the next cell
    End If

    For j = 1 To endPointRaw
        If cellVal = Mid(Cells(j, "A"), 1, Len(cellVal)) Then
            val2 = Mid(Cells(j, "A"), 1, Len(cellVal))
            val3 = Cells(j, "D")
            Flash.Cells(i, "H").Value = val3
            Exit For
        Else: Flash.Cells(i, "H").Value = 0
        End If
    Next j
Flash.Activate
Next i
像这样:

For i = 7 To endPointFlash
    Dim cellVal As String
    cellVal = Cells(i, "G")

    If (Len(cellVal)) > 0 Then
        RawData.Activate
    ElseIf (Len(cellVal)) = 0 Or cellVal = "" Then
        ' need to tell excel to do nothing and move to the next cell
    Else
        For j = 1 To endPointRaw
            If cellVal = Mid(Cells(j, "A"), 1, Len(cellVal)) Then
                val2 = Mid(Cells(j, "A"), 1, Len(cellVal))
                val3 = Cells(j, "D")
                Flash.Cells(i, "H").Value = val3
                Exit For
            Else: Flash.Cells(i, "H").Value = 0
            End If
        Next j
    End If

Flash.Activate
Next i
或者像这样:

For i = 7 To endPointFlash
    Dim cellVal As String
    cellVal = Cells(i, "G")

    If (Len(cellVal)) > 0 Then
        RawData.Activate
    ElseIf (Len(cellVal)) = 0 Or cellVal = "" Then
        ' need to tell excel to do nothing and move to the next cell
        Goto NextLoop
    End If

    For j = 1 To endPointRaw
        If cellVal = Mid(Cells(j, "A"), 1, Len(cellVal)) Then
            val2 = Mid(Cells(j, "A"), 1, Len(cellVal))
            val3 = Cells(j, "D")
            Flash.Cells(i, "H").Value = val3
            Exit For
        Else: Flash.Cells(i, "H").Value = 0
        End If
    Next j
NextLoop:
Flash.Activate
Next i

为了非常清楚和明确,我将写下:

Dim cellVal As String

For i = 7 To endPointFlash
    cellVal = Flash.Cells(i, "G")

    If Len(cellVal) = 0 Then
        ' Do nothing.
    Else
        For j = 1 To endPointRaw
            If cellVal = Mid(RawData.Cells(j, "A"), 1, Len(cellVal)) Then
                val2 = Mid(RawData.Cells(j, "A"), 1, Len(cellVal))
                val3 = RawData.Cells(j, "D")
                Flash.Cells(i, "H").Value = val3
                Exit For
            Else
                Flash.Cells(i, "H").Value = 0
            End If
        Next j
    End If

Next i
在这里,读者非常清楚,包含空字符串的单元格不应导致任何操作;在所有其他情况下,请执行以下操作

此外,我不会来回激活每个工作表。这样做会使您的代码速度变慢(并使屏幕闪烁)。相反,我会使用正确的工作表名称识别每个对
单元格的调用。同样,这会使您非常清楚地知道从何处获取内容

注意:
cellVal=”“
必然意味着
Len(cellVal))=0
,因此无需在条件语句中同时写入这两个值

您可以尝试此操作(不确定当单元格为空时是否应执行
Flash.Activate
,如果是,请将其移动到
结束if
)下方:

Dim cellVal作为字符串
对于i=7到1的情况
cellVal=单元格(i,“G”)
如果cellVal“”那么
原始数据。激活
对于j=1到endPointRaw
如果cellVal=Mid(单元格(j,“A”),1,Len(cellVal)),则
val2=Mid(单元格(j,“A”),1,Len(单元格Val))
val3=单元(j,“D”)
闪光电池(i,“H”)。值=val3
退出
其他的
闪光电池(i,“H”)。值=0
如果结束
下一个j
闪光,激活
如果'Else'单元格为空,则结束:不执行任何操作
接下来我

+1建议使用
Mid$
字符串函数而不是
Mid
@assylias-谢谢,你说得很对,但是我试图避免重写他的代码,因为我无法理解他试图做什么。主要是他打算使用的床单。相反,我给了他正确的逻辑,忽略了条件和其他错误。我同意我有点懒。你似乎比我快了几分钟:-)
Dim cellVal As String

For i = 7 To endPointFlash
    cellVal = Cells(i, "G")

    If cellVal <> "" Then
      RawData.Activate

      For j = 1 To endPointRaw
          If cellVal = Mid(Cells(j, "A"), 1, Len(cellVal)) Then
              val2 = Mid(Cells(j, "A"), 1, Len(cellVal))
              val3 = Cells(j, "D")
              Flash.Cells(i, "H").Value = val3
              Exit For
          Else
              Flash.Cells(i, "H").Value = 0
          End If
      Next j

      Flash.Activate

    End If 'Else cell is empty: do nothing
Next i