VBA не выбирает правильный лист - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь вставить нули для пустых ячеек в диапазон другого листа с помощью кнопки (= Tabelle Nullen + Pivots aktualisieren). Но вместо выбора правильного рабочего листа VBA вставляет нули в тот же рабочий лист, где находится кнопка. Может кто-нибудь объяснить, в чем причина и как я могу ее решить?

Заранее спасибо!

    Option Explicit

Dim Zelle As Range

  'NULL Werte bei Spalten US bis AA suchen und durch 0 ersetzen
    With Sheets("Tabelle")
  For Each Zelle In Range("K2:O" & Cells(Rows.Count, "O").End(xlUp).Row)
    If Trim(Zelle.Value) = "" Then Zelle.Value = "0"

    Next

   End With

   'Alle Pivot-Tabellen aktualisieren


    With Sheets("PivotHaendlerMonat").PivotTables("PivotHaendlerMonat").PivotCache.Refresh
       End With
       With Sheets("Pivot_AnfragenMonat").PivotTables("PivotHaendlerRequestMonat").PivotCache.Refresh
       End With

    MsgBox ("Alle Tabellen fertig aktualisiert!")

    End Sub

You can see how the 0s are insert in this worksheet. But should be in

Ответы [ 2 ]

2 голосов
/ 29 января 2020

У вас правильно есть оператор With перед вашим кодом, но вы не используете его правильно. При использовании оператора with это стандартный префикс, когда используется пустой .. Рассмотрим этот пример, если у вас есть два листа, а sheet1 - ваш активный лист:

With Sheet2
    Range("A1").Value = "2"
End With

будет публиковать на листе 1. Тогда как

With Sheet2
    .Range("A1").Value = "2"
End With

Будет исправлять сообщение на листе 2.

Ваш правильный код:

    With Sheets("Tabelle")
        For Each Zelle In .Range("K2:O" & .Cells(.Rows.Count, "O").End(xlUp).Row)
    If Trim(Zelle.Value) = "" Then Zelle.Value = "0"
2 голосов
/ 29 января 2020

При использовании оператора With необходимо добавить префикс (например, Range) указанного объекта к ., в противном случае по умолчанию он будет ActiveWorksheet.

With Sheets("Tabelle")
  For Each Zelle In .Range("K2:O" & .Cells(Rows.Count, "O").End(xlUp).Row)
    If Trim(Zelle.Value) = "" Then Zelle.Value = "0"
  Next Zelle
End With
* 1007. * Кроме того, два пустых оператора With в конце вашего кода являются избыточными - вы, вероятно, хотели использовать:
Sheets("PivotHaendlerMonat").PivotTables("PivotHaendlerMonat").PivotCache.Refresh
Sheets("Pivot_AnfragenMonat").PivotTables("PivotHaendlerRequestMonat").PivotCache.Refresh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...