VBA代码未返回预期结果

时间:2014-10-29 20:34:31

标签: vba ms-access access-vba


我在访问模块中使用了一些VBA。我的数据看起来像,
SectionID ------ Left_Img
---------------------------------
--- 19 -------------- 394
--- 26 -------------- 781
--- 83 -------------- 842
--- 83 -------------- 450
--- 83 -------------- 453
--- 83 -------------- 456
--104 -------------- 621
--104 -------------- 622

我需要为这些数字生成一个样本编号。数据应该如下所示,

SectionID ------ Left_Img ----- 示例 -
--------------------------------------------------
--- 19 -------------- 394 ----------------- 1
--- 26 -------------- 781 ----------------- 1
--- 83 -------------- 842 ----------------- 1
--- 83 -------------- 450 ----------------- 2
--- 83 -------------- 453 ----------------- 3
--- 83 -------------- 456 ----------------- 4
--104 -------------- 621 ----------------- 1个
--104 -------------- 622 ----------------- 2

我写了一些vba,但它返回了以下结果,
SectionID ------ Left_Img ----- 示例 -
--------------------------------------------------
--- 19 -------------- 394 ----------------- 1
--- 26 -------------- 781 ----------------- 2
--- 83 -------------- 842 ----------------- 3
--- 83 -------------- 450 ----------------- 4
--- 83 -------------- 453 ----------------- 5
--- 83 -------------- 456 ----------------- 6
--104 -------------- 621 ----------------- 7
--104 -------------- 622 ----------------- 8

这是我写的VBA。我应该提到这是我第一次使用VB,所以在回复时说话要慢,

Option Compare Database
Option Explicit

Public wIMG As String
Public wSEC As String
Public wRuningCount As Long

Function GetRunCount(Left_Img) As Long
    Dim sectionid As String

    If wSEC = sectionid And wIMG = Left_Img Then
       wRuningCount = wRuningCount
       wSEC = sectionid
       wIMG = Left_Img
    Else<b>
        If wSEC = sectionid And wIMG <> Left_Img Then
            wSEC = sectionid
            wIMG = Left_Img
            wRuningCount = wRuningCount + 1
        Else
            If wSEC <> sectionid Then
                wSEC = sectionid
                wIMG = Left_Img
                wRuningCount = 1
            End If
        End If
    End If

    GetRunCount = wRuningCount
End Function

任何人都知道这不符合我的预期吗?

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

你有两个问题:

1。您的sectionid变量是本地变量,并且您没有为其分配值。因此它总是一个空白的字符串。

因此,它应该落入最新的if:If wSEC <> sectionid Then,但是根据您的结果,您的wRuningCount计数器每次都会递增,这意味着它会输入第二个:If wSEC = sectionid And wIMG <> Left_Img Then < br />

结论是第二个问题:
2。当您第一次输入您的函数时,您的全局wSEC变量也是一个空字符串。并且它始终保持空白,因为您每次都为其分配一个空白:wSEC = sectionid

很难给出一个没有完整图片的代码,即:如何为全局变量赋值或初始化?

答案 1 :(得分:0)

我可以将您的要求描述如下:

  • 如果我有一个新的SectionID,那么从Sample#1开始
  • 如果我在同一部分中有不同的Left_Img,则将Sample增加1

所以你的代码看起来像:

Option Compare Database
Option Explicit

Private lastSection  As String
Private lastLeft_Img As String
Private RunningCount As Long

Public Sub Reset
  lastSection = vbNullString
  lastLeft_Img = vbNullString
  RunningCount = 0 
End Sub

Public Function GetRunCount(ByVal SectionID as String, ByVal Left_Img As String) As Long
  If SectionID <> lastSection Then
    RunningCount = 1
    lastLeft_Img = Left_Img
  Elseif Left_Img <> lastLeft_Img Then
    RunningCount = RunningCount + 1
    lastLeft_Img = Left_Img
  Else
    ' We have a duplicate Entry ??
  End If
  GetRunCount = RuningCount
End Function

说明:

  • 不要制作变量&#39; Public&#39;
  • 声明函数参数的类型
  • 声明您的功能参数&#39; ByVal&#39;除非您明确要更改此参数的值
  • 始终如一地命名

答案 2 :(得分:0)

正如其他人所提到的,sectionid被初始化为零长度字符串&#34;&#34;并保持这种方式。您需要修改函数GetRunCount以包含sectionid的参数

函数GetRunCount(Left_Img,sectionid)

删除函数GetRunCount

中的sectionid声明

并在调用过程中,传递sectionid和Left_Img