【问题标题】:One line VBA statement expression with If-else condition带有 If-else 条件的一行 VBA 语句表达式
【发布时间】:2020-05-14 16:56:18
【问题描述】:

我正在创建一个类似 VBA 的表达式。

Replace([EmailAddress], "@domain.com", , , "", , )

[EmailAddress] 实际上由一个字符串组成,例如“john.doe@domain.com”。所以从表达式生成的结果将是“john.doe”

我想设置一个条件,如果从表达式返回的结果超过 20 个字符,结果返回将为“john.d”。

基本去掉符号“.”后第一个字符后面的所有字符

这个想法是这样的:

Variable a = Replace([EmailAddress], "@domain.com", , , "", , )

If len(a) > 20 then
  an expression that remove all the characters after the symbol "."         and first letter

else
  a

End if

我不确定我是否有意义,因为我不是程序员,也不确定使用的这些 VBA 语法是否正确。我认为应该有一个单行表达式来适应所有这些条件。

如果有人可以帮助指导我,我真的很感激。

【问题讨论】:

    标签: vba syntax


    【解决方案1】:

    下面是一个接受电子邮件地址的简短 VBA 函数。如果那里有一个“@”,它将获取它左侧的文本。如果此文本长度超过 20 个字符并带有“.”在其中,然后获取“。”左侧的所有文本,加上“。”和下一个字符。

    Function fRemoveDomain(strDomain As String) As String
        If InStr(strDomain, "@") > 0 Then
            fRemoveDomain = Left(strDomain, InStr(strDomain, "@") - 1)
            If (Len(fRemoveDomain) > 20) And (InStr(fRemoveDomain, ".") > 0) Then
                fRemoveDomain = Left(fRemoveDomain, InStr(fRemoveDomain, ".") + 1)
            End If
        End If
    End Function
    

    问候,

    【讨论】:

      【解决方案2】:

      假设您的电子邮件输入始终遵循格式,即括号中的所有内容都可以是不包含@.的字符串,则此UDF应该可以解决问题:

      • [name].[name]@[domain].com

      Public Function DOMAIN(Target As String) As String
      
      If Len(Split(Target, "@")(0)) > 20 Then
          Domain = Split(Target, ".")(0) & "." & Left(Split(Target, ".")(1), 1)
      Else
          Domain = Split(Target, "@")(0)
      End If
      
      End Function
      

      您可以直接在工作表上调用您的 UDF,如下所示:

      或者像这样的宏:



      您也可以避免将 VBA 与

      一起使用
      =IF(LEN(MID(A2,1,SEARCH("@",A2)-1))>20,MID(A2,1,FIND(".",A2)+1),MID(A2,1,SEARCH("@",A2)-1))
      

      【讨论】:

      • 谢谢!我现在很接近,抱歉我的设置(MS Azure)只能接受 VBA 表达式。所以我将其修改为:``` IIF( Count(Mid([EmailAddress],1,inStr([EmailAddress],"@")-1))>20, Mid([EmailAddress],1,inStr([EmailAddress ],".")+1), Mid([EmailAddress],1,inStr([EmailAddress],"@")-1) ) ``` 现在(唯一的,希望的)问题是语法“inStr”没有'最后不接受 +1 或 -1。试图将整个 inStr....+1 放在括号中,但也不起作用。
      • 我的解决方案不使用 instr 所以不知道你在问什么。您可能评论了错误的解决方案
      • InStr 是 VBA 中搜索和查找的替代品,至少这是我发现的。
      • 您是否尝试过我给您的任何一种方法,哈哈,以上两种方法都经过测试并且工作正常。当我已经提供了第 2 种方式时,我不会再提供第 3 种方式的帮助
      • 原谅我,但我不是编程背景,我是系统管理员,试图通过创建类似 VBA 的表达式来匹配 Azure 中的某些属性。 Azure 只能接受 VBA 语法,我不能强制它使用其他语法。您的第一个解决方案(if-else)不起作用,系统不会接受 If-else 条件。我将尝试找到修复 inStr 的方法,因为这是迄今为止最接近成功的方法,感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2018-01-21
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 2015-05-16
      相关资源
      最近更新 更多