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)))