Excel 查找工作表函数仅适用于左侧
有一个组合框,可以在其中填充Excel 查找工作表函数仅适用于左侧,excel,vba,Excel,Vba,有一个组合框,可以在其中填充name-ID或ID-name。我可以根据按下或未按下的选项按钮来确定。然后我想把这个组合框值分成两列,这样我就可以把name放在E列,id放在F列 If optEmployeeName.Value = True Then .Cells(5).Value = Left(cmbEmployee, (Application.WorksheetFunction.Find(" - ", cmbEmployee, 1) - 1))
name-ID
或ID-name
。我可以根据按下或未按下的选项按钮来确定。然后我想把这个组合框值分成两列,这样我就可以把name放在E列,id放在F列
If optEmployeeName.Value = True Then
.Cells(5).Value = Left(cmbEmployee, (Application.WorksheetFunction.Find(" - ", cmbEmployee, 1) - 1))
.Cells(6).Value = Right(cmbEmployee, (Application.WorksheetFunction.Find(" - ", cmbEmployee, 1) - 1))
ElseIf optEmployeeID.Value = True Then
.Cells(5).Value = Right(cmbEmployee, (Application.WorksheetFunction.Find(" - ", cmbEmployee, 1) - 1))
.Cells(6).Value = Left(cmbEmployee, (Application.WorksheetFunction.Find(" - ", cmbEmployee, 1) - 1))
End If
它适用于列E中的名称,但是当我尝试Right(…
它只会吐出整个值时,有没有办法解决这个问题
解决方案减去修剪:
Dim lString As String, lArray() As String
lString = cmbEmployee.Value
lArray = Split(lString, " - ")
If optEmployeeName.Value = True Then
.Cells(5).Value = lArray(0)
.Cells(6).Value = lArray(1)
ElseIf optEmployeeID.Value = True Then
.Cells(5).Value = lArray(1)
.Cells(6).Value = lArray(0)
End If
在回答问题时,find返回它找到字符的位置。为了使
Right
正常工作,需要从整个字符串的长度中减去该位置,这就是它不工作的原因
作为一种解决方案,我们假设始终存在名称和ID,并且optEmployeeName和Not(optEmployeeID)始终相同
Dim lArray() As String: lArray = Split(Replace(cmbEmployee," ",""),"-")
.Cells(5) = IIf(optEmployeeName = True, lArray(0), lArray(1))
.Cells(6) = IIf(optEmployeeName = True, lArray(1), lArray(0))
如果您只想修剪前导和/或结束空间,则以下替代方法应适用:
可能更容易使用
Split
和Trim
@BigBen好的,所以我用一个解决方案更新了我的帖子,我会把它改成Trim(lArray(0)
如果我想省略额外的空格?还有没有更优雅的方法来做到这一点?或者这是我能得到的最短的代码块?如果你想省略所有额外的空格,你可以使用replace函数。而且.Value
是多余的,所以快速更改将是lArray=Split(replace(lString,“,”),“-”)
和.Cells(5)=lArray(0)
etcAlso,我不会将lString分配给一次使用,而是直接在函数中使用cmbeployee,这样就不需要对lString进行调暗。因此lArray=Split(替换(cmbeployee,“,”),“-”
Dim lArray() As String: lArray = Split(cmbEmployee,"-")
.Cells(5) = WorksheetFunction.Trim(IIf(optEmployeeName = True, lArray(0), lArray(1)))
.Cells(6) = WorksheetFunction.Trim(IIf(optEmployeeName = True, lArray(1), lArray(0)))