我正在使用区域ID为工人创建especific过滤器,该过滤器也具有唯一的id,这些ID由数据库自动生成,其中前几位数字是员工特定的,然后是区号,其中某些数字是int和其他字符串。
例如:
981505 '9815 is employee id and 05 his area
1340A '134 is employee and 0A his area (aphanumeric are managers)
对于数字数据,我做.NumberFormat = "00####"
没问题,但是对于字母数字,我不能应用相同的逻辑,我尝试做一个IF:
If Len(pd.Range("C2:C" & fi).Value) < 10 And pd.Range("C2:C" & fid).Value Then
pd.Range("C2:C" & fid).Value = WorksheetFunction.Rept("0", 9 - Len(pd.Range("C2:C" & fid).Value))
End If
并且还使用VBA WorksheetFunction
返回not optional
错误:
pd.Range("C2:C" & fid).Value = WorksheetFunction.Text("00########")
我需要什么:
00981505 'Lead zeros
0001340A 'I need lead zeros for future records as id's fluctuate a lot ( i don't know what process goes in the DB for the ids
出于速度和要求的考虑,我需要在VBA中进行操作,有什么帮助吗?
答案 0 :(得分:0)
我认为解决此问题的最简单方法是不理会特定于类型的函数,而使用更具动态性的函数,例如:
Dim endRow as long
endRow = pd.range("C" & Rows.Count).End(xlUp).Row
For fid = 2 to endRow
If Len(pd.Range("C" & fid)) < 10 Then
Do
pd.Range("C" & fid) = "'0" & pd.Range("C" & fid)
Loop Until Len(pd.Range("C" & fid)) = 10
End if
next fid
无论原始类型如何,这都会在C列中保留您的值。
编辑:
尝试应用相同逻辑时看到错误的原因是由于您不能接受大于1个单元格的范围值,并且无法对其应用Len()之类的函数。一旦它是一个以上的单元格,它的类型严格地是一个范围,而范围没有Len(),它将引发不匹配错误。