У меня есть данные, загруженные с веб-сайта, один столбец этих данных содержит дату хиджры. Чтобы этот столбец был правильным столбцом даты, я применил следующее форматирование:

enter image description here

Но проблема не будет считаться датой и выравниваться по правому краю, если я не введу ячейку (двойным щелчком или F2), а затем нажму Enter

Поскольку количество строк велико, то, как я использую, непрактично

Я пробовал следующее:

  • Скопируйте ячейки в Блокнот, а затем снова вставьте в Excel, но не сработало.
  • Заменен разделитель даты с «-» на «». а затем замените обратно на "-", как если бы разделитель даты был "." и заменен на "-", который обычно работает с датой по григорианскому календарю, преобразуя ее из текста в дату
  • Создан код VBA, применяющий код для выбранных ячеек для входа в ячейки и выхода из них для обновления, проверьте ниже:
Sub HijriDateEnforce()
  Dim cel As Range
  Dim selectedRange As Range
  Set selectedRange = Application.Selection
  For Each cel In selectedRange.Cells
    Selection.NumberFormat = "[$-1970000]B2dd/mm/yyyy;@"
    SendKeys "{F2}~"
  Next cel
End Sub

Но код по неизвестной причине, если количество строк очень велико, он останавливается через некоторое время, и мне нужно снова запустить его для оставшихся ячеек

2
Abdullah Bayounis 18 Ноя 2021 в 10:29
Можете рассказать, как выглядят ваши свидания? до и после?
 – 
Siddharth Rout
18 Ноя 2021 в 11:16
Это столбец с форматированием даты, выровненный по левой стороне ячейки в виде текста, и после ввода ячейки и последующего нажатия клавиши Enter он будет выровнен по правому краю в качестве даты. Надеюсь, мое объяснение понятно.
 – 
Abdullah Bayounis
18 Ноя 2021 в 11:29
Если вы имеете в виду даты в ячейках, они такие: 01-01-1444
 – 
Abdullah Bayounis
18 Ноя 2021 в 11:43

1 ответ

Лучший ответ

Ненавижу предлагать .Select, но то, что я предлагал ранее, не работает в вашем сценарии. Так что попробуй это

Код

Sub HijriDateEnforce()
    Dim acell As Range
    Dim selectedRange As Range
    
    Set selectedRange = Application.Selection
    selectedRange.NumberFormat = "[$-1970000]B2dd/mm/yyyy;@"
    
    For Each acell In selectedRange
        acell.Select
        Application.SendKeys "{F2}"
        Application.SendKeys "{ENTER}"
        DoEvents
    Next acell
End Sub

В действии

enter image description here

2
Siddharth Rout 18 Ноя 2021 в 13:15
Спасибо за ваш ответ, но, к сожалению, это все равно, что я должен вводить каждую ячейку, чтобы ячейка была отформатирована как дата хиджры
 – 
Abdullah Bayounis
18 Ноя 2021 в 11:04
Я обновил код, попробуйте сейчас.
 – 
Siddharth Rout
18 Ноя 2021 в 13:09
Код работает отлично и не останавливается до конца. Большое спасибо за ваше время.
 – 
Abdullah Bayounis
18 Ноя 2021 в 14:17
Вы знаете, как это сделать без VBA? поскольку файлы xlsm (файлы с поддержкой макросов) не допускаются из-за ИТ-отдела. политика
 – 
Abdullah Bayounis
18 Ноя 2021 в 14:20