VBA;Ошибка выполнения 1004, не могу определить эту переменную? - PullRequest
0 голосов
/ 04 декабря 2018

Я только что присоединился здесь.Поскольку я довольно новый топ-программист на VBA или программировании в целом, я смотрю почти все.Но я не могу найти проблему с моим кодом здесь ... так что я получил листы за каждый месяц в Excel (индекс 4, 6-16 (индекс 5 - страница данных, я все испортил)), и яхотите удалить содержимое ячеек на каждой странице.я пытаюсь сделать это следующим образом:

'x is defined earlier
Dim mon As Integer
For mon = 6 To 16

    With Worksheets(mon)
        .Range("H6:I37").ClearContents
        .Range("Y6:Z37").ClearContents
        .Range("P42") = 0
    End With


   For x = 6 To 37

    If IsError(Cells(x, 16)) Then
            Cells(x, 16).ClearContents
        Else
    End If

    If IsEmpty(Cells(x, 1)) Then
            Cells(x, 16).ClearContents
        Else
    End If

Next x

Next mon

Но в:

For mon = 6 To 16

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

//edit1

Итак, я добавил массив:

Dim monarray
monarray = Array(Januar, Februar, März, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember)

(названия месяцев на немецком языке)

, так что ... Я на самом деле не знаю, как использовать это сейчас !?Я просто знаю, что это может быть проще

// edit 2

Я получил массив, пытаясь выяснить, как использовать индекс массива (0-11) в цикле for.на этом этапе я думаю, что могу сделать это самостоятельно, я буду обновлять его, если не буду.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Хорошо, я понял.Проблема заключалась в переменной «mon», но не в самой переменной, а в названии страниц, поскольку VBA, похоже, не работает с «ä, ö, ü» (UTF.8?). Я только что нашел обходной путь для переименования этих букв.на "ае, ое, уе", то это работает нормально.Спасибо за помощь с «Array», это было очень полезно!

0 голосов
/ 04 декабря 2018

Вы уверены в индексах рабочих листов?Я попробовал ваш код без

With Worksheets(mon)
    .Range("H6:I37").ClearContents
    .Range("Y6:Z37").ClearContents
    .Range("P42") = 0
End With

, и он работал без ошибок ..

И индексы рабочих листов не равны числам после слова Sheet в Project Explorer

...