【问题标题】:Verify employee name验证员工姓名
【发布时间】:2021-10-18 22:11:57
【问题描述】:

我最近开始使用 Power Automate Desktop,并希望在我工作的公司中应用它。特别是我们用于创建支持票证的系统(代表员工)。

我已经从 AD 中删除了我们应该帮助的所有员工的“DisplayNames”。

但是,如果在网站前端输入拼写错误的姓名,票务系统将创建一个名为 MY 的票证。任何可能使用我正在编写的流程的同事也是如此……他们将被误认为是票务报告者。

Power Automate 流程循环遍历员工姓名列中的项目,打开网页,填写相关文本字段(例如主题、问题描述等),然后提交工单。通常受影响的员工会这样做,但有时我们必须在大型项目中进行数据输入(以便项目可以在团队之间平均分配)。

我想在提交任何工单之前检查员工姓名是否全部有效(同时仍保存在 Excel 中)。

这是我到目前为止所做的……一个宏。

Sub checkCells()

Dim myRange As Range
Dim myCell As Range
Set myRange = Range("A2:A1000")

For Each myCell In myRange

If myCell Like "Mr Jones" Then
myCell.Interior.Color = RGB(0, 128, 0)
End If


If myCell Like "Mr Murphy" Then
myCell.Interior.Color = RGB(0, 128, 0)
End If

If myCell Like "Mr T" Then
myCell.Interior.Color = RGB(0, 128, 0)
End If


Next myCell

End Sub

这可行,但扩展性不是很好。有1000多名员工。即使是此处列出的 3 个示例,也涉及在另一个工作表上编写“连接”函数。凌乱。

谁能帮我写一段更简单的代码?

如果有一种方法可以用红色标记任何不正确的名称,那就太好了。

谢谢!

问候,

威廉

【问题讨论】:

  • 如何提交支持票?表单?如果是这样,您不能对照 Excel 表格或某些 AD 交叉检查提交,然后获得提交后如何处理下一步的条件吗? VBA 似乎不是 PowerApps 的正确方法,但也许我遗漏了一些东西。
  • 是的,它是一个基于网络的表单。 VBA 仅用于确保“用户”列的每一行中的名称确实正确。 Power Automate 处理实际的数据输入。
  • 我应该添加的其他内容是 XL 文件在 Power Automate 执行其操作时通常是关闭的。否则,VBA 在票证提交中不起作用。该问题的目的是查看在执行 Power Automate Desktop 流程之前如何确保每个用户的数据是“干净的”。
  • 是的,我明白了。该文件可以保持关闭状态,您可以将表单条目附加到表中,该表使用基本匹配公式检查它是否是有效条目。然后,您可以使用 PowerApps 评估新行中的相应列(具有匹配功能)。我可以在今晚晚些时候详细说明答案。 Powerapps 有点难以解释,因为它不是干净的代码。

标签: excel automation power-automate


【解决方案1】:

我认为我可能找到了一个暂时可以使用的解决方案...

显然需要更多用户来扩展它,但在这种特殊情况下,使用 CONCATENATE 函数并不是什么大问题。

不过,最重要的是让范围停止在 A 列中的姓氏条目所在的位置。它无限延伸(看起来像)可能会让用户望而却步。

谢谢。

Sub checkUserNamesForTicket()

Dim myRange As Range
Dim myCell As Range
Set myRange = Range("A2:A1000")
For Each myCell In myRange
If myCell Like "Mr Jones" Or _
myCell Like "Mr Smith" Or _
myCell Like "Mr Murphy" Then

myCell.Interior.Color = RGB(0, 128, 0)

Else: myCell.Interior.Color = RGB(128, 128, 0)


End If
Next myCell

End Sub

【讨论】:

  • 已找到当员工姓名显示为无效时更改单元格颜色的代码。感谢大家的帮助。
【解决方案2】:

我自己对 PowerApps 还有些陌生,所以我花了一些时间来解决这个问题。有几种方法可以处理此问题,但以下是两个利用连接到 Excel 而不是 VBA 的 PowerApps 的选项。您必须使用Excel Tables,但这比使用 VBA 容易得多。

首先,您必须有一个由捕获输入的表单提交触发的流程。我构建了a sample form here(请随意使用它)。

您必须创建一个在收到提交时触发的流。这应该很简单,但这里是我使用的一些屏幕截图,基于我填写的表格,id 是:Example Condition With PowerApps

此时,您将拥有包含表单提交响应的动态内容,您可以使用它执行各种检查/任务。

选项 1 匹配测试

您可以使用一些错误检查来查看 Your UserName 文本是否与 Excel 表格中的任何行匹配。假设您有一个表格,您已经使用 AD 中的所有有效名称填充了一个表格,并为其指定了一个表格名称 directoryTable(即如下所示)和一个名为 SamplePowerApps.xlsx 的 Excel 文件。

然后您可以测试用户的输入是否与任何值匹配。为避免大写问题,我在表中创建了一个函数将所有值转换为大写,并将用户条目的搜索文本修改为大写。您可以使用Excel Connector object Get a Row 运行测试,在我们的示例中如下所示:

键值是响应用户名的组合,但将字符转为大写:

这将导致找到一个成功的行(我们将不做任何事情),或者它会抛出一个错误。为了测试这一点,我们需要创建两个基于成功或不成功运行的后续步骤。因为这篇文章太长了,我就不详细介绍了,但是这一步有很好的记录in this article

选项 2 使用 Excel 公式进行测试(可能更容易)

这与上面类似,但不是在表中获取一行,we will add a row。在下面的示例中,我将在名为responseTable 的表中添加一行。同一个表将有一列通过查找同一个 AD 列表来测试用户名是否有效(我的确切公式是 =ISNUMBER(MATCH([@UserName],directoryTable[USERID],0))。使用如下所示的规则设置,您将获得一个可以排序的表ValidUser 列显示有效用户的 True 或 False。

【讨论】:

  • 谢谢。过去,我曾将基于云的 Power Automate 版本用于某些任务 - 即 Excel 和/或 Word 的桌面版本不能(或不会)允许的邮件合并功能。不过,对于这项特殊的工作,我将不得不坚持使用 Power Automate 的“桌面”版本。
  • 我对桌面版不太熟悉。您是否需要您的 VBA 解决方案?
  • 嘿,谢谢你的提问!是的,最后我做到了。最好的解决方案是编写一个宏,声明一个数组,然后将员工姓名添加到其中。执行宏时,它会检查特定范围内的单元格的值,以查看它们是否在数组中。完美工作。无需担心以错误的名称创建票证! Power Automate Desktop 对“编程”来说是一件轻而易举的事,但必须牺牲很多速度 - 它需要几秒钟来检查 XL 文件的每一行并查看票证 URL 是否已经存在。当列表变长时,我可能需要使用 Python。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
相关资源
最近更新 更多