如何在VBA代码中为指定行自动应用StateFullName子过程?
实现方案
方法一:直接调用原Sub子过程
原代码中先完成州缩写的写入,紧接着调用StateFullName子过程并传入目标单元格,让子过程自动处理该单元格内的州缩写为全称。修改后的完整代码如下:
OCAddress1 = Split(Target.Value, vbLf) Target.Value = OCAddress1(0) 'Address Target.Offset(, 2).Value = Split(OCAddress1(1), ", ")(0) 'City OCStateZip = Split(Split(OCAddress1(1), ", ")(1), " ") ' 写入州缩写到目标单元格 Target.Offset(, 3).Value = Replace(Split(OCAddress1(1), ", ")(1), OCStateZip(UBound(OCStateZip)), "") 'State ' 调用子过程处理该单元格,自动转换为州全称 Call StateFullName(Target.Offset(, 3)) Target.Offset(, 4).Value = OCStateZip(UBound(OCStateZip)) 'Zip
注:此方式要求StateFullName子过程的逻辑是接收一个单元格范围,将该单元格内的州缩写替换为对应的全称。
方法二:将Sub改为Function(更灵活的赋值方式)
如果希望直接通过赋值完成转换,可将StateFullName从子过程改为函数,具体步骤:
- 修改
StateFullName的定义为函数,实现缩写转全称的逻辑:
Function StateFullName(ByVal stateAbbr As String) As String ' 这里写缩写转全称的映射逻辑,示例: Select Case UCase(stateAbbr) Case "CA": StateFullName = "California" Case "NY": StateFullName = "New York" ' 补充其他州的映射规则 End Select End Function
- 修改原代码中处理州的代码行,直接调用函数返回全称:
OCAddress1 = Split(Target.Value, vbLf) Target.Value = OCAddress1(0) 'Address Target.Offset(, 2).Value = Split(OCAddress1(1), ", ")(0) 'City OCStateZip = Split(Split(OCAddress1(1), ", ")(1), " ") ' 获取州缩写并直接转换为全称后赋值 Dim stateAbbr As String stateAbbr = Replace(Split(OCAddress1(1), ", ")(1), OCStateZip(UBound(OCStateZip)), "") Target.Offset(, 3).Value = StateFullName(stateAbbr) 'State Target.Offset(, 4).Value = OCStateZip(UBound(OCStateZip)) 'Zip
内容的提问来源于stack exchange,提问作者user1574881
相关产品推荐
相关产品推荐

