Regex VBA代码正在拾取未调用的列

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

好的,这会打开一个csv,下载到网络共享并修复一些日期。原始文件中的日期格式为YYYY-MM-DDTHH:MM:SSZ,这将从相应列中的日期中删除T和Z。我遇到的问题是,出于某种奇怪的原因,它正在处理文件中的L列,我不知道为什么

因此,我在VBA中查找了一些regex replace的代码,并尝试重构代码,以使用以下代码尝试修复该问题:

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