2015-12-02 2 views
0

У меня есть код, который создает листы с некоторыми форматами. У меня проблема с тем, что форматирование не работает должным образом (например, оно меняет цвет другого диапазона или не объединяет ячейки).Код работает правильно, нажимая F8 и не нажимая F5

Я думал, что, может быть, я сделал что-то не в порядке или что-то в этом роде, поэтому начал нажимать F8 от начала до самого конца. И, делая это, он сделал ровно лист, как я хотел.

Мой код довольно длинный, есть много субтитров внутри, поэтому я попытаюсь написать, как он работает и вставить важные части. Если этого не будет достаточно, я поставлю здесь остальную часть моего кода.

  • Он берет имя первого проекта из листа ResourcesProjects. Он хранится в переменной sResourcesProjectName (он работает правильно)
  • Затем он вызывает 3 подкаталога, которые создают 3 листа: ResourceSheet, DesignExecutionSheet и RisksSheet. Все эти субподрядчики имеют код для создания и форматирования созданного листа. Первый sub (ResourceSheet) работает правильно, форматирование точно так, как я хотел. Проблема заключается в подструкции DesignExecutionSheet и RisksSheet. Он не отформатирован хорошо, когда он переходит на F5.

    Private Sub DesignExecutionSheet() 
    
    Application.PrintCommunication = True 
    ' Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
    Application.EnableEvents = False 
    
    On Error Resume Next 
    
    bSheetFound = False 
    
    For Each wsSheet In ActiveWorkbook.Worksheets 
        wsSheet.Activate 
        sDesignSheetName = sResourcesProjectName & "_Design_Execution" 
    
        If wsSheet.Name = sDesignSheetName Then ' --- if that sheet already exists, then exit sub and go to next project 
         bSheetFound = True 
         Exit Sub 
        End If 
    
    Next wsSheet 
    
        Sheets.Add.Name = sResourcesProjectName & "_Design_Execution" 
        Sheets(sDesignSheetName).Activate 
    
    Cells.EntireColumn.Hidden = False 
    Cells.EntireRow.Hidden = False 
    
    Captions sResourcesProjectName & " Design & Execution", RGB(235, 241, 222) 
    
    Columns("C:C").ColumnWidth = 3 
    Columns("D:D").ColumnWidth = 25 
    Rows("8:8").RowHeight = 25 
    Rows("12:12").RowHeight = 25 
    Rows("17:17").RowHeight = 25 
    
    Range("C8:E8,C12:E12,C17:E17").Select 
    
    With Selection 
        .HorizontalAlignment = xlLeft 
        .VerticalAlignment = xlCenter 
        .WrapText = False 
        .Orientation = 0 
        .AddIndent = False 
        .IndentLevel = 0 
        .ShrinkToFit = False 
        .ReadingOrder = xlContext 
        .MergeCells = True 
    End With 
    Selection.Font.Bold = True 
    With Selection.Font 
        .Name = "Calibri" 
        .Size = 12 
        .Strikethrough = False 
        .Superscript = False 
        .Subscript = False 
        .OutlineFont = False 
        .Shadow = False 
        .Underline = xlUnderlineStyleNone 
        .Color = RGB(118, 147, 60) 
    End With 
    
    Range("C8:E8").FormulaR1C1 = "STATUS OF REQUIREMENTS" 
    Range("C12:E12").FormulaR1C1 = "TEST EXECUTION" 
    Range("C17:E17").FormulaR1C1 = "VIR/SCR" 
    
        Range("9:9,10:10,13:13,14:14,15:15,18:18,19:19,20:20").Select 
    Selection.RowHeight = 20 
    Range("C9:C10,C13:C15,C18:C20").Select 
    With Selection.Interior 
        .Pattern = xlSolid 
        .PatternColorIndex = xlAutomatic 
        .Color = RGB(235, 241, 222) 
    End With 
    Range("C9:E10,C13:E15,C18:E20").Select 
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone 
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone 
    With Selection.Borders(xlEdgeLeft) 
        .LineStyle = xlContinuous 
        .ThemeColor = 1 
        .TintAndShade = -0.349986266670736 
        .Weight = xlThin 
    End With 
    With Selection.Borders(xlEdgeTop) 
        .LineStyle = xlContinuous 
        .ThemeColor = 1 
        .TintAndShade = -0.349986266670736 
        .Weight = xlThin 
    End With 
    With Selection.Borders(xlEdgeBottom) 
        .LineStyle = xlContinuous 
        .ThemeColor = 1 
        .TintAndShade = -0.349986266670736 
        .Weight = xlThin 
    End With 
    With Selection.Borders(xlEdgeRight) 
        .LineStyle = xlContinuous 
        .ThemeColor = 1 
        .TintAndShade = -0.349986266670736 
        .Weight = xlThin 
    End With 
    Selection.Borders(xlInsideVertical).LineStyle = xlNone 
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone 
    Range("A6").Select 
    
    
    Range("D9:D10,D13:D15,D18:D20").Select 
    With Selection 
        .HorizontalAlignment = xlRight 
        .VerticalAlignment = xlCenter 
        .WrapText = False 
        .Orientation = 0 
        .AddIndent = False 
        .IndentLevel = 0 
        .ShrinkToFit = False 
        .ReadingOrder = xlContext 
        .MergeCells = False 
        .Font.Color = RGB(89, 89, 89) 
    End With 
    Selection.Font.Bold = True 
    
    Range("D9").Value = "ASSIGNED TO IT&V:" 
    Range("D10").Value = "COVERED BY IT&V:" 
    Range("D13").Value = "EXECUTED:" 
    Range("D14").Value = "PASSED:" 
    Range("D15").Value = "FAILED:" 
    Range("D18").Value = "OPEN:" 
    Range("D19").Value = "CLOSED:" 
    Range("D20").Value = "VERIFIED:" 
    
    Sheets(sDesignSheetName).Visible = xlSheetHidden 
    
    
    'Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
    Application.EnableEvents = True 
    
    End Sub 
    

