我一直有一些问题从VBA中的宏获取我想要的数据 . 我对VBA很新,所以我可能会错过一些更容易的选项但是对于我的生活我找不到它 .
所以我需要做的是以下内容:
如果日期值小于60,则拉出单元格的值 . 我使用今天的日期 - 一年并将其设置为变量LDate . 将LDate与单元格值进行比较(这些单元格将始终为日期,因此我认为我不需要检查它们是否为日期) . 如果单元格值<= 60,那么我需要从行中的4个单元格中提取信息 . 这些单元格值中的每一个都分配给一个公共变量,然后用于稍后向适当的人发送电子邮件 . 在其他3列上重复此过程以获取每列中所需单元格的单元格值,然后对这4个值中的每一个使用datediff并检查其中哪些(如果有)小于60并根据以下内容构建电子邮件需要发送什么信息 .
这是我正在检查值以发送正确的电子邮件:
If ExampleHold_diff <= 60 And ExampleHold1_diff <= 60 And ExampleHold2_diff <= 60 And ExampleHold3 <= 60 Then
Mail_Result = "Letter 1: " & ExampleHold_diff & vbNewLine & "Letter 2: " & ExampleHold1_diff & vbNewLine & "Letter 3: " & ExampleHold2_diff & vbNewLine & "Letter 4: " & ExampleHold3_diff
使用相同的选项减去其中一个示例值将重复上述检查,直到所有选项都用完为止 .
无论如何,我已经成功地让宏改变所有背景颜色取决于datediff(告诉我它正在处理所有内容),但是当报告每个单元格值时,它只报告最后一个单元格 . 范围 . 我知道它只是处理范围内的每个单元格,这就是为什么我只获取最后一个单元格值,我只是不明白如何在覆盖之前获取我需要的值 .
For Each Cell in Example_rng 'This same loop is used 3 other times with the only difference being the variables
ExampleStart = Cell.Value
If DateDiff("d", LDate, ExampleStart) <= 60 Then
ExampleHold = Cell.Value 'This is the most important value that I need to retrieve. It determines the content of my email.
PriExInf = Range("A" & ActiveCell.Row)
AltExInf = Range("B" & ActiveCell.Row)
ExNum = Range("C" & ActiveCell.Row)
Cell.Interior.Color = RGB(255, 200, 205)
ElseIf DateDiff("d", LDate, ExampleStart) > 60 And DateDiff("d", LDate, ExampleStart) < 180 Then
Cell.Interior.Color = RGB(253, 251, 194)
ElseIf DateDiff("d", LDate, ExampleStart) >= 180 Then
Cell.Interior.Color = RGB(198, 250, 194)
End If
Next Cell
我想我需要做一个For Each循环并将其他For Each循环嵌套在里面?或者也许是Do While循环?我已经尝试了这两个以及使用数组来保存所有的单元格值,然后引用它,我认为可以工作,但我没有太多运气调用数组中的数据,这可能只是我缺乏这方面的经验 .
这是我的范围(这些将永远不会改变,但范围内的数据将每周或每两周更改):
Dim Example_rng As Range
Set Example_rng = Worksheets("sheet1").Range("D2:D87")
Dim Example1_rng As Range
Set Example1_rng = Worksheets("sheet1").Range("E2:E87")
Dim Example2_rng As Range
Set Example2_rng = Worksheets("sheet1").Range("F2:F87")
Dim Example3_rng As Range
Set Example3_rng = Worksheets("sheet1").Range("G2:G87")
任何帮助和/或提示将不胜感激 . 让我知道我需要提供哪些信息,以帮助您制定最佳答案 .
1 回答
将所有“ActiveCell”引用更改为“Cell”:
这,因为“ActiveCell”引用工作表中当前“活动”的单元格,并且在任何“选择”语句之后发生更改
当您使用“Cell”作为循环变量循环遍历某个范围时,那么这是您需要使用的参考