用户仅在文本框名称tbID
中输入数字值,在我的文件中,该列值另存为数字。但是,如果用户输入00120
而不是120
。尝试删除前导零之后,120
之前似乎有一个空格。
当我输入Criteria1:="120"
时有效
tbIDf = Cint(tbID) 'Debug.Print tbIDf gives " 120" and renders my filter criteria to a blank
ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=IDN, Criteria1:="tbID"
如何删除前导零和" "
前面的120
?
答案 0 :(得分:4)
这是一个想法,我将确保将其放入工作表的数据实际上是正确的可用数据。为此,您可以使用:
1, 2, 32
使用Val
将返回一个双精度值,而忽略非数字值# imports necessary
import datetime as dt
# raw data to make dataframe
raw_data = {
'name': ['Wrt', 'Grt', 'frt', 'srt', 'crt'],
'country': ['Ind', 'China', 'France', 'Scottland', 'china'],
'Join Date': ['1-2-2016', '3-2-2015', '8-3-2017', '9-4-2018', '9-7-2016'],
'End date': ['8-9-2017', '12-6-2018', 'continuing', 'continuing', '7-8-2018']
}
pdf = pd.DataFrame(raw_data)
# convert the dates into timestamps
pdf['join_date'] = pdf['Join Date'].apply(lambda x: dt.datetime.strptime(x, '%m-%d-%Y'))
pdf['end_date'] = pdf['End date'].apply(lambda x: dt.datetime.strptime(x, '%m-%d-%Y') if x is not 'continuing' else None)
# calculate diff
pdf['diff'] = pdf.apply(lambda x: str(x['end_date'] - x['join_date']).split(' ')[0] if x['end_date'] is not pd.NaT else 'continuing', axis=1)
# display result
pdf.head()
。另外,CLng
也有可能返回长值。只是不要使用Trim(Val(tbID))
,因为不需要使用整数(范围从-32,768到32,767)
TRIM
函数将删除前导和尾随空格。
您也可以/应该实施here中所述的按键事件,以确保仅输入数字值。
答案 1 :(得分:1)
这应该有效:
Option Explicit
Sub test()
'just for testing (this comes from your textbox)
Dim tbID As String
tbID = "00120"
If IsNumeric(tbID) Then 'test if numeric to prevent errors
Dim MyCriteria As String
MyCriteria = CStr(CLng(tbID))
ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=IDN, Criteria1:=MyCriteria
End If
End Sub
如果不使用Trim(CStr(CLng(tbID)))