宏在上个季度停止正常工作

时间:2017-10-24 22:37:30

标签: excel vba excel-vba date

我是论坛的新手,并会尽量让我的问题变得清晰。我使用宏来帮助将每月财务信息组织到一般期刊中。本质上,此宏从其他工作表中获取信息,并将其组织/重新排列为单独的工作表 - 通用日记。它总是将信息添加到我的列表底部,同时忽略我列表中的所有先前信息。现在,整年我的Macro功能完美无缺,直到今年的最后一个季度。出于某种原因,它会被日期搞糊涂,并选择错误的日期范围来组织我的一般日记。它应该只选择10月份的信息,它将从2月到10月选择所有信息。该代码与前几个月完全相同。如果我要将我的日期从十月改为九月,那么宏再次完美地运行,只选择和操纵我的九月信息 - 太棒了!但是为什么它会在10月到12月之间混淆?我的代码中唯一的区别是要选择的日期范围。我确保我的单元格格式正确的日期而不是文本,所以这是非常令人困惑的。任何帮助,将不胜感激!我粘贴了代码中给我带来麻烦的部分。代码引用“B”列中的日期,然后在“F”列中选择具有信息的相应单元格

Sub L()
'Selects Credits and shifts down one cell
Dim nRow9   As Long
Dim nstart9 As Long, nEnd9 As Long
'figure out where date data starts
For nRow9 = 4 To 65536
    If Range("B" & nRow9).Value >= "10/1/2017" Then
        nstart9 = nRow9
        Exit For
    End If
Next nRow9
'figure out where date data ends
For nRow9 = nstart9 To 65536
    If Range("B" & nRow9).Value = "10/31/2017" Then
        nEnd9 = nRow9
        Exit For
    End If
Next nRow9
Range("F" & nstart9 & ":F" & nEnd9).Select
'Dim r9 As Range
'Set r9 = Selection
'Intersect(r9(1).EntireRow, r9).Insert Shift:=xlDown, copyorigin:=xlFormatFromLeftOrAbove
End Sub

1 个答案:

答案 0 :(得分:1)

我强制转换为Date以评估所评估的两个细胞(CDate()

Option Explicit

Public Sub UpdateGeneralJournal()
    'Selects Credits and shifts down one cell
    Dim nRow9   As Long
    Dim nstart9 As Long, nEnd9 As Long

    'figure out where date data starts
    For nRow9 = 4 To 65536
        If CDate(Range("B" & nRow9).Value) >= CDate("10/1/2017") Then
            nstart9 = nRow9
            Exit For
        End If
    Next nRow9

    'figure out where date data ends
    For nRow9 = nstart9 To 65536
        If CDate(Range("B" & nRow9).Value) = CDate("10/31/2017") Then
            nEnd9 = nRow9
            Exit For
        End If
    Next nRow9
    Range("F" & nstart9 & ":F" & nEnd9).Select
    'Dim r9 As Range
    'Set r9 = Selection
    'Intersect(r9(1).EntireRow, r9).Insert Shift:=xlDown, copyorigin:=xlFormatFromLeftOrAbove
End Sub

通过确定col B中的使用范围而不是硬编码最后一个单元格,并根据当前月份开始/结束验证日期,可以使其更具动态性