我在访问模块中使用了一些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
任何人都知道这不符合我的预期吗?
感谢您的时间。
答案 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)
我可以将您的要求描述如下:
所以你的代码看起来像:
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
说明:
答案 2 :(得分:0)
正如其他人所提到的,sectionid被初始化为零长度字符串&#34;&#34;并保持这种方式。您需要修改函数GetRunCount以包含sectionid的参数
函数GetRunCount(Left_Img,sectionid)
删除函数GetRunCount
中的sectionid声明并在调用过程中,传递sectionid和Left_Img