我正在尝试寻找一种更简单的方法来使程序产生具有多个结果的句子。我还想在语句之间包括一个“逗号”或“和”,这取决于是否只有那些2或它是序列中的最后一个。朝正确方向的观点会有所帮助。
一个完整的肯定句子是“观看视频后,个人保持顺从,有良好的判断力,负责任,表现出良好的客户服务并表现出安全的作法”
完整的句子:“观看视频后,该人具有良好的判断力,表现出良好的客户服务并显示了安全的做法,很不幸,该人不遵守规定并且不负责任。”
我一直在研究使用电源套件,但似乎需要更多工作。
Function VidSent2(HeShe, Vcomp, Vjudg, Vresp, Vcust, Vsafe)
'HeShe is just to see if it should use "he" or "she"
Pstmt1 = "": Nstmt1 = ""
Pstmt2 = "": Nstmt2 = "": a1 = "": c1 = ""
Pstmt3 = "": Nstmt3 = "": a2 = "": c2 = ""
Pstmt4 = "": Nstmt4 = "": a3 = "": c3 = ""
Pstmt5 = "": Nstmt5 = "": a4 = "": c4 = ""
A = 0
If Vcomp = True Then
Pstmt1 = "was compliant" ' what comes after this? , or and?
A = A + 1
Else
Nstmt1 = "was not compliant"
End If
If Vjudg = True Then
Pstmt2 = "had good judgment"
A = A + 1
Else
Nstmt2 = "had bad judment"
End If
If Vresp = True Then
Pstmt2 = "was responsible"
A = A + 1
Else
Nstmt2 = "was not responsible"
End If
If Vcust = True Then
Pstmt2 = "showed good customer service"
A = A + 1
Else
Nstmt2 = "showed bad customer service"
End If
If Vsafe = True Then
Pstmt2 = "showed safe practices."
A = A + 1
Else
Nstmt2 = "did not show safe practices."
End If
End If
'might need to return a text value
bmRange.Text = Pstmt1 & c1 & a1 & Pstmt2 & c2 & a2 & Pstmt3 & c3 & a3 & Pstmt4 & c4 & a4 & Pstmt5 & c5 & a5 & "unfortunately " & HeShe & _
Nstmt1 & Nstmt2 & Nstmt3 & Nstmt4 & Nstmt5
'after viewing the video i observed the individual "
'had good judgment ", unfortunately "heshe"...
'was compliant " and " had good judgment
'was compliant ", " had good judgment " and " was responsible
end function
该句子有32种可能的结果,具体取决于它们是位于“不幸的是”左侧还是右侧。 (已经解决了它们全部位于一侧或另一侧都位于的情况。)我正在尝试在语句后添加逗号还是“ and”添加它。
我发布的代码也是“进行中的工作”,因为我想看看是否有更好的方法来代替暴力破解,这似乎是我的前进方向。它尚未包含逗号或“ and”的代码。
编辑:我最终选择做的是接受MacroPod的回答并对其进行一些调整(我知道我可以清理它,并且将来会这样做。它可以做我大致需要做的事情。)谢谢每个帮助过的人。
Function VidSent2(Comp As Boolean, Judg As Boolean, Resp As Boolean, Cust As Boolean, Safe As Boolean)
Dim ArrPos(), ArrNeg(), StrOut As String
ReDim Preserve ArrPos(0): ReDim Preserve ArrNeg(0): StrOut = ""
If Comp = True Then
If UBound(ArrPos) >= 0 Then
ArrPos(UBound(ArrPos)) = "was compliant"
ReDim Preserve ArrPos(0 To UBound(ArrPos) + 1)
End If
Else
If UBound(ArrNeg) >= 0 Then
ArrNeg(UBound(ArrNeg)) = "was not compliant"
ReDim Preserve ArrNeg(0 To UBound(ArrNeg) + 1)
End If
End If
If Judg = True Then
If UBound(ArrPos) >= 0 Then
ArrPos(UBound(ArrPos)) = "had good judgment"
ReDim Preserve ArrPos(0 To UBound(ArrPos) + 1)
End If
Else
If UBound(ArrNeg) >= 0 Then
ArrNeg(UBound(ArrNeg)) = "had bad judgment"
ReDim Preserve ArrNeg(0 To UBound(ArrNeg) + 1)
End If
End If
If Resp = True Then
If UBound(ArrPos) >= 0 Then
ArrPos(UBound(ArrPos)) = "was responsible"
ReDim Preserve ArrPos(0 To UBound(ArrPos) + 1)
End If
Else
If UBound(ArrNeg) >= 0 Then
ArrNeg(UBound(ArrNeg)) = "was not responsible"
ReDim Preserve ArrNeg(0 To UBound(ArrNeg) + 1)
End If
End If
If Cust = True Then
If UBound(ArrPos) >= 0 Then
ArrPos(UBound(ArrPos)) = "showed good customer service"
ReDim Preserve ArrPos(0 To UBound(ArrPos) + 1)
End If
Else
If UBound(ArrNeg) >= 0 Then
ArrNeg(UBound(ArrNeg)) = "showed bad customer service"
ReDim Preserve ArrNeg(0 To UBound(ArrNeg) + 1)
End If
End If
If Safe = True Then
If UBound(ArrPos) >= 0 Then
ArrPos(UBound(ArrPos)) = "showed safe practices"
ReDim Preserve ArrPos(0 To UBound(ArrPos) + 1)
End If
Else
If UBound(ArrNeg) >= 0 Then
ArrNeg(UBound(ArrNeg)) = "did not show safe practices"
ReDim Preserve ArrNeg(0 To UBound(ArrNeg) + 1)
End If
End If
ReDim Preserve ArrPos(0 To UBound(ArrPos) - 1)
ReDim Preserve ArrNeg(0 To UBound(ArrNeg) - 1)
If UBound(ArrPos) > 0 Then ArrPos(UBound(ArrPos)) = "and " & ArrPos(UBound (ArrPos))
If UBound(ArrNeg) > 0 Then ArrNeg(UBound(ArrNeg)) = "and " & ArrNeg(UBoun(ArrNeg))
If ArrPos(UBound(ArrPos)) <> "" Then StrOut = "After viewing the video the individual " & Join(ArrPos(), ", ") & "."
If ArrNeg(UBound(ArrNeg)) <> "" Then StrOut = StrOut & " Unfortunately, the individual still " & Join(ArrNeg(), ", ") & "."
VidSent2 = StrOut
End Function
答案 0 :(得分:-1)
我认为ElseIf语句是最简单的方法。这是一个例子。
If Range(“A5”) <= 50 Then
Range (“A6”).Value = “Failing Grade”
Else If Range (“A5”) <= 80 Then
Range(“A6”).Value = “Passing Grade”
Else
Range(“A6”).Value = “Outstanding Grade”
End If
答案 1 :(得分:-1)
尝试类似的东西:
Dim ArrPos(), ArrNeg(), StrOut As String
Function VidSent2(Comp As Boolean, Judg As Boolean, Resp As Boolean, Cust As Boolean, Safe As Boolean)
ReDim ArrPos(0): ReDim ArrNeg(0): StrOut = ""
If Comp = True Then Call Pos("was compliant") Else Call Neg("was not compliant")
If Judg = True Then Call Pos("had good judgment") Else Call Neg("had bad judment")
If Resp = True Then Call Pos("was responsible") Else Call Neg("was not responsible")
If Cust = True Then Call Pos("showed good customer service") Else Call Neg("showed bad customer service")
If Safe = True Then Call Pos("showed safe practices") Else Call Neg("did not show safe practices")
If UBound(ArrPos) > 0 Then ArrPos(UBound(ArrPos)) = "and " & ArrPos(UBound(ArrPos))
If UBound(ArrNeg) > 0 Then ArrNeg(UBound(ArrNeg)) = "and " & ArrNeg(UBound(ArrNeg))
If ArrPos(UBound(ArrPos)) <> "" Then StrOut = "After viewing the video the individual " & Join(ArrPos(), ", ") & "."
If ArrNeg(UBound(ArrNeg)) <> "" Then
If StrOut = "" Then
StrOut = "Regrettably, after viewing the video the individual still " & Join(ArrNeg(), ", ") & "."
Else
StrOut = StrOut & " Unfortunately, the individual still " & Join(ArrNeg(), ", ") & "."
End If
End If
VidSent2 = StrOut
End Function
Sub Pos(StrTxt As String)
If ArrPos(UBound(ArrPos)) <> "" Then ReDim Preserve ArrPos(UBound(ArrPos) + 1)
ArrPos(UBound(ArrPos)) = StrTxt
End Sub
Sub Neg(StrTxt As String)
If ArrNeg(UBound(ArrNeg)) <> "" Then ReDim Preserve ArrNeg(UBound(ArrNeg) + 1)
ArrNeg(UBound(ArrNeg)) = StrTxt
End Sub
您将使用以下代码调用该代码:
Sub Test()
bmRange.Text = VidSent2(True, False, True, True, False)
End Sub