У меня есть функция, позволяющая получать только имена тех файлов, которые мне нужны, на основе их расширений.
def get_files(extensions):
all_files = []
for ext in extensions:
all_files.extend(Path('/Users/mrh/Python/calls').glob(ext))
for file in get_files(('*.wav', '*.xml')):
print (file.name)
Теперь мне нужно выяснить, как проверить каждый файл «file.name» для строки даты в его имени файла. то есть теперь мне нужно выполнить что-то вроде
if name.startswith('eerasedd_'):
fileDate = datetime.strptime(name[9:17], DATEFMT).date()
else:
fileDate = datetime.strptime(name[0:8], DATEFMT).date()
для «file.name», чтобы увидеть, не старше ли файлы 180 дней.
Чтобы сделать это вручную, нажмите клавишу F5 для перевода в рабочее состояние диалогового окна GoTo. Нажмите кнопку Special Cells. На следующем экране выберите Формулы (это - опция справа).
Excel выберет все ячейки то соответствие. Теперь это - просто вопрос применения форматирования.
Excel имеет созданный в функции "Зависимых Трассировки" (который показывает стрелки, чтобы показать Вам расчетные ячейки),
Выберите диапазон, содержащий Ваши данные.
Excel 2007-> Формулы-> Зависимые Трассировки
Я собираюсь предположить, что Вы только говорите о формулах ячейки, а не вычислениях VBA здесь, так как Вы могли установить цвет ячейки в своей процедуре VBA при выполнении его тот путь.
Способ сделать это должно проверить ячейку на формулу после того, как Вы сделаны с ним, и изменение, это - цвет в той точке. Соответствующее событие здесь является Изменением, и свойство HasFormula ячейки скажет Вам, является ли ячейка литеральным значением, или вычисленный от формулы:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.HasFormula Then Target.Interior.Color = vbRed Else ' remove background colour entirely (i.e. No Fill) Target.Interior.ColorIndex = xlColorIndexNone End If End Sub
Код ниже должен циклически повториться через каждый лист, выделяя каждый ячейки, который запускается с '=' и окрашивает его требуемым цветом (в настоящее время окрашивают 36, который является Светло-желтым).
Sub HighLightFormulas()
Dim objSheet As Worksheet
Dim strOriginalSheet As String
Dim intMaxBlankCells As Integer
Dim intBlankColumns As Integer
Dim intBlankRows As Integer
Dim intCurrentColumn As Integer
Dim intCurrentRow As Long
intMaxBlankCells = 40
strOriginalSheet = ActiveSheet.Name
For Each objSheet In Worksheets
intBlankRows = 0
intCurrentRow = 1
intCurrentColumn = 1
Do While intCurrentRow <= 65536 And intBlankRows <= intMaxBlankCells
intBlankColumns = 0
intCurrentColumn = 1
Do While intCurrentColumn <= 256 And intBlankColumns <= intMaxBlankCells
If Left(objSheet.Cells(intCurrentRow, intCurrentColumn).Formula, 1) = '=' Then
objSheet.Cells(intCurrentRow, intCurrentColumn).Interior.ColorIndex = 36
End If
intCurrentColumn = intCurrentColumn + 1
Loop
If intCurrentColumn = intBlankColumns Then
intBlankRows = intBlankRows + 1
Else
intBlankRows = 0
End If
intCurrentRow = intCurrentRow + 1
Loop
Next objSheet
Worksheets(strOriginalSheet).Activate
Call MsgBox("The Highlighting process has completed", vbOKOnly, "Process Complete")
Конец Sub
Это также остановится после 40 последовательных пустых ячеек (чтобы не обрабатывать весь главным образом пустой лист).
Надеюсь, это поможет.
Можно использовать Внутреннюю часть. Свойство ColorIndex для изменения цвета фона активной ячейки:
ActiveCell.Interior.ColorIndex = 36
Можно также применить его к диапазону:
Range("A1:A5").Interior.Color = RGB(200,160,35)
Это относится к Excel 2003, я не использовал последнюю версию, но я сомневаюсь, что это изменилось.
Можно обычно записывать макрос и затем смотреть на сгенерированный код, чтобы видеть, как что-то сделано.
Мне здесь понравился код Крейга, потому что он сохраняет макет существующего рабочего листа и в то же время показывает, что вычисляется, а что нет "с первого взгляда", но я его немного переработал, так что он лучше справляется с проработкой активной области листов, и я добавил подпрограмму "UnhighlightFormulas", чтобы можно было легко отменить форматирование (например, перед печатью). Она была протестирована в Excel 2007. Обратите внимание, что при запуске этой подпрограммы вы потеряете любую другую окраску фона ячейки.
Option Explicit
Public Sub HighlightFormulas()
ColorFormulas (36) '36 is yellow
End Sub
Public Sub UnhighlightFormulas()
ColorFormulas (-4142) '-4142 is default
End Sub
Private Sub ColorFormulas(intColor As Integer)
Dim wshSheet As Worksheet
Dim rngRange As Range
Dim rngCell As Range
For Each wshSheet In Worksheets
Set rngRange = RangeInUse(wshSheet)
If Not rngRange Is Nothing Then
For Each rngCell In rngRange
If Left(rngCell.Formula, 1) = "=" Then
If rngCell.Interior.ColorIndex <> intColor Then rngCell.Interior.ColorIndex = intColor
Else
If rngCell.Interior.ColorIndex <> -4142 Then rngCell.Interior.ColorIndex = -4142 '-4142 is default
End If
Next
End If
Next
End Sub
Private Function RangeInUse(ws As Worksheet) As Range
Dim LastRow&, LastCol%
' adapted from http://www.beyondtechnology.com/geeks012.shtml
' Error-handling in case there is no data in worksheet
On Error Resume Next
With ws
LastRow& = .Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
LastCol% = .Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
End With
Set RangeInUse = ws.Range("A1", Cells(LastRow&, LastCol%))
End Function