在Access VBA中复制记录
我正在尝试构建一个流程,在该流程中,单击EndofDay按钮,然后进入子窗体,查找任何状态10(正在进行),然后在自动完成之前复制这些记录。我遇到的问题是我的在Access VBA中复制记录,vba,ms-access,Vba,Ms Access,我正在尝试构建一个流程,在该流程中,单击EndofDay按钮,然后进入子窗体,查找任何状态10(正在进行),然后在自动完成之前复制这些记录。我遇到的问题是我的 DoCmd.DoMenuItem acFormBar,acEditMenu,8,acMenuVer70DoCmd.DoMenuItem acFormBar,acEditMenu,8,acMenuVer70…命令集正常工作。我收到一条错误消息,说“操作或命令“复制”现在不可用” 主窗体是“frmTasks”,子窗体称为“Tasks”,而“T
DoCmd.DoMenuItem acFormBar,acEditMenu,8,acMenuVer70DoCmd.DoMenuItem acFormBar,acEditMenu,8,acMenuVer70…
命令集正常工作。我收到一条错误消息,说“操作或命令“复制”现在不可用”
主窗体是“frmTasks”,子窗体称为“Tasks”,而“Tasks”使用的表称为“tblTasks”
更新:
我发现,如果我试图在子表单任务中单独运行我的原始代码,代码将在没有“copy is available”(复制不可用)消息的情况下复制。如果我试图从主窗体调用该代码,我得到的副本将再次不可用。我不知道为什么它说函数副本不可用。有什么线索说明原因吗
Private Sub EndofDay_Click()
If Me.Tasks.Form.Status = 10 Then
'Copy In Process Tasks
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70
'Complete Old In process Tasks
Else
MsgBox ("Nothing Done")
'do nothing
End If
End Sub
更新代码:
Private Sub EndofDay_Click()
Dim rstSource As DAO.Recordset
Dim rstInsert As DAO.Recordset
Dim fld As DAO.Field
Dim lngLoop As Long
Dim lngCount As Long
Set rstInsert = Me!Tasks.Form.RecordsetClone
Set rstSource = rstInsert.Clone
With rstSource
lngCount = .RecordCount
For lngLoop = 1 To lngCount
If Nz(!Status.Value, 0) <> 10 Then
' Ignore record.
Else
With rstInsert
.AddNew
For Each fld In rstSource.Fields
With fld
If .Attributes And dbAutoIncrField Then
' Skip Autonumber or GUID field.
ElseIf .Name = "Start Date" Then
' Skip read-only field.
ElseIf .Name = "Date Completed" Then
' Skip read-only field.
ElseIf .Name = "Owner" Then
' Skip read-only field.
ElseIf .Name = "Active" Then
' Skip read-only field.
ElseIf .Name = "Status" Then
' Insert default value.
rstInsert.Fields(.Name).Value = 0
Else
' Copy field content.
rstInsert.Fields(.Name).Value = .Value
End If
End With
Next
.Update
End With
.Edit
!Status.Value = 100
.Update
End If
.MoveNext
Next
rstInsert.Close
.Close
End With
Set rstInsert = Nothing
Set rstSource = Nothing
End Sub
Private Sub EndofDay_Click()
将rstSource设置为DAO.Recordset
Dim rstInsert作为DAO.Recordset
模糊fld为刀场
昏暗的夜总会
暗计数等于长
设置rstInsert=Me!Tasks.Form.RecordsetClone
设置rstSource=rstInsert.Clone
使用rstSource
lngCount=.RecordCount
对于LNGLOP=1到lngCount
如果Nz(!Status.Value,0)10,则
“忽略记录。
其他的
用rstInsert
.AddNew
对于rstSource.Fields中的每个fld
与fld
如果.Attributes和dbAutoIncrField,则
'跳过自动编号或GUID字段。
ElseIf.Name=“开始日期”则
'跳过只读字段。
ElseIf.Name=“完成日期”然后
'跳过只读字段。
ElseIf.Name=“Owner”则
'跳过只读字段。
ElseIf.Name=“活动”则
'跳过只读字段。
ElseIf.Name=“Status”则
'插入默认值。
rstInsert.Fields(.Name).Value=0
其他的
'复制字段内容。
rstInsert.Fields(.Name).Value=.Value
如果结束
以
下一个
.更新
以
编辑
!状态值=100
.更新
如果结束
.下一步
下一个
rstInsert.关闭
.结束
以
设置rstInsert=Nothing
设置rstSource=Nothing
端接头
任何帮助都将不胜感激。在主窗体上的EndOfDay按钮的单击事件中可能会出现以下情况:
Public Sub CopyRecords()
Dim rstSource As DAO.Recordset
Dim rstInsert As DAO.Recordset
Dim fld As DAO.Field
Dim lngLoop As Long
Dim lngCount As Long
Set rstInsert = Me!NameOfSubformControl.Form.RecordsetClone
Set rstSource = rstInsert.Clone
With rstSource
lngCount = .RecordCount
For lngLoop = 1 To lngCount
If Nz(!Status.Value, 0) <> 10 Then
' Ignore record.
Else
With rstInsert
.AddNew
For Each fld In rstSource.Fields
With fld
If .Attributes And dbAutoIncrField Then
' Skip Autonumber or GUID field.
ElseIf .Name = "SomeReadOnlyField" Then
' Skip read-only field.
ElseIf .Name = "Status" Then
' Insert default value.
rstInsert.Fields(.Name).Value = 0
Else
' Copy field content.
rstInsert.Fields(.Name).Value = .Value
End If
End With
Next
.Update
End With
.Edit
!Status.Value = 100
.Update
End If
.MoveNext
Next
rstInsert.Close
.Close
End With
Set rstInsert = Nothing
Set rstSource = Nothing
End Sub
公共子副本记录()
将rstSource设置为DAO.Recordset
Dim rstInsert作为DAO.Recordset
模糊fld为刀场
昏暗的夜总会
暗计数等于长
设置rstInsert=Me!SubformControl.Form.RecordsetClone的名称
设置rstSource=rstInsert.Clone
使用rstSource
lngCount=.RecordCount
对于LNGLOP=1到lngCount
如果Nz(!Status.Value,0)10,则
“忽略记录。
其他的
用rstInsert
.AddNew
对于rstSource.Fields中的每个fld
与fld
如果.Attributes和dbAutoIncrField,则
'跳过自动编号或GUID字段。
ElseIf.Name=“SomeReadOnlyField”然后
'跳过只读字段。
ElseIf.Name=“Status”则
'插入默认值。
rstInsert.Fields(.Name).Value=0
其他的
'复制字段内容。
rstInsert.Fields(.Name).Value=.Value
如果结束
以
下一个
.更新
以
编辑
!状态值=100
.更新
如果结束
.下一步
下一个
rstInsert.关闭
.结束
以
设置rstInsert=Nothing
设置rstSource=Nothing
端接头
在主窗体上的EndOfDay按钮的单击事件中可能类似于此:
Public Sub CopyRecords()
Dim rstSource As DAO.Recordset
Dim rstInsert As DAO.Recordset
Dim fld As DAO.Field
Dim lngLoop As Long
Dim lngCount As Long
Set rstInsert = Me!NameOfSubformControl.Form.RecordsetClone
Set rstSource = rstInsert.Clone
With rstSource
lngCount = .RecordCount
For lngLoop = 1 To lngCount
If Nz(!Status.Value, 0) <> 10 Then
' Ignore record.
Else
With rstInsert
.AddNew
For Each fld In rstSource.Fields
With fld
If .Attributes And dbAutoIncrField Then
' Skip Autonumber or GUID field.
ElseIf .Name = "SomeReadOnlyField" Then
' Skip read-only field.
ElseIf .Name = "Status" Then
' Insert default value.
rstInsert.Fields(.Name).Value = 0
Else
' Copy field content.
rstInsert.Fields(.Name).Value = .Value
End If
End With
Next
.Update
End With
.Edit
!Status.Value = 100
.Update
End If
.MoveNext
Next
rstInsert.Close
.Close
End With
Set rstInsert = Nothing
Set rstSource = Nothing
End Sub
公共子副本记录()
将rstSource设置为DAO.Recordset
Dim rstInsert作为DAO.Recordset
模糊fld为刀场
昏暗的夜总会
暗计数等于长
设置rstInsert=Me!SubformControl.Form.RecordsetClone的名称
设置rstSource=rstInsert.Clone
使用rstSource
lngCount=.RecordCount
对于LNGLOP=1到lngCount
如果Nz(!Status.Value,0)10,则
“忽略记录。
其他的
用rstInsert
.AddNew
对于rstSource.Fields中的每个fld
与fld
如果.Attributes和dbAutoIncrField,则
'跳过自动编号或GUID字段。
ElseIf.Name=“SomeReadOnlyField”然后
'跳过只读字段。
ElseIf.Name=“Status”则
'插入默认值。
rstInsert.Fields(.Name).Value=0
其他的
'复制字段内容。
rstInsert.Fields(.Name).Value=.Value
如果结束
以
下一个
.更新
以
编辑
!状态值=100
.更新
如果结束
.下一步
下一个
rstInsert.关闭
.结束
以
设置rstInsert=Nothing
设置rstSource=Nothing
端接头
请问“自动完成”是什么意思?自动完成只是将状态字段设置为100(或完成)。因此,它将复制状态为10(正在处理中)的所有记录,然后将这些记录状态字段设置为100(已完成),新记录应默认为0(未启动)。这与相同吗?然后至少链接它们。请问“自动完成”是什么意思?自动完成只是将状态字段设置为100(或完成)。因此,它将复制状态为10(正在处理)的所有记录,然后设置这些记录