【问题标题】:Form in Access VBA using Function to set Field from the Network IDAccess VBA中的表单使用函数从网络ID设置字段
【发布时间】:2020-07-12 18:36:42
【问题描述】:

我一直在修改下面的代码。一直试图弄清楚如何让它基于 Owner 字段设置用户 ID,该字段基于获取人员网络 ID 的函数。这样就搞定了

我一直遇到的问题是我在 If 语句行上不断收到类型不匹配错误。我还应该提到这是作为表单中的复选框完成的。

代码如下:

Private Sub OkButton_Click()
Dim c As MSForms.Control
Dim StrSQL As String

For Each c In Me.Controls
   If TypeOf c Is MSForms.CheckBox Then
    If c Then
     Select Case c.Name
        Case "CheckBox1"
            'Monday
            Hide
            CurrentDb.Execute ("INSERT INTO tblTasks ([Task Name], [Task Description], [Company], [Priority], [Status], [DueDate], [Need Help], [DateCreated], [Owner]) VALUES ('Change Notice', 'Daily Task', '(4) Ginny''s', '(1) Hot!', '0', DateAdd('d',(8-Weekday(Date(),2)) mod 7,Date()), 'No', Date(), '" & Getowner() & "')")
            GetUser
    Case Else
        End Select
       End If
      End If
    Next c
End Sub

Function GetOwner()
  GetOwner = Environ("USERNAME")   
End Function

Function GetUser()
Dim StrSQL As String
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset

Set rs1 = CurrentDb.OpenRecordset("tblTasks")
Set rs2 = CurrentDb.OpenRecordset("tblTasks")

rs2.MoveLast
With rs2
  If Environ("USERNAME") = "12345" Then
    .Edit
    ![User ID] = "Name"
    .Update
  End If
End With

rs1.Close 'Close the recordset
Set rs1 = Nothing 'Clean up
rs2.Close 'Close the recordset
Set rs2 = Nothing 'Clean up

Forms![frmTasks].Form.Requery
Forms![frmTasks].Form.Refresh
End Function

任何帮助或推动正确的方向将不胜感激!

【问题讨论】:

  • 我已经更新了代码,现在它正在识别用户,但在[User ID] = "Name" 线上出现需要对象的错误我尝试使用"Forms.Tasks.[User ID]" 添加对象,但它无法识别即使它在那里。

标签: vba ms-access


【解决方案1】:

有一个老错误,您不能只期望复选框的值(其默认属性)表现为布尔值。

那就试试吧:

    If c.Value = True Then

另外,你在这里错过了一句话:

CurrentDb.Execute ("INSERT INTO tblTasks ([Task Name], [Task Description], [Company], [Priority], [Status], [DueDate], [User ID], [Need Help], [DateCreated], [Owner]) VALUES ('Change Notice', 'Daily Task', '(4) Ginny''s', '(1) Hot!', '0', DateAdd('d',(8-Weekday(Date(),2)) mod 7, Date()), " & GetUser() & ", 'No', Date(), '" & GetOwner() & "')")

【讨论】:

  • 嘿,感谢您的提示和收获!仍然在同一行上出现类型不匹配。我想知道是否是因为所有者字段是字符串而用户 ID 字段不是?但我不确定它为什么会关心,因为我没有让它在用户 ID 字段中输入字符串。对此有什么想法吗?
  • 如果 [User ID] 是数字,请删除引号(请参阅编辑后的答案)。此外,如果 [Need Help] 是布尔值,请将 'No' 替换为 False
  • 用户 ID 是文本,所有者是字符串,我没有将布尔值用于需要帮助,它只是一个是/否选择框。我想我可以改变它,但现在这似乎是一件小事。
  • 我越来越近了。不再收到类型不匹配错误,它正在创建记录,但仍未填写用户 ID 字段。它现在是空白的。
  • 那么,我猜,GetUserId 什么也不返回。
【解决方案2】:

解决了这个问题。必须使用记录集才能使其工作。

Private Sub OkButton_Click()
Dim c As MSForms.Control
Dim StrSQL As String

For Each c In Me.Controls
   If TypeOf c Is MSForms.CheckBox Then
    If c Then
     Select Case c.Name
        Case "CheckBox1"
            'Monday
            Hide
            CurrentDb.Execute ("INSERT INTO tblTasks ([Task Name], [Task Description], [Company], [Priority], [Status], [DueDate], [Need Help], [DateCreated], [Owner]) VALUES ('Change Notice', 'Daily Task', '(4) Ginny''s', '(1) Hot!', '0', DateAdd('d',(8-Weekday(Date(),2)) mod 7,Date()), 'No', Date(), '" & Getowner() & "')")
            GetUser
    Case Else
        End Select
       End If
      End If
    Next c
End Sub

Function GetOwner()
  GetOwner = Environ("USERNAME")   
End Function

Function GetUser()
Dim StrSQL As String
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset

Set rs1 = CurrentDb.OpenRecordset("tblTasks")
Set rs2 = CurrentDb.OpenRecordset("tblTasks")

rs2.MoveLast
With rs2
  If Environ("USERNAME") = "12345" Then
    .Edit
    ![User ID] = "Name"
    .Update
  End If
End With

rs1.Close 'Close the recordset
Set rs1 = Nothing 'Clean up
rs2.Close 'Close the recordset
Set rs2 = Nothing 'Clean up

Forms![frmTasks].Form.Requery
Forms![frmTasks].Form.Refresh
End Function

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多