Regex VBA代码正在拾取未调用的列
好的,这会打开一个csv,下载到网络共享并修复一些日期。原始文件中的日期格式为YYYY-MM-DDTHH:MM:SSZ,这将从相应列中的日期中删除T和Z。我遇到的问题是,出于某种奇怪的原因,它正在处理文件中的L列,我不知道为什么 因此,我在VBA中查找了一些regex replace的代码,并尝试重构代码,以使用以下代码尝试修复该问题:Regex VBA代码正在拾取未调用的列,regex,excel,vba,Regex,Excel,Vba,好的,这会打开一个csv,下载到网络共享并修复一些日期。原始文件中的日期格式为YYYY-MM-DDTHH:MM:SSZ,这将从相应列中的日期中删除T和Z。我遇到的问题是,出于某种奇怪的原因,它正在处理文件中的L列,我不知道为什么 因此,我在VBA中查找了一些regex replace的代码,并尝试重构代码,以使用以下代码尝试修复该问题: Sub UpdateDMDCLCSIM() Dim SIM_DM_DCLC As Worksheet Dim TextFileUpdated As Date
Sub UpdateDMDCLCSIM()
Dim SIM_DM_DCLC As Worksheet
Dim TextFileUpdated As Date
Set SIM_DM_DCLC = ThisWorkbook.Sheets(Sheet52.Name)
TextFileUpdated = DateValue(FileDateTime("\\networkshare\dept\DCGSI\Extracts\SIM_DM_DCLC.csv"))
Application.DisplayAlerts = False
Application.StatusBar = "Importing latest DM DCLC SIM Data..."
With SIM_DM_DCLC.QueryTables.Add(Connection:= _
"TEXT;\\networkshare\dept\DCGSI\Extracts\SIM_DM_DCLC.csv" _
, Destination:=SIM_DM_DCLC.Range("$A$1"))
.Name = "SIM_DM_DCLC"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 936
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Change to MySQL date format.
SIM_DM_DCLC.Range("I:K", "P:T").Replace Chr(84), " "
SIM_DM_DCLC.Range("I:K", "P:T").Replace Chr(90), ""
SIM_DM_DCLC.Range("I:K", "P:T").NumberFormat = "yyyy-mm-dd hh:mm:ss"
子更新的dclcsim()
关于错误转到错误处理程序
Dim SIM_DM_DCLC作为工作表
Dim TEXTFILE更新为日期
设置SIM_DM_DCLC=thishworkbook.Sheets(Sheet52.Name)
TextFileUpdated=DateValue(FileDateTime(“\\networksharem\dept\DCGSI\Extracts\SIM\u DM\u DCLC.csv”))
Application.DisplayAlerts=False
Application.StatusBar=“正在导入最新的DM DCLC SIM数据…”
使用SIM_DM_DCLC.QueryTables.Add(连接:=_
“TEXT;\\networkshare\dept\DCGSI\Extracts\SIM\u DM\u DCLC.csv”_
,目的地:=SIM_DM_DCLC.Range(“$A$1”))
.Name=“SIM\U DM\U DCLC”
.FieldNames=True
.rowNumber=False
.FillAdjacentFormulas=False
.PreserveFormatting=True
.refreshinfoleopen=False
.RefreshStyle=xlInsertDeleteCells
.SavePassword=False
.SaveData=True
.AdjustColumnWidth=True
.RefreshPeriod=0
.TextFilePromptOnRefresh=False
.TextFilePlatform=936
.TextFileStartRow=1
.TextFileParseType=xlDelimited
.TextFileTextQualifier=xlTextQualifierDoubleQuote
.textfileconsutivedelimiter=False
.TextFileTabDelimiter=True
.TextFileSemicolonDelimiter=False
.textfilecommadelimitor=True
.TextFileSpaceDelimiter=False
.TextFileTrailingMinusNumbers=True
.Refresh BackgroundQuery:=False
以
'更改为MySQL日期格式。
设置regex=CreateObject(“VBScript.RegExp”)
regex.Pattern=“/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/”
对于SIM_DM_DCLC.UsedRange中的每个单元格
如果cell.Value“”则cell.Value=regex.Replace(cell.Value,“/^(\d{4})-(\d{2})-(\d{2})(\d{2}):(\d{2}):(\d{2}):(\d{2})$/)
下一个细胞
很确定我在regex.Replace上遇到的5017-应用程序定义或对象定义错误意味着我的regex部分有问题。只是不确定它是什么。好吧,你必须检查实际匹配,而不仅仅是空白;下面是代码的更新和适当部分
Sub UpdateDMDCLCSIM()
On Error GoTo ErrorHandler
Dim SIM_DM_DCLC As Worksheet
Dim TextFileUpdated As Date
Set SIM_DM_DCLC = ThisWorkbook.Sheets(Sheet52.Name)
TextFileUpdated = DateValue(FileDateTime("\\networksharem\dept\DCGSI\Extracts\SIM_DM_DCLC.csv"))
Application.DisplayAlerts = False
Application.StatusBar = "Importing latest DM DCLC SIM Data..."
With SIM_DM_DCLC.QueryTables.Add(Connection:= _
"TEXT;\\networkshare\dept\DCGSI\Extracts\SIM_DM_DCLC.csv" _
, Destination:=SIM_DM_DCLC.Range("$A$1"))
.Name = "SIM_DM_DCLC"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 936
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Change to MySQL date format.
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z)$/"
For Each cell In SIM_DM_DCLC.UsedRange
If cell.Value <> "" Then cell.Value = regex.Replace(cell.Value, "/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/")
Next cell
VBA正则表达式声明不需要正则表达式分隔符,
regex.Pattern=“/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z)$/“
必须替换为regex.Pattern=“^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d})Z){。我没有用你的数据测试它,但至少现在,它是有意义的。我还认为您应该在执行regex.Replace
时提供替换:regex.Replace(输入,模式,替换)
按照建议更新regex模式后,我仍然收到相同的错误。我尝试了替换代码,它给了我一个450的错误。我也愿意接受关于为什么原始代码在L列上执行删除操作,而它不应该这样做的观点。虽然我的理想状态是找到类似日期-时间组合的东西,修复日期-时间组合并设置单元格格式。哇;真不敢相信我居然没看到这个。
'Change to MySQL date format.
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z)$"
For Each cell In SIM_DM_DCLC.UsedRange
If cell.Value = regex.Pattern Then cell.Value = regex.Replace(cell.Value, "^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$")
Next cell