Применение одинакового кода Excel-VBA на всех активных листах - PullRequest
0 голосов
/ 11 июля 2019

Требуется помощь в применении приведенного ниже кода для всех листов.Я попробовал код, который я нашел в Интернете, который является ApplyToAllSheets (), но я все еще новичок, и я не знаю, как я могу заставить его работать.Пожалуйста, помогите.

Sub ApplyToAllSheets()

    Dim wks As Worksheet
    For Each wks In ThisWorkbook.Worksheets
        Third wks
    Next

End Sub

Sub Third(wks As Worksheet)
Dim Rng As Range
Dim cell As Range
Dim ContainWord As String
    With wks
        Set Rng = .Range(.Range("B1"), .Range("B" & .Rows.Count).End(xlUp))
    End With

'For deleting the remaining informations not necessary
  Set Rng = Range("B1:B1000")
  ContainWord = "-"
  For Each cell In Rng.Cells
    If cell.Find(ContainWord) Is Nothing Then cell.Clear
  Next cell
  Set Rng = Range("C1:C1000")
  ContainWord = "2019" 'change to current year
  For Each cell In Rng.Cells
    If cell.Find(ContainWord) Is Nothing Then cell.Clear
  Next cell
  Set Rng = Range("A1:A1000")
  ContainWord = "-"
  For Each cell In Rng.Cells
    If cell.Find(ContainWord) Is Nothing Then cell.Clear
  Next cell

'For deleting the blanks
On Error Resume Next
ActiveSheet.Range("B:B").SpecialCells(xlBlanks).EntireRow.Delete
    On Error GoTo 0

'For shifting the date to the left
Columns("C").Cut
Columns("A").Insert Shift:=xlToLeft
Columns("C").Cut
Columns("B").Insert

'For deleting the negative sign "-"
With Columns("B:B")
    .Replace What:="-", Replacement:=""
End With

End Sub

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

1 Ответ

2 голосов
/ 11 июля 2019

Вы получили неквалификацию - то есть Worksheet не квалифицированы - Range и Columns вызовы.

Это хорошо - запишите период перед каждым экземпляром Range, как и раньше Rows.

With wks
    Set Rng = .Range(.Range("B1"), .Range("B" & .Rows.Count).End(xlUp))
End With

Это, не так уж много:

Set Rng = Range("B1:B1000") ' no worksheet specified, so it's the ActiveSheet, not wks.

Или еще раз:

Columns("C").Cut

Переместить это первым End With до конца до конца Sub и добавьте точку перед каждым экземпляром Range и Columns.При этом они будут ссылаться на wks и не означать ActiveSheet.

Пока вы это делаете, измените этот экземпляр ActiveSheet на wks.Вы хотите работать с wks, а не с ActiveSheet.

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