【问题标题】:resolve type mismatch on date解决日期类型不匹配
【发布时间】:2024-04-23 20:30:02
【问题描述】:

我正在尝试运行下面的代码。在我尝试添加日期参数之前,它运行得非常好。我收到类型不匹配错误。我用 # 和 ' (单引号)尝试过同样的错误。 locals 窗口将两个日期变量显示为我认为正确的变体/字符串。任何帮助,将不胜感激!有些东西很容易弄清楚,有些让我头疼。

Sub Macro2()
'
' Macro2 Macro
'

'
Dim b_date
Dim e_date
b_date = Format(Range("Beg_Date"), "mm/dd/yyyy")
e_date = Format(Range("End_Date"), "mm/dd/yyyy")
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=SQLOLEDB.1;Password=********;Persist Security Info=True;User     ID=SqlLinkServer;Initial Catalog=SPFT;Data Source=001MSDSQL" _
        , _
        "01;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=001MSDSTS02;Use Encryption for Data=False;Tag with column collation when possible=False"), _
        Destination:=Range("$a$7")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("/*AccountTransactions Current Financials Journal**/ select [Journal Entry], [TRX Date], [Account Number], [Acc" _
        , _
        "ount Description], [Debit Amount], [Credit Amount], [Source Document], [User Who Posted] from AccountTransactions where [TRX Date] >= #" & b_date & "# and [TRX  Date] <= #" & e_date & "# and [segment4] = '" & Range("Segment4").Value & "'  and [segment1] = '" & Range("Segment1").Value & "' and [segment2] = '" & Range("Segment2").Value & "' and [segment3] = '" & Range("Segment3").Value & "' and [Histo" _
        , "ry TRX] = 'No' order by [Journal Entry]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Table_ExternalData_13"
        .Refresh BackgroundQuery:=False
    End With
End Sub

【问题讨论】:

  • 目前b_datee_date 都是variant 类型,在这种情况下,您似乎想要string 类型的东西(或轻松转换为string -type 你正在做的插值
  • 如果您尝试使用CStr 将这些变量包装在插值中会怎样?
  • 添加 CStr 仍会导致类型不匹配错误。 @丹瓦格纳
  • 你在哪里定义Beg_DateEnd_Date
  • 它们是引用电子表格中特定单元格的范围名称。

标签: date excel vba


【解决方案1】:

我会试试这个:

"...[TRX Date] >= '" & Format(b_date, "yyyy-mm-dd")  & "'... "

如果上述不正确,请将您的日期格式更改为另一种格式(取决于区域设置)。

【讨论】:

  • 我把它放在有问题的行中,结果相同。它不会像我在变量语句本身中那样做同样的事情吗? @avb
  • 您能在代码执行后发布您的 .CommandText 值吗?
  • +1 好主意@avb——一般来说,也许以分段方式将该字符串组装到其他地方以便更容易排除故障会更容易?
  • @avb 我不确定我知道怎么做。我认为类型不匹配会阻止代码行完全执行,因此它没有任何价值。
  • @Dan Wagner 也许吧。它完美执行,直到我添加日期范围规范,所以我知道日期是问题所在。我正在尝试查询 Great Plains 数据库,我的研究使我相信日期应该作为字符串发送,我认为我正在这样做但无济于事。