Database 访问:转到下一条记录创建空记录

Database 访问:转到下一条记录创建空记录,database,database-design,macros,ms-access-2013,Database,Database Design,Macros,Ms Access 2013,我有两个按钮可以循环浏览记录(本例中为员工) 按钮一是上一条记录,它将在所有Emoloye中导航,直到第一个Emoloye。到达第一名员工后,按钮将不起任何作用 但是,对于“下一条记录”按钮,由于某种原因,在转到最后一条可见记录后,再次按下该按钮将转到一条新记录或**空白**记录 不知道如何修复这个bug 非常感谢您的帮助,谢谢 Sub WinLossSplit() Dim ws As Worksheet Application.DisplayAlerts = False Application

我有两个按钮可以循环浏览记录(本例中为员工)

按钮一是上一条记录,它将在所有Emoloye中导航,直到第一个Emoloye。到达第一名员工后,按钮将不起任何作用

但是,对于“下一条记录”按钮,由于某种原因,在转到最后一条可见记录后,再次按下该按钮将转到一条新记录或**空白**记录

不知道如何修复这个bug

非常感谢您的帮助,谢谢

Sub WinLossSplit()
Dim ws As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False

For Each ws In Worksheets
If ws.Name <> "Sheet1" And ws.Name <> "Sheet2" Then
    If Application.WorksheetFunction.CountA(ws.Range("A:A")) > 0 Then
        ws.Range("A:A").TextToColumns Destination:=ws.Range("A:B"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=True, OtherChar _
        :=True, FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
    End If
    End If

Next ws
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox ("done")
End Sub

Sub hello()

Dim a, i As Long, w(), k(), n As Long
Dim dic As Object, ws As Worksheet, s As String
For Each ws In Worksheets
dic.comparemode = vbTextCompare
'With Sheets("Sheet1")
    a = ws.Range("a1:b" & ws.Range("a" & Rows.Count).End(xlUp).Row)
'End With

ReDim w(1 To UBound(a, 1), 1 To 2)
Set dic = CreateObject("scripting.dictionary")
For i = 1 To UBound(a, 1)
    If Not IsEmpty(a(i, 1)) Then
       ' If Not dic.exists(a(i, 1)) Then
        '    n = n + 1
         '   w(n, 1) = a(i, 1): w(n, 2) = a(i, 2)
          '  dic.Add a(i, 1), Array(n, 2)
        'Else
            k = dic.Item(a(i, 1))
            w(k(0), 2) = w(k(0), 2) & "," & a(i, 2)
            dic.Item(a(i, 1)) = k
        'End If
    End If
Next
On Error Resume Next
'Set ws = Sheets("FinalReport")
On Error GoTo 0
If ws Is Nothing Then
'    Set ws = Worksheets.Add: ws.Name = "FinalReport"
End If
With ws.Range("a1")
    '.Resize(, 2).Value = Array("Array", "Datetime period")
    .Resize(, 1).Value = Array("Array", "Datetime period")
    For i = 1 To n
        If Len(w(i, 2)) > 1024 Then
            s = w(i, 2)
            .Offset(i).Value = w(i, 1)
            .Offset(i, 1).Value = s
        Else
            .Offset(i).Value = w(i, 1)
            .Offset(i, 1).Value = w(i, 2)
        End If
    Next
     ' puts in separate columns rather than string with commas
    .Offset(1, 1).Resize(n).TextToColumns _
    Destination:=.Offset(1, 1), DataType:=xlDelimited, Comma:=True
End With
Set dic = Nothing: Erase a

Next ws

End Sub
Sub-winlossplit()
将ws设置为工作表
Application.DisplayAlerts=False
Application.ScreenUpdating=False
对于工作表中的每个ws
如果ws.Name“Sheet1”和ws.Name“Sheet2”,则
如果Application.WorksheetFunction.CountA(ws.Range(“A:A”))>0,则
ws.Range(“A:A”).TextToColumns目标:=ws.Range(“A:B”),数据类型:=xlDelimited_
TextQualifier:=xlDoubleQuote,continuedDelimiter:=False,Tab:=False_
分号:=False,逗号:=True,空格:=False,其他:=True,其他字符_
:=True,FieldInfo:=Array(Array(1,1),Array(2,1)),TrailingMinusNumbers:=True
如果结束
如果结束
下一个ws
Application.DisplayAlerts=True
Application.ScreenUpdating=True
MsgBox(“完成”)
端接头
子hello()
尺寸a,i等于长,w(),k(),n等于长
Dim dic作为对象,ws作为工作表,s作为字符串
对于工作表中的每个ws
dic.comparemode=vbTextCompare
“附页”(“第1页”)
a=ws.Range(“a1:b”和ws.Range(“a”和Rows.Count).End(xlUp.Row)
"以
重播w(1到UBound(a,1),1到2)
设置dic=CreateObject(“scripting.dictionary”)
对于i=1到UBound(a,1)
如果不是空的(a(i,1)),那么
'如果不存在dic.(a(i,1)),则
'n=n+1
w(n,1)=a(i,1):w(n,2)=a(i,2)
'dic.添加一个(i,1),数组(n,2)
”“否则呢
k=dic.项目(a(i,1))
w(k(0),2)=w(k(0),2)和“,”和a(i,2)
dic.项目(a(i,1))=k
"完"
如果结束
下一个
出错时继续下一步
'设置ws=Sheets(“最终报告”)
错误转到0
如果ws什么都不是,那么
'Set ws=Worksheets.Add:ws.Name=“FinalReport”
如果结束
带ws.Range(“a1”)
'.Resize(,2).Value=数组(“数组”,“日期时间段”)
.Resize(,1).Value=数组(“数组”,“日期时间段”)
对于i=1到n
如果Len(w(i,2))>1024,那么
s=w(i,2)
.偏移量(i).值=w(i,1)
.偏移量(i,1)。值=s
其他的
.偏移量(i).值=w(i,1)
.偏移量(i,1).值=w(i,2)
如果结束
下一个
'放在单独的列中,而不是带逗号的字符串中
.Offset(1,1).调整大小(n).文本到列_
目标:=.Offset(1,1),数据类型:=xlDelimited,逗号:=True
以
设置dic=Nothing:擦除一个
下一个ws
端接头

这不是一个bug,它是经过设计的


如果您不喜欢,请将窗体的属性AllowAdditions设置为False。

谢谢,没有VBA还有其他方法吗?例如,在Access中已经使用的宏表达式生成器(编码块)上?我想是的,但不知道。我不做宏,谢谢!只是将宏转换为vba并添加了一行代码-它可以工作。