Код VBA выбирает столбец, который не вызван - PullRequest
0 голосов
/ 07 мая 2018
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"

Хорошо, теперь открывается CSV-файл, который загружается в сетевой ресурс, и исправляются некоторые даты. Даты в исходном файле имеют формат YYYY-MM-DDTHH: MM: SSZ, и предполагается, что T и Z отбираются от этих дат в соответствующих столбцах. У меня проблема в том, что по какой-то странной причине он обрабатывает столбец L в файле, и я не могу понять, почему.

Итак, я посмотрел некоторый код для замены регулярных выражений в VBA и попытался изменить код, чтобы использовать следующий код, чтобы попытаться исправить проблему:

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

Совершенно уверен, что ошибка 5017 - определяемая приложением или объектом, которую я получаю на регулярном выражении. Замена означает, что у меня что-то не так с частью регулярного выражения. Просто не уверен, что это такое.

1 Ответ

0 голосов
/ 07 мая 2018

Ну, вы должны проверить фактическое совпадение, а не просто пустое место; вот обновленный и соответствующий раздел кода.

'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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...