Не переносить одно с помощью / end with, в другое с / end with - PullRequest
0 голосов
/ 27 мая 2020

Элегантный код и вопрос о читабельности кода

Это мой код, и он отлично работает.

В начале документов Word, которые мне нужно обработать, указан номер контракта и дата, которые мне нужно извлечь и записать в соответствующие ячейки электронной таблицы.

Мой вопрос относится к частям кода, в которых один с оператором / end with заключен в другой с оператором / end with. 3-й и 4-й абзацы кода, где я ищу выражения подстановочных знаков.

Sub ExtractRepertorNmbrUsingWildcards()   
Application.ScreenUpdating = False        

    Dim wordApp As Word.Application
    Dim wordDoc As Word.Document
    Dim excelApp As Excel.Application
    Dim rng As Word.Range
    Dim kompar As Word.Range
    Dim ws As Worksheet
    Dim regEx As Object
    Dim matches As Collection
    Dim match As Variant
    Dim repNmbr As String
    Dim cesja As Range
    Dim startPos As Long
    Dim endPos As Long

   'Assigning object variables
    Set wordApp = GetObject(, "Word.Application")
    Set excelApp = GetObject(, "Excel.Application") 
    Set wordDoc = wordApp.ActiveDocument
    Set ws = excelApp.ActiveSheet
    Set rng = wordApp.ActiveDocument.Content
    Set matches = New Collection
    Set cesja = ActiveSheet.Range("A10:J50").Find("cesja /", , xlValues)
    Debug.Print cesja.Address

    With wordApp.ActiveDocument.Range
         With .Find
             .Text = "<[0-9 ]{1;7}/[0-9]{4}>"       'contract number
             .MatchWildcards = True
             .Wrap = wdFindStop
             .Forward = True
             .Execute
         End With
      If .Find.Found = True Then matches.Add Replace(.Text, " ", "")   'macro is adding it to the collection
      Debug.Print "# of items is"; matches.Count
    End With

    With wordApp.ActiveDocument.Range
         With .Find
             .Text = "<[0-9]{2}.[0-9]{2}.[0-9]{4}r."     'date
             .MatchWildcards = True
             .Wrap = wdFindStop
             .Forward = True
             .Execute
         End With
      If .Find.Found = True Then matches.Add .Text     'macro is adding it to the same collection as above on the next free record
      Debug.Print "# of items is"; matches.Count
    End With

    For Each match In matches
      Debug.Print match
    Next match

Я не понимаю, почему в этой части кода (а также в следующем абзаце кода):

  With wordApp.ActiveDocument.Range
         With .Find
             .Text = "<[0-9 ]{1;7}/[0-9]{4}>"       'contract number
             .MatchWildcards = True
             .Wrap = wdFindStop
             .Forward = True
             .Execute
         End With
      If .Find.Found = True Then matches.Add Replace(.Text, " ", "")
      Debug.Print "# of items is"; matches.Count
  End With

один оператор with / end with, завернут в другой.

Как должна быть написана эта часть кода, чтобы избежать ненужного обертывания / двойного с / end with оператора. Я спрашиваю, как профессиональный программист мог бы написать его?

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

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