Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 对于每个循环和偏移_Vba_Excel_If Statement_Foreach - Fatal编程技术网

Vba 对于每个循环和偏移

Vba 对于每个循环和偏移,vba,excel,if-statement,foreach,Vba,Excel,If Statement,Foreach,我正在用VBA开发一个代码,在一个工作表中搜索一个范围以查找字符串的任务中遇到了问题;然后将该字符串记录在同一行中,但只留下一列,因此对于所有出现的情况,偏移量为-1;然后,它在另一个工作表中搜索每个记录的字符串,并对列右侧记录的字符串对应的整数求和 Option Explicit Option Base 1 Public Sub StoredProcTimes() Worksheets("Proc Time").Select Dim Table() As Variant, n

我正在用VBA开发一个代码,在一个工作表中搜索一个范围以查找字符串的任务中遇到了问题;然后将该字符串记录在同一行中,但只留下一列,因此对于所有出现的情况,偏移量为-1;然后,它在另一个工作表中搜索每个记录的字符串,并对列右侧记录的字符串对应的整数求和

Option Explicit
Option Base 1

Public Sub StoredProcTimes()
    Worksheets("Proc Time").Select
    Dim Table() As Variant, nItem As Integer
    Range("A2", Range("A2").End(xlDown).End(xlToRight)).Name = "ProcTime"
    nItem = Range("ProcTime").Rows.Count
    ReDim Table(nItem, 2)
End Sub

Public Sub DayLoad()
    Range("G2", Range("G1").End(xlDown)).Name = "Dates"
    Call StoredProcTimes
    Dim reply As Date, cell As Range, sum As Integer
    reply = InputBox("Specify Date", "Day Load", "9/1/2017")
    For Each cell In Range("Dates")
        If cell.Value = reply Then
            cell.Offset(0, -1).Value

        End If
    Next
    MsgBox "The load for " & reply & " is " & sum & " minutes"
End Sub
首先,您的line cell.Offset0,-1.Value没有任何作用。您没有将其设置为等于一个值。您应该在这里收到一个错误

我个人不喜欢使用偏移量,但使用它并不一定有什么大不了的。在我的示例中,我向您展示了一种我认为有利的替代方法

对于您要查找的特定单元格,不要在范围内循环,这需要处理器时间。使用Range.Find


请在问题中包含您的代码。寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:这听起来像是可以用SUMIFS或SUMPRODCT函数完成的,这必须是VBA吗?现在,请解释错误的性质以及在哪一行得到错误。感谢您提供有关cell.offset的建议,现在我有了所需的值,我对如何在另一个工作表中搜索它们感到困惑。谢谢您的反馈;复制完单元格剩余的值后,是否将其存储为变量,并在另一张表中搜索该值?@WillParker它已存储为变量sReply。如果您还需要搜索其他工作表,可以使用该选项。sReply不是对输入框的响应,即日期吗?sReply=InputBoxSpecify Date,Day Load,9/1/2017在最后一行中使用未声明的变量reply and sum。@这是对输入框的响应,也是您询问的值。如果值的变量已经存在,为什么还要创建另一个变量?仅仅因为您只使用了一次变量,并不妨碍您再次使用它谢谢你,费尔南多。
Public Sub DayLoad()

    Dim ws As Worksheet, rngG As Range

    ' You may need to change the index, or use "SheetName"
    Set ws = ThisWorkbook.Worksheets(1)
    Set rngG = ws.UsedRange.Columns("G")

    'Call keyword is unnecessary 
    Call StoredProcTimes

    Dim sReply As String, myCell As Range
    sReply = InputBox("Specify Date", "Day Load", "9/1/2017")
    If Not IsDate(sReply) Then Exit Sub

    ' Search for your date
    Set myCell = rngG.Find(sReply)

    ' If date was found, then copy the date to the left 1 col
    If Not myCell Is Nothing Then
        With myCell
            ws.Cells(.Row, .Column - 1) = .Value
        End With
    End If

End Sub