String 如何处理Excel VBA输入变量中的破折号?
我在使用Excel VBA宏时遇到一些问题,希望您能给我一些关于如何修复它的建议。在下面的代码中,当用户单击命令按钮时,会弹出一个输入框,用户以XXX-XXXXXX的形式输入一个数字(例如111-22222)。然后,宏从按钮旁边的列中获取值,并使用输入变量替换相邻列值的某一部分。但是,当我试图运行宏并输入123-456789这样的数字时,什么也没有发生。我相信这与用户输入的破折号有关,但我不确定如何修复它。请帮忙String 如何处理Excel VBA输入变量中的破折号?,string,variables,excel,vba,String,Variables,Excel,Vba,我在使用Excel VBA宏时遇到一些问题,希望您能给我一些关于如何修复它的建议。在下面的代码中,当用户单击命令按钮时,会弹出一个输入框,用户以XXX-XXXXXX的形式输入一个数字(例如111-22222)。然后,宏从按钮旁边的列中获取值,并使用输入变量替换相邻列值的某一部分。但是,当我试图运行宏并输入123-456789这样的数字时,什么也没有发生。我相信这与用户输入的破折号有关,但我不确定如何修复它。请帮忙 Sub CommandButtonTitleXXXdashXXXXXX_Click
Sub CommandButtonTitleXXXdashXXXXXX_Click()
Application.ScreenUpdating = False
On Error Resume Next
Dim n As Integer
n = Worksheets("REVISIONS").Range("D3:D17").Cells.SpecialCells(xlCellTypeConstants).Count
If n = 15 Then
If MsgBox("Title revision box full. Add manually.", vbOKOnly, "Error") = vbOK Then
Exit Sub
End If
End If
Dim rs As Integer
rs = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
Dim amount As String
Application.ScreenUpdating = True
amount = Application.InputBox("Enter case number:", "")
Application.ScreenUpdating = False
If amount = False Then
Exit Sub
Else
Dim newCell As String
newCell = Replace(Worksheets("TITLE").Range("A" & rs).Value, "XXX-XXXXXX", amount)
Worksheets("REVISIONS").Range("D17").End(xlUp).Offset(1, 0) = newCell
End If
End Sub
如果将金额设置为字符串,则可以将其作为字符串进行测试:
Sub GetDash()
Dim amount As String
amount = Application.InputBox(Prompt:="Enter case number", Type:=2)
If amount = "False" Then
MsgBox "You cancelled"
End If
End Sub
我会把你的代码带到一个额外的步骤 无需将
金额
声明为字符串
。您可以将其保留为变体
。也像我在上面的评论中提到的
您的案例编号是否可以是@D1-1%#456?如果没有,那么您还有一个问题要处理;)
看看这个例子。我已经对代码进行了注释,这样您在理解代码时就不会有问题。但是如果你不知道:)另一种方法是使用正则表达式来验证你的案例ID。如果你也想要这个例子,请告诉我
代码
Sub Sample()
Dim amount As Variant
' 123-$456789 <~~ Invalid
' 123-4567890 <~~ Valid
' ABC-&456789 <~~ Invalid
' 456-3456789 <~~ Valid
amount = Application.InputBox("Enter case number:", "")
'~~> Check if user pressed cancel
If amount = False Then Exit Sub
'~~> Check if then Case ID is valid
If IsValidCaseNo(amount) Then
MsgBox amount
Else
MsgBox "Invalid case ID"
End If
End Sub
Function IsValidCaseNo(sAmount) As Boolean
Dim s As String
Dim i As Long, j As Long
s = sAmount
'
'~~> Initial basic checks
'
'~~> Check if the length is 11 characters
If Len(Trim(s)) <> 11 Then GoTo Whoa
'~~> Check if the string contains "-"
If InStr(1, s, "-") = 0 Then GoTo Whoa
'~~> Check if the 4th character is a "-"
If Mid(s, 4, 1) <> "-" Then GoTo Whoa
'~~> Loop through 1st 3 characters and check
'~~> If they are numbers
For i = 1 To 3
Select Case Asc(Mid(s, i, 1))
Case 48 To 57
Case Else: GoTo Whoa
End Select
Next
'~~> Loop through last 6 characters and check
'~~> If they are numbers
For i = 5 To 11
Select Case Asc(Mid(s, i, 1))
Case 48 To 57
Case Else: GoTo Whoa
End Select
IsValidCaseNo = True
Next
Whoa:
End Function
子样本()
变暗量
'123-$456789检查字符串是否包含“-”
如果InStr(1,s,“-”)=0,则转到Whoa
“~~>检查第四个字符是否为“-”
如果中间(s,4,1)“-”则转到哇
“~~>循环前3个字符并检查
“~~>如果它们是数字
对于i=1到3
选择案例Asc(Mid(s、i、1))
案件48至57
案例:GoTo哇
结束选择
下一个
“~~>循环最后6个字符并检查
“~~>如果它们是数字
对于i=5到11
选择案例Asc(Mid(s、i、1))
案件48至57
案例:GoTo哇
结束选择
IsValidCaseNo=True
下一个
哇
端函数
下一步尝试删除错误恢复,看看是否有错误,到目前为止,您可能在代码中遇到错误,但永远不会知道,因为该行忽略了错误。另外,将行newCell=Replace(工作表(“标题”).Range(“A”和rs).值,“XXX-XXXXXX”,amount)
更改为工作表(“标题”).Range(“A”和rs).替换内容:=“XXX-XXXXXX”,替换:=amount,SearchOrder:=xlByColumns,MatchCase:=True
或添加工作表函数。
或应用程序。
在替换之前,VBA替换函数和Excel替换函数是不同的调用!很明显,它在“如果金额=False Then”上出现了中断。我想知道破折号是否会让输入框认为它是空的?破折号不应该导致它是空的。您是否从输入框中取消了?这将返回False。如果amount=“”,请尝试,然后改为。您遇到的任何问题都不应该与任何破折号有关。如果amount=”“,则
起作用,除非他们按“取消”,因为它返回“False”,并将其用作替换值。