【问题标题】:ERROR Date and Time Text to Columns Macro Excel VBA错误日期和时间文本到列宏 Excel VBA
【发布时间】:2017-06-10 01:45:38
【问题描述】:

我在编写宏以将具有日期和时间信息的单元格分隔到具有 TexttoColumns 公式的列中时遇到问题。 这是我在专栏中的信息。

开始日期

1900-01-01 (00:00)

2008-09-25 (12:46)

我希望拆分除标题之外的所有列,其中一列中包含日期,下一列中包含小时。

在我拥有的宏中,我能够找到要拆分的列,并在右侧正确创建新列。但是,我无法将文本转换为列公式。这是我的代码:

Sub Separate_Date()
  Cells.Find(What:="Fecha Inicio Proceso", After:=Cells(1, 1), 
  LookIn:=xlValues, 
  LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, 
  MatchCase:=False, SearchFormat:=False).Activate

  Col = ActiveCell.Column
  LastRow = ActiveCell.End(xlDown).Row
  Cells(ActiveCell.Row, ActiveCell.Column + 1).EntireColumn.Insert

  Columns(Col).Select
  Range(Selection, Selection.End(xlDown)).Select

  ********Selection.TextToColumns Destination:=Range(Cells(2, Col), 
  Cells(LastRow, Col)), 
  DataType:=xlDelimited, _
  TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
  Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
  :=" ", FieldInfo:=Array(Array(1, 4), Array(2, 4)), 
  TrailingMinusNumbers:=True

 End Sub

我的代码停在标有 **** 的行中。它显示错误“运行时错误。目标引用无效”。

我想我的问题出在 Range 部分,但我无法在网站上找到任何解决方案。

【问题讨论】:

    标签: vba excel text-to-column


    【解决方案1】:

    不需要为此需要 VBA。只需几个步骤,您就可以拥有您想要的东西。假设数据在 Col A 中。如果您仍然需要 VBA,则为以下步骤录制一个宏并简单地修改它。 :)

    1. 选择列 A
    2. 点击Data|Text To Columns|Delimited并选择Space作为分隔符。

    1. 点击完成
    2. 选择 Col B。按 CTRL+H。首先将( 替换为空,然后将) 替换为空

    1. 在 Col A 中重新键入 Header 并将其从 Col B 中删除

    【讨论】:

    • 我知道我可以这样做。但是我需要每周执行一次,所以我希望使用宏自动执行此操作,因此我不需要每周都执行此操作。
    • 我想你错过了And if you still want VBA then record a macro for the below steps and simply amend it. :)....的部分
    【解决方案2】:

    希望您的日期是真实日期,或者可以使用 Cdate([date as string]) 函数转换为真实日期。真正的日期是一个双精度类型的数字,例如 42896.417349537,其中整数表示日期,小数表示时间。基本上,您可以在两列中使用完全相同的数字,但格式不同。 "mm-dd-yyyy" 不会显示时间,"hh:mm:ss" 不会显示日期。

    但是,如果您希望分隔值,显然Int(42896.417349537) 将生成一个没有时间的日期,而42896.417349537 - Int(42896.417349537) 将生成代表时间的数字。在这两种情况下,您仍然可以通过格式控制显示,即Numberformat 属性。

    实际上,在工作表中这一切都比在 VBA 中容易得多。除非这是一项重复性任务,否则我建议使用工作表函数和单元格格式来完成所有任务。

    【讨论】:

      【解决方案3】:

      你不需要所有的代码来分隔它们......你可以使用 format$()

      在单元格上试试这个:

      Public Sub SplitDateTime(lRow As Long, lColumn As Long)
      
        If IsDate(ActiveSheet.Cells(lRow, lColumn)) Then
          Dim dt As Date
          dt = ActiveSheet.Cells(lRow, lColumn)
          MsgBox "Date: " & Format$(dt, "yyyy-mm-dd") & " Time: " & Format$(dt, "hh:mm:ss")
        Else
          MsgBox "This is not a date cell- Row:" & lRow & " - Column:" & lColumn & " - Value:" & ActiveSheet.Cells(lRow, lColumn)
        End If
      
      End Sub
      

      【讨论】:

        【解决方案4】:

        也许,

        Sub Separate_Date()
        Dim rngF As Range, Lastrow As Long, i As Long
        Dim Col As Integer
        Dim vR(), vSplit, vDB
        
            Set rngF = Cells.Find(What:="FechaInicio Proceso", LookIn:=xlValues, LookAt:=xlWhole)
            Col = rngF.Column
            Lastrow = rngF.End(xlDown).Row
            rngF.Offset(, 1).EntireColumn.Insert
        
            vDB = Range(Cells(2, Col), Cells(Lastrow, Col))
            ReDim vR(1 To UBound(vDB, 1), 1 To 2)
            For i = 1 To UBound(vDB, 1)
                vSplit = Split(vDB(i, 1), "(")
                vR(i, 1) = Trim(vSplit(0))
                vR(i, 2) = Trim(Replace(vSplit(1), ")", ""))
            Next i
            Cells(2, Col).Resize(UBound(vR, 1), 2) = vR
            Columns(Col + 1).NumberFormatLocal = "hh:mm"
         End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-14
          • 1970-01-01
          • 2018-04-30
          相关资源
          最近更新 更多