Текстовые столбцы цикла vba во всех листах - PullRequest
0 голосов
/ 22 января 2019

Итак, в рабочей книге у меня много листов, из которых я хочу использовать текстовые столбцы для даты, дата обычно что-то вроде "22.11.2008 10:59:59 AM", и я хочу только сделать MDY с разделенным текстом на столбцы. Разделитель должен быть ложным.

Sub LoopCertain() 'Excel VBA to exclude sheets
'SP Edit, error handler
   On Error Goto errHandler
   If False Then
errHandler:
      MsgBox Err.Description
'This will cause the routine to carry on where it left off
      Resume Next
   End If
'SP End of Edit
Dim ws As Worksheet
Dim objRange1 As Range
Dim objRange2 As Range

For Each ws In ActiveWorkbook.Worksheets
Select Case ws.Name
Case Is = "General", "Verification", "OEM Plant Summary"
'No Code here if excluded
Case Else

    'Set up the ranges
    Set objRange1 = Range("C:C")
    Set objRange2 = Range("I:I")
    Set ws = ActiveSheet

       'Do the first parse
    objRange1.TextToColumns _
      Destination:=Range("C1"), _
      DataType:=xlDelimited, _
      Tab:=False, _
      Semicolon:=False, _
      Comma:=False, _
      Space:=False, _
      Other:=False, _
      OtherChar:="-"

    'Do the second parse
    objRange2.TextToColumns _
      Destination:=Range("I1"), _
      DataType:=xlDelimited, _
      Tab:=False, _
      Semicolon:=False, _
      Comma:=False, _
      Space:=False, _
      Other:=False, _
      OtherChar:="-"
End Select
Next ws
End Sub

Я получаю ошибки при попытке запустить это. Мне нужно изменить столбцы «I» и «C», и результаты должны быть в одном столбце. Оцените, можете ли вы помочь, поскольку я, как и всю неделю, пробовал разные типы циклов, и ничего не работает. Это работает, если я удалю цикл, хотя ...

Вот пример данных: Sample Data

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Зачем вам нужно использовать TextToColumns? Я был бы соблазн преобразовать текст в надлежащую дату (имеется в виду серийный номер даты), а затем отформатировать столбец в зависимости от того, как вы хотите отобразить дату. Преимущество этого метода состоит в том, что вы можете на самом деле сохранить значение времени, содержащееся в дате, если вы хотите узнать это позже, но без его отображения.

Однако, поскольку вы собираетесь манипулировать текстом, я думаю, что приведенный ниже код более эффективен. Пожалуйста, попробуйте.

Sub ReformatDate()

    Const FirstDataRow As Long = 1          ' change as appropriate

    Dim Ws As Worksheet
    Dim Rng As Range
    Dim Arr As Variant
    Dim C As Long
    Dim i As Long

    For Each Ws In Worksheets
        If InStr(1, ",General,Verification,OEM Plant Summary", "," & Ws.Name, _
                 vbTextCompare) = 0 Then
        With Ws
            For C = 3 To 9 Step (9 - 3)         ' columns C & I
                Set Rng = .Range(.Cells(FirstDataRow, C), _
                                 .Cells(.Rows.Count, C).End(xlUp))
                Arr = Rng.Value
                For i = 1 To UBound(Arr)
                    If Len(Arr(i, 1)) Then Arr(i, 1) = Split(Arr(i, 1))(0)
                Next i
                Rng.Value = Arr
                .Columns(C).AutoFit
            Next C
        End With
    Next Ws
End Sub
0 голосов
/ 22 января 2019

Фиксированная ширина, вероятно, будет более подходящей. В ваших данных приведены некоторые вопросы без ответа, но я предполагаю, что формат даты mmddyyyy (не mdyyyy) и данные, которые либо начинаются в строке 1, либо имеют метку заголовка в строке 1, содержат не более 10 символов.

For Each ws In ActiveWorkbook.Worksheets
    Select Case ws.Name
        Case "General", "Verification", "OEM Plant Summary"
            'No Code here if excluded
        Case Else

            With ws.Range("C:C")
                .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _
                               FieldInfo:=Array(Array(0, xlMDYFormat), Array(10, xlSkipColumn))

            End With

            With ws.Range("I:I")
                .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _
                               FieldInfo:=Array(Array(0, xlMDYFormat), Array(10, xlSkipColumn))

            End With

    End Select
Next ws
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...