首页 > 解决方案 > 更改信用卡编码

问题描述

我有一个邮件合并 VBA 代码:

If GetField(oDS, "mCCNumber") <> "" Then
    sCCNumber = Right(GetField(oDS, "mCCNumber"), Len(GetField(oDS, "mCCNumber")) - 12) 

但是现在我们的 CC #s 只有 4 个没有标记的字符,但有些仍然是 16 个字符。

如何更改此代码以添加“OR”3 个字符(有些是 3,有些是 4)。

另外,我不能对此发表评论以停止这部分

标签: vba

解决方案


首先,GetField(oDS, "mCCNumber")仅在这两行中被取消引用 3 次 - 将其拉入自己的局部变量中:

Dim ccNumberField As Field
Set ccNumberField = GetField(oDS, "mCCNumber")

实际上,我们更感兴趣的是该领域的内容。您的代码正在对该对象进行隐式默认成员调用Field- 但 aField的默认属性是它的Code

字段的代码是由字段字符 ( { }) 括起来的所有内容,包括前导空格和尾随空格字符。

这意味着您正在使用的字符串比您的代码预期的要长。我认为您会Text对该领域的以下内容更感兴趣Result

Dim ccNumberFieldValue As String
ccNumberFiedValue = ccNumberField.Result.Text

If ccNumberFieldValue <> "" Then

   '...

现在,ccNumberFieldValue应该保存该字段的实际内容。我不是 100% 清楚 OP 到底包含什么。所以我将假设其中之一:

  • 最后 4 位数字:**** **** **** 1234
  • 最后 3 位数字:**** **** **** *234
  • Woopsie,所有 16 位数字:1234 1234 1234 1234

所以首先要做的是抢最后4个;Right$这样做:

sCCNumber = Right$(ccNumberFiedValue, 4)

这给我们留下了:

  • 1234
  • *234

从那里您可以IsNumeric用来确定整个子字符串是否为数字(假设有一个非数字填充字符) - 如果不是,那么您知道您正在查看 3 个字符的变体:

If Not IsNumeric(sCCNumber) Then sCCNumber = Right$(sCCNumber, 3)

推荐阅读