【问题标题】:Date duplicates: Adding a counter for a specific row on today's date (VBA/Qlik Sense)日期重复:为今天日期的特定行添加计数器 (VBA/Qlik Sense)
【发布时间】:2017-11-26 23:15:38
【问题描述】:

我最近编写了一段相当简单的 VBA 代码,这样我就可以长期跟踪我每天的穿着情况。为此,我制作了一个连接到命令按钮的宏,它如下所示:

    Private Sub WearingToday_Click()

      Dim NextCol As Long
      NextCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1
      Cells(1, NextCol).Value = Date
      Cells(ActiveCell.Row, NextCol).Value = "1"

    End Sub

代码只是在下一个可用列中添加今天的日期,在我选择的行上添加数字“1”。

不过,我的问题是,如果我每天多次激活宏,那么第二次激活的日期序列号最后会多出 1,给我一个对应于 3000 年左右的日期。说得更清楚一点:我在 11 月 20 日穿了两件东西,它给出了两个相邻的列具有相同的日期;但只有这些日期的第一列显示了正确的序列号。

我可能会提到我正在将数据导入 Qlik Sense,稍后我将在其中进行一些可视化。在将数据存储为 QVD 文件并从 QViewer 中查看时,我会看到日期序列号。

有趣的是,两个序列号的字符串表示(在 Excel 电子表格中)都是正确的。因此,我不确定问题是否确实只是从 .xlsm 转换到 .qvd 的结果,还是从一开始就存在。

我希望我已经清楚我的问题,并且有人能够帮助我解决这个问题,或者至少让我了解我未来的可能性。

提前致谢。

【问题讨论】:

    标签: vba excel date qliksense


    【解决方案1】:

    以下代码将检查最后一列标题是否已经是今天的日期,如果是,则更新同一列:

    Private Sub WearingToday_Click()
    
        Dim LastCol As Long
        LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
        If Cells(1, LastCol).Value2 < Date Then
            LastCol = LastCol + 1
            Cells(1, LastCol).Value = Date
        End If
        Cells(ActiveCell.Row, LastCol).Value = 1
    
    End Sub
    

    我怀疑您对 Qlik Sense 的导出会因为两列具有相同的标题(即日期)而混淆,它可能只是将“1”附加到第二个标题以使每个标题唯一。但我从未听说过或见过 Qlik Sense,所以我不能确定。如果这在 Qlik Sense 中出现奇怪行为的原因,那么确保您没有重复的标题应该会让您的问题消失。

    【讨论】:

    • 感谢您的回答。正如您所说,我相信 QS 由于标题不是唯一的而感到困惑。该代码也可以工作,所以现在每个标题都是一个唯一的日期,并且该日期下方的许多行现在可以得到一个计数。但是,代码是否也像以前一样工作?我的意思是,如果 LastCol 与今天的日期不同,它会将今天的日期添加到相邻的标题中吗?我是VBA的新手,这就是为什么我不完全确定。再次感谢。
    • @DrilonPollozhani 是的,If Cells(1, LastCol).Value2 &lt; Date Then 测试最后一列中的日期是否小于今天的日期,如果是,If 块中的位将今天的日期添加为新日期列。
    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 2020-11-08
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2019-07-10
    相关资源
    最近更新 更多