VBA excel错误将nvarchar值转换为int

时间:2015-10-23 03:23:11

标签: sql vba error-handling int

我创建了一个excel VBA代码来从服务器获取数据。它工作了一年多。然而,不知何故,其中一个标准已经改变了关于"拒绝名称(没有名字)"顾客。在我们过去为他们自动分配客户编号之前,但是根据新的更改,系统不会为这些客户分配任何客户编号客户编号,而是给他们" R / N"码。因此,现在从服务器提取数据时遇到一些问题。我尝试应用我在网上找到的那些"旁路技术,但它们对我不起作用(谈论CAST)。     case WHEN isnumeric([CustId])THEN CAST([CustId] AS int)else 0 end

但它不起作用。我收到此错误:"运行时错误' -2147217913(80040e07) [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]对话失败 将nvarchar值转换为R / N到数据类型int时。 "

我所需要的只是忽视那些" R / N"在客户ID字段中。请看下面我的vba代码。  先感谢您  巴哈

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DBFullName, TableName As String
Dim TargetRange As Range
Dim Conn As ADODB.Connection, intColIndex As Integer
Dim cel As Range
Dim TD As Double
Dim TD2 As Double
Dim qdate As Double
Dim qdate2 As Double
Dim lastrow As Long
Dim custid 'As String+


TD = DateSerial(Year(Now()), Month(Now()), 1)
TD2 = Target.Offset(-4, -2).Value
custid = Range("custid4").Text

Target.Cells(1, 1).Select
Selection.Activate
Set TargetRange = Range("custid4").Offset(2, 0)
Set Conn = New ADODB.Connection

Conn.Open "driver={SQL Server};" & _
"server=XXXX01\RPTDB;database=Reporting_ODS;"

Set RecSet = New Recordset
RecSet.Open "SELECT TOP(1)Baha_PM.Lname +' '+ Baha_PM.Fname FROM Reporting_ODS.TG.Baha_PM Baha_PM " & _
"WHERE Baha_PM.CustId='" & custid & "'", Conn, , , adCmdText
TargetRange.CopyFromRecordset RecSet

RecSet.Close
Set RecSet = Nothing
Conn.Close
' Trip

Set TargetRange = Range("custid4").Offset(14, 0)
Set Conn = New ADODB.Connection

Conn.Open "driver={SQL Server};" & _
"server=XXXX01\RPTDB;database=Reporting_ODS;"
 Set RecSet = New Recordset

RecSet.Open "SELECT MAX(Baha_PM.Trip_Id)  FROM Reporting_ODS.TG.Baha_PM Baha_PM " & _
"WHERE Baha_PM.CustId='" & custid & "'", Conn, , , adCmdText
TargetRange.CopyFromRecordset RecSet


RecSet.Close
Set RecSet = Nothing
Conn.Close
Set Conn = Nothing

End Sub

1 个答案:

答案 0 :(得分:1)

ISNUMERIC是一个SQL Server功能。您需要的是Excel VBA函数来测试custid是否为数字。有一个函数ISNumber。

使用此代码修复字符串值

If Not IsNumber(custid) Then
  Custid = "0"
End If

在从范围文本

中指定custid varible后直接插入此代码
相关问题