с RisksSheet() есть аналогичная проблема, поэтому я не ставлю здесь код из этого подпункта.

  • После вызова этой подлодки, есть только это в коде:

    'Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
    Application.EnableEvents = True 
    
    End Sub 
    

EDIT:

Я отредактировал мой код, как Любош Сук предложил. Теперь проблема другая. При нажатии F8 это работает снова правильно, но нажатие клавиши F5 есть ошибка «приложение или объект определяется ошибка» в строке

With Sheets(sDesignSheetName).Range("C8:E8,C12:E12,C17:E17") 

Более того, эта ошибка не появляется, когда я поставил точку останова в основном в строке

Call DesignExecutionSheet 

и нажмите F5 дважды.

Я также выяснил, что, когда у меня нет нескольких диапазонов (например, только «C8: E8» вместо «C8: E8, C12: E12, C17: E17»), он также работает. Но у меня много диапазонов внутри, код будет очень длинным, если я делю все эти диапазоны.

Это мой код:

Private Sub DesignExecutionSheet() 

    Application.PrintCommunication = True 
    ' Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
    Application.EnableEvents = False 

    'On Error Resume Next 

     bSheetFound = False 

     For Each wsSheet In ActiveWorkbook.Worksheets 
      'wsSheet.Activate 
      sDesignSheetName = sResourcesProjectName & "_Design_Execution" 

      If wsSheet.Name = sDesignSheetName Then ' --- if that sheet already exists, then exit sub and go to next project 
       bSheetFound = True 
       Exit Sub 
      End If 

     Next wsSheet 

      Sheets.Add.Name = sResourcesProjectName & "_Design_Execution" 
      'Sheets(sDesignSheetName).Activate 

     With Sheets(sDesignSheetName) 

      .Cells.EntireColumn.Hidden = False 
      .Cells.EntireRow.Hidden = False 

      Captions sResourcesProjectName & " Design & Execution", RGB(235, 241, 222) 

      .Columns("C:C").ColumnWidth = 3 
      .Columns("D:D").ColumnWidth = 25 
      .Rows("8:8").RowHeight = 25 
      .Rows("12:12").RowHeight = 25 
      .Rows("17:17").RowHeight = 25 
     End With 


      With Sheets(sDesignSheetName).Range("C8:E8,C12:E12,C17:E17") 
       .HorizontalAlignment = xlLeft 
       .VerticalAlignment = xlCenter 
       .WrapText = False 
       .Orientation = 0 
       .AddIndent = False 
       .IndentLevel = 0 
       .ShrinkToFit = False 
       .ReadingOrder = xlContext 
       .MergeCells = True 
       .Font.Bold = True 
      End With 

      With Sheets(sDesignSheetName).Range("C8:E8,C12:E12,C17:E17").Font 
       .Name = "Calibri" 
       .Size = 12 
       .Strikethrough = False 
       .Superscript = False 
       .Subscript = False 
       .OutlineFont = False 
       .Shadow = False 
       .Underline = xlUnderlineStyleNone 
       .Color = RGB(118, 147, 60) 
      End With 

      Sheets(sDesignSheetName).Range("C8:E8").FormulaR1C1 = "STATUS OF REQUIREMENTS" 
      Sheets(sDesignSheetName).Range("C12:E12").FormulaR1C1 = "TEST EXECUTION" 
      Sheets(sDesignSheetName).Range("C17:E17").FormulaR1C1 = "VIR/SCR" 


      Sheets(sDesignSheetName).Range("9:9,10:10,13:13,14:14,15:15,18:18,19:19,20:20").RowHeight = 20 
      With Sheets(sDesignSheetName).Range("C9:C10,C13:C15,C18:C20").Interior 
       .Pattern = xlSolid 
       .PatternColorIndex = xlAutomatic 
       .Color = RGB(235, 241, 222) 
      End With 
      Sheets(sDesignSheetName).Range("C9:E10,C13:E15,C18:E20").Borders(xlDiagonalDown).LineStyle = xlNone 
      Sheets(sDesignSheetName).Range("C9:E10,C13:E15,C18:E20").Borders(xlDiagonalUp).LineStyle = xlNone 
      With Sheets(sDesignSheetName).Range("C9:E10,C13:E15,C18:E20").Borders(xlEdgeLeft) 
       .LineStyle = xlContinuous 
       .ThemeColor = 1 
       .TintAndShade = -0.349986266670736 
       .Weight = xlThin 
      End With 
      With Sheets(sDesignSheetName).Range("C9:E10,C13:E15,C18:E20").Borders(xlEdgeTop) 
       .LineStyle = xlContinuous 
       .ThemeColor = 1 
       .TintAndShade = -0.349986266670736 
       .Weight = xlThin 
      End With 
      With Sheets(sDesignSheetName).Range("C9:E10,C13:E15,C18:E20").Borders(xlEdgeBottom) 
       .LineStyle = xlContinuous 
       .ThemeColor = 1 
       .TintAndShade = -0.349986266670736 
       .Weight = xlThin 
      End With 
      With Sheets(sDesignSheetName).Range("C9:E10,C13:E15,C18:E20").Borders(xlEdgeRight) 
       .LineStyle = xlContinuous 
       .ThemeColor = 1 
       .TintAndShade = -0.349986266670736 
       .Weight = xlThin 
      End With 
      Sheets(sDesignSheetName).Range("C9:E10,C13:E15,C18:E20").Borders(xlInsideVertical).LineStyle = xlNone 
      Sheets(sDesignSheetName).Range("C9:E10,C13:E15,C18:E20").Borders(xlInsideHorizontal).LineStyle = xlNone 
      ' .Range("A6").Select 


      With Sheets(sDesignSheetName).Range("D9:D10,D13:D15,D18:D20") 
       .HorizontalAlignment = xlRight 
       .VerticalAlignment = xlCenter 
       .WrapText = False 
       .Orientation = 0 
       .AddIndent = False 
       .IndentLevel = 0 
       .ShrinkToFit = False 
       .ReadingOrder = xlContext 
       .MergeCells = False 
       .Font.Color = RGB(89, 89, 89) 
      End With 
      Sheets(sDesignSheetName).Range("D9:D10,D13:D15,D18:D20").Font.Bold = True 

      Sheets(sDesignSheetName).Range("D9").Value = "ASSIGNED TO IT&V:" 
      Sheets(sDesignSheetName).Range("D10").Value = "COVERED BY IT&V:" 
      Sheets(sDesignSheetName).Range("D13").Value = "EXECUTED:" 
      Sheets(sDesignSheetName).Range("D14").Value = "PASSED:" 
      Sheets(sDesignSheetName).Range("D15").Value = "FAILED:" 
      Sheets(sDesignSheetName).Range("D18").Value = "OPEN:" 
      Sheets(sDesignSheetName).Range("D19").Value = "CLOSED:" 
      Sheets(sDesignSheetName).Range("D20").Value = "VERIFIED:" 


    Sheets(sDesignSheetName).Visible = xlSheetHidden 


    'Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
    Application.EnableEvents = True 

    End Sub 
