Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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循环仅在调试模式下运行_Vba_Excel - Fatal编程技术网

Excel VBA For循环仅在调试模式下运行

Excel VBA For循环仅在调试模式下运行,vba,excel,Vba,Excel,我试图弄明白为什么下面的代码只在调试模式下工作 当我按下“保存”按钮时,宏会保存每个数据条目,即使它是相同的公司名称。当我调试宏时,宏进入for循环,并给出消息“公司已经存在” 我的错误在哪里 Sub Copy_Values() Dim sapcolleague As String, str1 As String, str2 As String, str3 As String Dim i As Integer, ValueToFind As String, ValueToCheck As S

我试图弄明白为什么下面的代码只在调试模式下工作

当我按下“保存”按钮时,宏会保存每个数据条目,即使它是相同的公司名称。当我调试宏时,宏进入for循环,并给出消息“公司已经存在”

我的错误在哪里

Sub Copy_Values()

Dim sapcolleague As String, str1 As String, str2 As String, str3 As String

Dim i As Integer, ValueToFind As String, ValueToCheck As String
Dim totalAccRows As Integer
Dim accColumn As Integer
Dim currentAccRow As Integer

accColumn = 2
totalAccRows = Worksheets("DB").Cells(Rows.Count, accColumn).End(xlUp).Row
ValueToFind = Worksheets("Maintain").Range("F13").Value

For currentAccRow = 2 To totalAccRows
    If Cells(currentAccRow, accColumn).Value = ValueToFind Then
        MsgBox ("Company already exists!")
        Exit Sub
    End If

Next


Worksheets("DB").Range("A8").EntireRow.Insert

Worksheets("DB").Range("A8").Value = 
Worksheets("Maintain").Range("F11").Value
Worksheets("DB").Range("B8").Value = 
Worksheets("Maintain").Range("F13").Value
Worksheets("DB").Range("C8").Value = 
Worksheets("Maintain").Range("F15").Value

str1 = Worksheets("Maintain").Range("F18").Value
str2 = Worksheets("Maintain").Range("F19").Value
str3 = Worksheets("Maintain").Range("F20").Value

sapcolleague = str1 & " " & str2 & " " & str3

Worksheets("DB").Range("D8").Value = sapcolleague

' This MsgBox will only show if the loop completes with no success
MsgBox "Successfully saved!"


End Sub
If Cells(currentAccRow,accColumn)中,Value=ValueToFind Then
单元格没有父工作表,因此在运行时它将成为活动工作表

快速重写:

Option Explicit

Sub Copy_Values()

    Dim sapcolleague As String, valueToFind As String, accColumn As Long

    With Worksheets("DB")

        accColumn = 2
        valueToFind = Worksheets("Maintain").Range("F13").Value

        If Not IsError(Application.Match(valueToFind, .Columns(accColumn), 0)) Then
                MsgBox ("Company already exists!")
                Exit Sub
        End If


        .Range("A8").EntireRow.Insert

        .Range("A8:C8").Value = Array(Worksheets("Maintain").Range("F11").Value, _
                                      valueToFind, _
                                      Worksheets("Maintain").Range("F15").Value)

        sapcolleague = Join(Array(Worksheets("Maintain").Range("F18").Value, _
                                  Worksheets("Maintain").Range("F19").Value, _
                                  Worksheets("Maintain").Range("F20").Value), Chr(32))

        .Range("D8").Value = sapcolleague
    End With

    'Shouldn't it be saved somewhere around here?

    ' This MsgBox will only show if the loop completes with no success
    MsgBox "Successfully saved!"

End Sub

保存与此宏之间有什么联系?
如果单元格(currentAccRow,accColumn)。Value=ValueToFind,则此处的单元格将指哪张工作表恰好是活动工作表。最好使用工作表对象限定范围/单元格的每次使用。调试时,可能会选择不同的工作表。使用
如果工作表(“DB”).Cells(currentAccRow,accColumn).Value=ValueToFind Then
很棒的提示!我没有确保参考正确的工作表。你的建议奏效了!谢谢!“保存”可能是指从“维护”表中复制信息并将其“保存”到“数据库”表中。