在Excel VBA中有条件地设置脚本字典值

时间:2018-12-28 11:20:35

标签: excel-vba

我有一个Master.xlsx。我有两个变量开始结束-定义了我应该在字典中存储的日期范围。

我也有单独的工作表中的假期列表,我正尝试从字典中删除该列表。

    Set hld = Sheet2.Range("A2:A7")
    ....
    ....
    Dim WDdict As New Scripting.dictionary
    For n = startd To endd:  WDdict(n) = 1:  Next
    For Each hd In hld
        If hd > 0 Then hd = DateValue(hd): If WDdict.Exists(hd) Then WDdict.Remove (hd)
    Next

“基础”是工作表之一的名称。此“基础”工作表有两个关键列-电子邮件和加入日期(DOJ)

    EmlsrcA = Application.Transpose(src.Sheets("Base").Range("A2:A" & rowsn))
    DojsrcA = Application.Transpose(src.Sheets("Base").Range("G2:G" & rowsn))

我想做什么

如果每行的DOJ值晚于/迟于startd(输入参数),那么我想从字典中删除startd和DOJ之间的每个日期。

所以,我尝试了类似的事情

For Each emls In EmlsrcA 'each line in email in base page

    Dim WDdictrs As New Scripting.dictionary
    For Each elm In WDdict: WDdictrs(elm) = 1: Next

    remove dates before doj
    dj = 0
    If DojsrcA(dj) > startd Then
        dj = dj + 1
        For n = startd To DojsrcA(dj):
            If WDdictrs.Exists(n) Then WDdictrs.Remove (n) Else WDdictrs(n) = 1
        Next
    End If

在“如果DojsrcA(dj)> Startd Then”上引发下标超出范围错误。我在做什么错了?

1 个答案:

答案 0 :(得分:1)

DojsrcA是Range对象中基于Variants的基数为1的二维数组。 您的变量dj = 0,所以超出范围以1开始。