VBA嵌套IF/ElseIF有助于创建条件超链接



希望有人能帮忙——我希望有一些非常简单的事情我做错了。

情况是这样的:

  • 我有一个包含可变行的表(逐月(
  • 我试图放置公式的四列(CaseLink(为空

样品表

  • 列"System"有三个值之一;CSv1、CSv2、PIA
  • 案例#列将有数字——没有重复或一致性
  • CaseLink列是我遇到问题的地方——我正试图插入三个超链接中的一个,以将值包含在Case#列中。链接目标基于"系统"列中的值

以前我在System列中只有两个变量,并且能够用一个简单的IF语句来求解,因为它要么是true,要么是false。现在有了第三个变量,我在If/ElseIF格式方面遇到了困难。以下是我尝试过的:

原始if语句有效:


Range("C2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-2]=""CSv1"",HYPERLINK(CONCATENATE(""https://open. cloudav.com/servicedeliverdo.aspx?rdx=9992956J43211&conv="",RC[-1]),RC[-1]),HYPERLINK(CONCATENATE(""https://open.topcloudav.com/ha2servicedeliverdo.aspx?conv="",RC[-1]),RC[-1]))"

Range("D3").Select

选项1:(这返回一个错误:未在级联上定义子或函数(

Range("C2").Select
If ActiveCell.Offset(0, -2).Value = "CSv1" Then Hyperlink (CONCATENATE("https://open.cloudav.com/servicedo.aspx?rdx=9992956J43211&conv="),RC[-1]),RC[-1]))
ElseIf ActiveCell.Offset(0, -2).Value = "CSv2" Then Hyperlink (CONCATENATE("https://open.cloudav.com/topservicedo.aspx?conv="),RC[-1]),RC[-1]))
ElseIf ActiveCell.Offset(0, -2).Value = "PIA" Then Hyperlink (CONCATENATE("https://dev.devroot.net/browse/PIA-"),RC[-1]),RC[-1]))

End If
Range("D3").Select

选项2:(这返回一个错误,表明ElseIF是未定义的

Range("C2").Select
ActiveCell.FormulaR1C1 = _
"IF(RC([-2])) = ""CSv1"" Then Hyperlink (CONCATENATE(""https://open.cloudav.com/servicedo.aspx?rdx=9992956J43211&conv="", RC[-1]), RC[-1])))"
elseif_
ActiveCell.FormulaR1C1 = _
"IF(RC([-2]) = ""CSv2"" then Hyperlink (CONCATENATE(""https://open.cloudav.com/topservicedo.aspx?conv="", RC[-1]), RC[-1])))"
elseif_
ActiveCell.FormulaR1C1 = _
"IF(RC([-2]))= ""PIA"" Then"
Hyperlink (concatenate("https://dev.devroot.net/browse/PIA-", (RC([-1])), (RC([-1]))))

End If
Range("D3").Select

我也尝试过ActiveCell.Offset而不是ActiveCell.Formula与类似的失败结果

有什么想法吗?

您的代码中有很多可以改进的地方:

  • 使用变量而不是硬代码
  • 不要选择
  • 缩进更好

我试图复制你正在做的事情,

Sub hyperlink()
Dim firstcellrow As Long       ' First row where your code acts
Dim systemcellcollumn As Long  ' Column w the system entries
Dim linkcollumn As Long        ' Column where you want to link stuff
firstcellrow = 1       ' In my case
systemcellcollumn = 2  'From your image
linkcollumn = 4        'From your image
Dim activecellrow As Long ' Its a long name but thats actualy just a counter
Dim system As String      ' Not needed if u use cell.text directly into select case
Dim i As Long
For i = 0 To 2 ' 0 to whatever you want
activecellrow = firstcellrow + i
system = Worksheets("test").Cells(activecellrow, systemcellcollumn).Text ' Not necessary, see comment under "Select Case"
Select Case system 
' or Select Case Worksheets("test").Cells(activecellrow, systemcellcollumn).Text 
Case "CSv1"
Cells(activecellrow, linkcollumn).FormulaR1C1 = "=IF(RC[-2]=""CSv1"",HYPERLINK(CONCATENATE(""https://open. cloudav.com/servicedeliverdo.aspx?rdx=9992956J43211&conv="",RC[-1]),RC[-1]),HYPERLINK(CONCATENATE(""https://open.topcloudav.com/ha2servicedeliverdo.aspx?conv="",RC[-1]),RC[-1]))"
Case "CSv2"
'etc 
Case "PIA"
'etc
End Select
Next
End Sub

这个代码可能不是完美的,但已经是更通用的,可以

我感谢所有的评论-我不是一个专业的程序员-这是我试图通过向其他人学习来完成的事情。如果这不是一个论坛,有人可以去寻求帮助而不会因为风格而受到抨击,我为浪费你的时间道歉。

我确实在一个嵌套的IF语句中找到了一个简单的方法来完成这项工作:

Range("C2").Select

ActiveCell.FormulaR1C1 = _
"=IF(RC[-2]=""CSv1"",HYPERLINK(CONCATENATE(""https://open.cloudav.com/deliverdo.aspx?rdx=9992956J43211&conv="",RC[-1]),RC[-1]),IF(RC[-2]=""CSv2"",HYPERLINK(CONCATENATE(""https://open.cloudav.com/topdeliverdo.aspx?conv="",RC[-1]),RC[-1]),IF(RC[-2]=""PIA"",HYPERLINK(CONCATENATE(""https://dev.devroot.net/browse/PIA-"",RC[-1]),RC[-1]))))"
Range("A2").Select

最新更新