Альтернатива SendKeys Enter для активации ячеек в Excel с помощью VBA - PullRequest
0 голосов
/ 03 февраля 2020

Я вставляю некоторые даты из CSV-файла в Excel, используя макрос, и использую поиск / замену для изменения формата в один Excel, который можно распознать, с 2019_10_22_08_43_23 до 22/10/2019 08:43:23, для пример. Excel не будет распознавать этот текст как дату, пока вы вручную не выберете ячейку и не нажмете ввод, и поэтому не будут правильно отображать даты на графике, пока это не будет сделано. Мое текущее решение использует

For Each c In cycleRange.Cells
c.Select 
SendKeys "{F2}", True
SendKeys "{ENTER}", True
Next

, чтобы вручную нажать клавишу ввода в каждой ячейке, но это занимает довольно много времени. Я пытался использовать TextToColumns, но это не работает. Если я вручную выбираю диапазон ячеек и перемещаюсь по меню данных, чтобы сам щелкнуть TextToColumn, он исправляет формат ячейки, но выполнение этого с помощью макроса ничего не делает.

cycleRange.Select
Selection.TextToColumns Destination:=cycleRange, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True

Какой самый быстрый способ заменить цикл по каждой ячейке и использование Sendkeys для их активации?

1 Ответ

0 голосов
/ 03 февраля 2020

Вы хотите преобразовать каждую ячейку в число. Вот код:

Dim cellValue As Double

For Each c In cycleRange.Cells
    If IsNumeric(c.Text) Then
        cellValue = c.Value
        c.Clear
        c.NumberFormat = "0.00"
        c = Val(c.Text)
        ' c = c.Text * 1
        ' c = CDbl(c.Text)
    Else
        MsgBox ("Not a number (" & c.Address & ")")
    End If
Next
...