Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

VB EXCEL Automatyczne wstawianie koloru wypełnienia..

xmarlonx 05 May 2011 01:06 4820 7
  • #1
    xmarlonx
    Level 8  
    Witam!!!

    Od kilku dni zmagam się z problemem dotyczącym stworzenia marka w Excelu które po opcji wy filtrowaniu całego arkusza, zakres który wyjdzie zaznaczył mi na odpowiedni kolor (żółty). Oczywiście ilości wierszy oraz jego numeracja się zmienia. Tak mniej więcej wygląda na chwilę obecną wszystko działa oprócz wstawienia tła po wy filtrowaniu , bardzo proszę o pomoc.

    Columns("H:H").Select
    Range("H356").Activate
    Selection.Delete Shift:=xlToLeft

    Range("H11").Select

    ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-6],'Zamówienie Konsolidacyjne'!C[-7]:C[-6],1,0)"
    Selection.AutoFill Destination:=Range("H11:H503"), Type:=xlFillDefault
    Range("H11:H503").Select
    ActiveWindow.ScrollRow = 1
    Range("H10").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=8, Criteria1:=">0", Operator:=xlAnd

    With ActiveSheet


    .Range("H11").AutoFilter Field:=1, Criteria1:=">0"

    On Error Resume Next



    .Range("H11").CurrentRegion.Offset(1, 0).SpecialCells _
    (xlCellTypeVisible).With Selection
    .ColorIndex = 1000
    .Pattern = xlSolid

    If Err.Number <> 0 Then MsgBox "Brak danych"

    On Error GoTo 0

    .AutoFilterMode = False


    End With

    End Sub
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • #2
    marek003
    Level 40  
    wg mnie ten fragment:
    Code: vb
    Log in, to see the code


    napisał bym tak:

    Code: vb
    Log in, to see the code


    Ale to tak na szybko bo nie analizowałem "zasadności" całego kodu więc może nie działać, choć powinno :)

    Poza tym u mnie (Excel2003) indeks koloru z numerem 1000 doprowadza do błędu.
  • #3
    xmarlonx
    Level 8  
    Dziękuje za podpowiedź temat już ogarnięty :)



    Range("H11").CurrentRegion.Offset(1, 0).SpecialCells _
    (xlCellTypeVisible).EntireRow.Interior.ColorIndex = 6


    Tylko zastanawiam bo dałeś :

    Selection.Interior.ColorIndex = 6
    Selection.Interior.Pattern = xlSolid

    ciekawy jestem jaki był by tego efekt ewentualna różnica między tymi kodami, a boję się trochę sprawdzać żeby nie popsuć tego co zrobiłem ;P
  • #4
    bobo
    Level 29  
    xmarlonx wrote:


    ciekawy jestem jaki był by tego efekt ewentualna różnica między tymi kodami, a boję się trochę sprawdzać żeby nie popsuć tego co zrobiłem ;P

    A nie mozesz zapisac tego arkusza pod inną nazwą i wtedy sprawdzić?
    Pozdrówka
  • #5
    xmarlonx
    Level 8  
    Oczywiście że można ;)
  • #6
    marek003
    Level 40  
    xmarlonx wrote:
    ...
    Tylko zastanawiam bo dałeś :

    Selection.Interior.ColorIndex = 6
    Selection.Interior.Pattern = xlSolid

    ciekawy jestem jaki był by tego efekt ewentualna różnica między tymi kodami, a boję się trochę sprawdzać żeby nie popsuć tego co zrobiłem ;P


    Pisałem że nie sprawdzałem zasadności użycia takiej a nie innej metody wprowadzenia koloru.

    Dałeś swój przykład, a ja poprawiłem tylko tą cząstkę która była błędna jeżeli chodzi o kolor (zapewne pozostałość po nagraniu makra ale trochę źle wstawiona).

    Docelowo nie "dałem" tylko tych dwóch linii. Zmieniłem też "zakończenie" linii wcześniejszej na "select" czyli zaznacz.
    A potem żeby ustawił w zaznaczeniu kolor o indeksie 6 i parametr pattern na xlsolid (za sugestia twojego kodu)

    Możesz sprawdzić działanie kopiując "mój" fragment (trzy linijki kodu) pod "twoimi" nowymi dwoma linijkami kodu.
    Przy czym przed twoimi linijkami kodu postaw jeden apostrof '
    wtedy makro nie będzie czytać tej linijki/linijek kodu (makro potraktuje to jako opis)

    Później zrób odwrotnie. Przed moimi daj apostrof a przed twoimi usuń apostrof i tyle. Docelowo po sprawdzeniu możesz usunąć mój kod (pamiętając o tym by wykasować apostrofy przed liniami własnego kodu.
  • #7
    xmarlonx
    Level 8  
    Witam!!!

    Mam takie kod do zapisywania z automatu

    Range("G11").Select
    Dim x As Integer
    Dim Kopiowane As Variant

    Application.ScreenUpdating = False

    'Wyznacz arkusze do kopiowania
    Kopiowane = Array("Raport Dzienny")

    For x = LBound(Kopiowane) To UBound(Kopiowane)
    ThisWorkbook.Worksheets(CStr(Kopiowane(x))).Copy
    With ActiveWorkbook
    If Val(Application.Version) < 12 Then
    .SaveAs Filename:=ThisWorkbook.path & "\" & _
    CStr(Kopiowane(x)) & " " & VBA.Date & ".xls", FileFormat:=-4143
    Else
    .SaveAs Filename:=ThisWorkbook.path & "\" & _
    CStr(Kopiowane(x)) & " " & VBA.Date & ".xls", FileFormat:=56
    End If
    .Close SaveChanges:=False
    End With
    MsgBox "Raport został pomyślnie zapisany" (Tutaj chciałbym podać ścieżkę do tego raportu)
    Next x

    Application.ScreenUpdating = True


    End Sub

    Próbowałem go z edytować na moje potrzeby. Dokładnie chodzi mi o to żeby plik zapisywał mi się w konkretnym miejscu na dysku sieciowym (na chwilę obecną zapisuję się w folderze w którym znajduje się główny plik) Kolejną rzeczą jaką chciałbym zmienić to żeby w nazwie pliku była data -1 dzień oraz komunikat który wyskoczy na końcu pokazywał również ścieżkę dostępu do raportu. Ogólnie ten kod co mam chodzi bez zarzutów tylko wymaga małych modyfikacji.

    Czy jesteście w stanie mi pomóc??
    Pozdrawiam
  • #8
    marek003
    Level 40  
    Dalej nie wypowiem się nad całym kodem ale wskaże gdzie co zmienić.

    Ta część twojego kodu odpowiada za zapis:
    Code: vb
    Log in, to see the code


    ścieżka i nazwa pliku "kryją się" we fragmencie
    Code: vb
    Log in, to see the code


    Czyli jak chcesz własną ścieżkę zamień ThisWorkbook.path np. na "c:\moja_sciezka" (w cudzysłowach)

    zrób to w obu fragmentach dotyczących zależności zapisu od wersji excela.

    Aby data w nazwie pliku była mniejsza o jeden w powyższym ciągu zmień VBA.Date na VBA.Date - 1


    Jednak by nie pisać parę razy tego samego dodałbym przed warunkiem if zmienną "sciezka" i "nazwaplk" a później odwoływał bym sie do nich. Tak by to wyglądało:

    Code: vb
    Log in, to see the code



    Co do pokazania ścieżki w komunikacie
    do kodu:
    Code: vb
    Log in, to see the code

    dodał bym ścieżkę (oczywiście gdy jest wcześniej zdefiniowana zmienna), czyli
    Code: vb
    Log in, to see the code

    Na marginesie "Chr(10)" w powyższym kodzie powoduje to że ciąg znaków za nim pojawi się w drugiej linii.

    Możesz też do zmiennej sciezka dodawać zapis z którejś komórki arkusza. Wtedy przypisanie zmiennej wyglądało by np tak:
    Code: vb
    Log in, to see the code

    A w komórce A1 arkusza należy wpisać c:\moja_sciezka