我有一个代码,要求用户通过在输入框中写下其名称来选择工作表,然后我需要检查所选名称是否正确。
如何编写“if”语句以便返回输入框?
我在Windows 7中使用MS Word。这是代码:
HashSet
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
答案 0 :(得分:0)
如果您使用下面的代码替换以uiSheet = InputBox(.....
开头的代码,它应该可以正常工作。
'check if User input match with sheet name
Dim bSheetPresent As Boolean
bSheetPresent = False
Do Until bSheetPresent
uiSheet = InputBox("Provide a sheet name." & vbNewLine & strBuild)
If uiSheet = "" Then Exit Do
If IsInArray(uiSheet, myArray) Then
bSheetPresent = True
Else
MsgBox "Please enter a valid name!", vbCritical
End If
Loop
If bSheetPresent Then
'show excel window
oExcel.visible = True
'sort selected sheet by first column range
oExcel.Worksheets(uiSheet).Activate
Set oneRange = oExcel.Range("A1:A150")
Set aCell = oExcel.Range("A1")
oneRange.Sort Key1:=aCell, Order1:=xlAscending, Header:=xlYes
End If
如果用户在输入框上按下取消,它将退出循环。
您也可以考虑使用预先填充的组合框来构建表单。这样用户就不会犯错误。
答案 1 :(得分:0)
要创建带有工作表列表的自己的输入框,您可以执行以下操作:
frmSelectSheet
cbSheets
将以下代码添加到userform的代码窗格中:
Private Sub UserForm_Initialize()
Dim oSheet As Worksheet
For Each oSheet In ThisWorkbook.Sheets
Me.cbSheets.AddItem oSheet.Name
Next oSheet
End Sub
Private Sub cbSheets_Change()
Me.Hide
End Sub
添加模块并将以下代码添加到其中:
Public Function SheetInputBox() As String
Dim ofrmSheetInput As New frmSelectSheet
ofrmSheetInput.Show
SheetInputBox = ofrmSheetInput.cbSheets
Unload ofrmSheetInput
End Function
? SheetInputBox
或uiSheet = SheetInputBox