首页 > 解决方案 > 查找仅适用于左侧的工作表功能

问题描述

有一个组合框,它将填充name - IDID - 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

标签: excelvba

解决方案


回答这个问题;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))

如果您只想修剪前导和/或结束空格,那么以下替代方法应该可以工作:

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

推荐阅读