VBA - petla for nie sumej liczb spełniających warunek

Witam

Mam problem z dokończeniem zadania:

"Napisać makro, które wykonuje następujące czynności:

• zaznaczony prostokątny zakres komórek arkusza otacza obramowaniem w ulubionym kolorze autora

• wypełnia obszar kolejnymi liczbami nieparzystymi zaczynając od 9

• nadaje obszarowi nazwę wprowadzaną przez użytkownika w oknie dialogowym InputBox

• oblicza sumę liczb podzielnych przez 11 i wyświetla ją w oknie MsgBox

Przypisać makro do przycisku poleceń z paska narzędzi Formularze lub Przybornika formantów bądź do autokształtu.

moje makro :

Dim zakres As Range, suma As Long, i As Integer

suma = 0

Set zakres = Application.InputBox(“zaznacz zakres”, Type:=8)

i = 9

With zakres.Borders

.LineStyle = xlNone

.ColorIndex = 3

End With

For a = 1 To zakres.Rows.Count

For b = 1 To zakres.Columns.Count

zakres(a, b).Value = i

i = i + 2

Next b

Next a

For a = 1 To zakres.Rows.Count

For b = 1 To zakres.Columns.Count

c = 11

If zakres(a, b).Value Mod c = 0 Then

suma = suma + zakres(a, b).Value

End If

Next b

Next a

MsgBox "Suma liczb podzielnych przez 11 z zaznaczonego obszaru wynosi = " & suma

End Sub

jednak źle liczy mi sumę jakby nie dodawał wszystkich licz podzielnych przez 11 i nie mogę wiem dlaczego robi obramowanie na każdej komórce w podanym zakresie a nie tylko po bokach macie jakiś pomysł ?

primo102 , proszę poprawić tytuł tematu na konkretny, dokładniej mówiący o problemie.

Jesteś pewien, że dobrze zrozumiałeś treść zadania? Wydaje mi się, że zakres zaznaczonych komórek powinien być odczytywany w kodzie, a nie pobierany z InputBox.

Zakres komórek jest nieistotny to zawsze mogę zmienić.

Rozumiem. Rozwiązanie problemu z Border-ami może wyglądać następująco:

Set zakres = Application.InputBox("Zaznacz zakres: ", Type:=8)

zakres.Select

zakres.BorderAround xlContinuous, xlThin, 3

Jeśli chodzi o błędne obliczanie sumy to zobacz, czy pomoże, gdy zadeklarujesz (Dim c As Integer) zmienną c (aktualnie nigdzie tego nie robisz). I dwie uwagi z mojej strony. Zacznij stosować wcięcia w kodzie i sumę obliczaj już w tej pierwszej podwójnej pętli, gdzie wstawiasz liczby do poszczególnych komórek. – Dodane 29.06.2011 (Śr) 18:25

Dim zakres As Range

Dim nazwa As String

Dim suma As Long

Dim i, a, b As Integer


Set zakres = Application.InputBox("Zaznacz zakres: ", Type:=8)

nazwa = Application.InputBox("Podaj nazwe zakresu: ", Type:=2)


zakres.Name = nazwa

zakres.Select

zakres.BorderAround xlContinuous, xlThin, 3


suma = 0

i = 9

For a = 1 To zakres.Rows.Count

    For b = 1 To zakres.Columns.Count

        zakres(a, b).Value = i

        If zakres(a, b).Value Mod 11 = 0 Then suma = suma + zakres(a, b).Value

        i = i + 2

    Next b

Next a


MsgBox "Suma liczb podzielnych przez 11 z zaznaczonego obszaru wynosi " & suma