excel - 查找仅适用于左侧的工作表功能
问题描述
有一个组合框,它将填充name - ID
或 ID - 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))
如果您只想修剪前导和/或结束空格,那么以下替代方法应该可以工作:
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)))
推荐阅读
- javascript - 输入文本框不断被擦除,以及输入效果
- r - 如何标记 R 中的文本列?嵌套功能不起作用
- vhdl - 错误 (10568):Questao1.vhd(44) 处的 VHDL 错误:无法写入模式 IN 的接口对象“dataa”
- javascript - 从文本字段复制文本并插入到当前光标位置的另一个文本区域
- java - Hibernate EntityGraph 未加载声明的实体图 [二级]
- python - 列表元素的总和,直到限制
- r - 如何使用 CURL 从 JSON 数据中提取数据
- kubernetes - Kubernetes 集群自动扩缩器不会缩减 EKS 上的实例 - 只记录不需要节点
- r - 如何循环一个函数并在 R 中生成 3 个单独的列表
- python - 更常见的是:X_train 还是 x_train?