VBA - multiple range - zaznaczanie wielu obszarów

Odpowiedz Nowy wątek
2018-12-01 22:07
0

Cześć.

Mam w excelu ponad 100 stron z zamówieniami.
Na każdej stronie znajduje się komórka, w której wpisana jest wartość "1" (drukuj) lub "0" (nie drukuj).
Chcę stworzyć makro, które zaznaczy mi wszystkie strony z "1-ką" (czasem będzie to 10 a czasem 100 stron)

W tej chwili napisałem makro, które zaznacza stronę, ale przy każdej iteracji poprzednie zaznaczenie znika i pojawia się tylko bieżące.
W jaki sposób można zrobić, żeby te zaznaczenia się "dodawały"? Chciałbym, aby po wykonaniu pętli for zostały zaznaczone wszystkie komórki, a nie tylko z ostatniego zamówienia.

Próbowałem się jeszcze bawić z funkcją drukowania, ale:

  • excel wysyła informację o wydruku każdej strony (co długo trwa, każda strona musi się przetworzyć)
  • jest problem z wyborem podajnika z drukarki (drukuję to z tacy ręcznej na formacie A6)
    Więc pomyślałem, że lepiej będzie napisać makro, które zaznaczy mi wszystkie strony, które chcę wydrukować i później ręcznie użyję polecenia DRUKUJ.

Mój obecny kod, który "umie" zaznaczyć tylko ostatnie zamówienie:

Sub Makro2()
'
' Makro2 Makro
'

Dim i As Integer

For i = 1 To 505 Step 18
    If Cells(i, 4).Value > 0 Then
        ActiveSheet.Range(Cells(i, 1), Cells(i + 17, 4)).Select

    End If

Next i

End Sub
edytowany 1x, ostatnio: Windyelemental, 2018-12-01 22:09

Pozostało 580 znaków

2018-12-02 23:40
0
Sub Makro2()
'
' Makro2 Makro
'

Dim i As Integer
Dim s As String

For i = 1 To 505 Step 18
    If Cells(i, 4).Value > 0 Then

if Len(s)>0 Then s = s & ","
s = s & Range(Cells(i, 1), Cells(i + 17, 4)).Address

    End If

Next i

ActiveSheet.Range(s).Select

End Sub

Pozostało 580 znaków

2018-12-03 08:32
0

Działa! :)
Dziękuję bardzo.

Zamówienia idą w dół, ale idą też w prawą stronę (kolumny od A do P).
Chciałem rozszerzyć to makro i napisałem zapętloną pętlę For, ale wyskakuje błąd: Run-time error: 1004

Dim i, j As Integer
Dim s As String

For j = 1 To 13 Step 4
    For i = 1 To 505 Step 18
        If Cells(i, j).Value > 0 Then

            If Len(s) > 0 Then s = s & ","
            s = s & Range(Cells(i, j), Cells(i + 17, j + 3)).Address

        End If

    Next i
Next j

ActiveSheet.Range(s).Select

Pozostało 580 znaków

2018-12-03 12:54
0
Sub Makro2()
Dim i As Integer, j As Integer
Dim s As String

On Error GoTo Er

10: For j = 1 To 13 Step 4
20:     For i = 1 To 505 Step 18
30:        If Cells(i, j).Value > 0 Then
40:
50:            If Len(s) > 0 Then s = s & ","
60:            s = s & Range(Cells(i, j), Cells(i + 17, j + 3)).Address
70:
80:        End If
90:
100:    Next i
110: Next j

120: ActiveSheet.Range(s).Select

130: Exit Sub
Er:
    MsgBox "Błąd nr: " & Err.Number & " (" & Err.Description & ") w linii: " & Erl

End Sub

U mnie działa.
Podaj to, co otrzymasz w komunikacie (najważniejszy jest numer linii)

Pozostało 580 znaków

2018-12-03 13:14
0

Błąd nr: 1004 (Application-defined or object-defined error) w linii: 120

Mam oryginalny pakiet Office Small Business 2007 (jeśli to ma jakieś znaczenie).

Pozostało 580 znaków

2018-12-03 13:57
0

Zamień Msg na to:

MsgBox "Błąd nr: " & Err.Number & " (" & Err.Description & ") w linii: " & Erl & " [s="& s & "]"

i wklej wynik

Pozostało 580 znaków

2018-12-03 15:00
0

Błąd nr: 1004 (Application-defined or object-defined error) w linii: 120
[s=]

Pozostało 580 znaków

2018-12-03 16:09
0

No i wszystko jasne...s jest puste, temu się wywala. Znaczy się nie znalazł niczego, co by warunki spełniło...
A ten błąd możesz obejść tak:

115: IF len(s)>0 Then
120: ActiveSheet.Range(s).Select
125: End if

Pozostało 580 znaków

2018-12-04 07:40
0

Nie chcę straszyć, ale dalej wyskakuje ten sam błąd z tą różnicą, że "s" zawiera teraz wszystkie zakresy, które ma zaznaczyć. :(

To wklej mi s na PW - Marcin.Miga 2018-12-04 08:57

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0