【问题标题】:VBA code Adding a cell contains date and a cell contains a number, getting mismatch errorVBA代码添加一个包含日期的单元格和一个包含数字的单元格,出现不匹配错误
【发布时间】:2018-06-29 19:22:36
【问题描述】:

您好,我正在尝试一起添加单元格并将它们与另一个单元格进行比较,但我得到类型不匹配。 第一个单元格是日期,添加的单元格是数字“如天数”,第三个被比较的单元格也是日期。 但我得到类型不匹配。 我的代码在下面

Sub Macro1()
Macro1 Macro

    Dim wks As Worksheet
    Set wks = ActiveSheet

    Dim x As Integer
    Dim p As Integer

    Dim rowRange As Range
    Dim colRange As Range

    Dim LastCol As Long
    Dim LastRow As Long
    LastRow = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row

    Set rowRange = wks.Range("A1:A" & LastRow)

    For i = 7 To 189
        p = 0
        For q = 8 To LastRow
            If [aq] = [si] Then
                If [cq] + [ui] >= [xi] Then
                    [oq] = 1
                Else
                    p = p + [dq]
                    [qq] = 0
                End If
             End If
         Next q     
     Next i   
End Sub 

[cq] 是一个包含日期的单元格

[ui] 是一个包含数字的单元格

[xi] 是一个包含日期的单元格

【问题讨论】:

  • 你在哪里声明/定义cquixi
  • @BruceWayne - 我的水晶球告诉我它们被命名为范围,但我需要把它拿到商店进行模糊测试。
  • 您确定这些单元格包含日期而不是看起来像日期的文本字符串吗?
  • 你是说[aq] = [si] 相当于cells(q, "A") = cells(i, "S") 吗?
  • 是的,我是 VBA 的新手,并且通过 [cq] 擅长宏,我的意思是 Cell Cq 等等

标签: vba excel type-mismatch


【解决方案1】:

试试cells(q, "A") = cells(i, "S")

    For i = 7 To 189
    p = 0
    For q = 8 To LastRow
         'If [aq] = [si] Then
         If cells(q, "A") = cells(i, "S") Then
            'If [cq] + [ui] >= [xi] Then
            If cells(q, "C") + cells(i, "U") >= cells(i, "X") Then
                '[oq] = 1
                cells(q, "O") = 1
            Else
                'p = p + [dq]
                p = p + cells(q, "D")
                '[qq] = 0
                cells(q, "Q") = 0
            End If
         End If
         Next q

      Next i   

【讨论】:

    【解决方案2】:

    您需要使用“添加日期”功能。此处说明:https://www.techonthenet.com/excel/formulas/dateadd.php

    例子:

    Sub add_dates()
    
    
        Dim dateOne As Date
        Dim dateTwo As Date
        Dim lngDays As Long
    
    
        dateOne = "1/1/2018"
        lngDays = 2
        dateTwo = "1/3/2018"
    
        Dim result As Boolean
        If DateAdd("d", lngDays, dateOne) >= dateTwo Then
            MsgBox ("Greater than or equal to")
        Else
            MsgBox ("Less than")
        End If
    
    
    End Sub
    

    【讨论】:

    • 最终与"d" 无关,因为日期是自12/31/1899 以来的天数,因此使用旧顺序将43101 天数添加到1/2/1900 与添加相同2 天到 1/1/2018 如果它是任何其他时间尺度,这将很重要。您不想将 43101 月份添加到 1/2/1900
    • @ScottCraner,啊,这是有道理的。感谢您的信息!
    • @ScottCraner 问题是 d 是特定单元格中的整数值,例如单元格 Ui,其中 i 是变量
    • @ShahinTaghikhani 不是我的答案
    猜你喜欢
    • 2018-08-08
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2016-11-30
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多