+0

Возможно, состояние гонки. Например. ваш код пытается что-то сделать, пока Excel все еще занят предыдущим запросом. –

+2

Это 'On Error Resume Next' действительно не помогает вам. Там есть много простых ошибок - например, попытка создать лист, который уже существует, и не указывать правильное имя листа. – Rory

+0

Хорошо, когда я редактировал свой код, появляется ошибка. Спасибо, что предложили. – GohanP

ответ

1

Так что ваша главная проблема будет здесь, где вы включите рабочий лист, а затем работать с ним.

For Each wsSheet In ActiveWorkbook.Worksheets 
    wsSheet.Activate 
    sDesignSheetName = sResourcesProjectName & "_Design_Execution" 

    If wsSheet.Name = sDesignSheetName Then ' --- if that sheet already exists, then exit sub and go to next project 
     bSheetFound = True 
     Exit Sub 
    End If 

Next wsSheet 

Предлагаю вам лучше использовать aproach в своем коде. Правильно объявляйте переменные и работайте с листами и ячейками, такими как относительные объекты, и AVOID .activate и.выберите

Вкратце термины используют что-то вроде этого. Этот подход гораздо более надежный и читаемый.

Sub doSomething() 

    Dim myCuteSheet As Worksheet 
    Set myCuteSheet = Sheets("pinkRidignSheet") 

    With myCuteSheet 
     .Range(.Cells(1,1),.Cells(5,5)) 'then do something with range 
     .Cells(15,20) 'do something with cell 
     .Columns ("F") 'do something with column 

    End With 

End Sub 
+0

Я отредактировал свой код, как вы предлагаете (теперь нет никаких .activate и .select), но возникла другая проблема. Я отредактировал свое первое сообщение с вопросом и описал его. – GohanP

Смежные вопросы