Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[VBA EXCEL] - makro kopiujące -

dell1535 14 Lip 2015 21:26 972 5
  • #1 14 Lip 2015 21:26
    dell1535
    Poziom 8  

    Witam,

    Proszę o pomoc w rozwiązaniu problemu z makrem.

    W pliku Excel 2010, w "Arkusz1", w komórce A1 będą pojawiały się nazwy dnia tygodnia. Chciałbym, aby w zależności od tekstu jaki pojawi się w tej komórce, dane z tabeli umieszczonej w "Arkusz1" kopiowały się do wcześniej utworzonych, w tym samym pliku, arkuszy, nazwanych odpowiednimi dniami tygodnia, np.:
    "Arkusz1", komórka A1 = "Poniedziałek" - dane z tabeli kopiują sie do arkusza "Poniedziałek".
    Dane w tabeli zawierały będą tekst i liczby, jednak w każdej z kolumn będzie tylko jeden typ danych.

    Dziękuję za odpowiedź.

    0 5
  • #2 14 Lip 2015 21:35
    JRV
    Specjalista - VBA, Excel

    np.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #3 14 Lip 2015 21:43
    son91
    Poziom 9  

    Ogólnie tu jest kwestia poprawnego żonglowania Do while Cells(i,1) <> "" (czyli określenie ostatniego zapisanego wiersza) , warunku if i poprawności adresacji komórki przez liczbę( czyli dla celnego określenia użyj sformułowania Sheets("[nazwa_arkusza]").Cells([wiersz],[kolumna])

    Jeżeli dobrze zrozumiałem, to chcesz aby tam gdzie w arkuszu1 występował dany dzień tygodnia w wierszu(czyli np. poniedziałek), program kopiował cały wiersz do arkusza podpisanego poniedziałek. W takim wypadku poprawnym makrem byłoby coś w ten deseń(nie wiem jak z błędami syntaxu:

    Code:
    [syntax=vbscript]
    
    Dim i, c, d As Integer
    Dim dzien As String
    i = 1
    c = 1
    d = 1
    'określenie ilości komórek jeżeli w kolumnie 1 znajdują się dni tygodnia
    Do While Cells(i, 1).Text <> ""
          i = i + 1
    Loop
    'wyszukiwanie komórek z danym dniem:
    For c = 1 To i
         If Cells(i, 1).Text = "[dany dzien tygodnia]" Then
                Sheets("Arkusz1").Range(Cells(i, 1), Cells(i, [ostatnia kolumna])).Copy
                dzien = Sheets("Arkusz1").Cells(i, 1)
                Do While Sheets(dzien).Cells(d, 1) <> "" ' znalezienie pierwszego wolnego wiersza w arkuszu z dniem
                    d = d + 1
                Loop
                Sheets(dzien).Cells(d, 1).Paste

        End If
    Next c

    [/syntax]


    A na przyszłość radzę się zapoznać z zarejestruj makro w karcie deweloper. Daje dość dobre pojęcie o tym jak poszczególne funkcje działają...

    0
  • #4 15 Lip 2015 09:43
    dell1535
    Poziom 8  

    Dziękuję za odpowiedzi, ale... chodzi mi o to, żeby tekst (nazwa dnia tygodnia) występujący w komórce A1 "Arkusz1" determinował do jakiego, wcześniej utworzonego w tym samym skoroszycie arkusza, będą zapisywały się dane umieszczone w tabeli, np. B2:F20 "Arkusz1". Dlatego też, wydaje mi się, że bliższą rozwiązania mego problemu jest odpowiedź otrzymana od JRV. Jednak, jeżeli nagram makro.

    Range("Tabela1").Select
    Selection.Copy
    Sheets("Poniedziałek").Select
    Range("B2").Select
    ActiveSheet.Paste

    to działa, a jak, w trzeciej linijce kodu zmienię na, jak zaproponował JRV

    Range("Tabela1").Select
    Selection.Copy
    Sheets(Range("A1")).Select
    Range("B2").Select
    ActiveSheet.Paste

    to otrzymuję komunikat

    "Run-time error 13
    Type mismatch"

    Jak zrobić, żeby to działalo?

    0
  • Pomocny post
    #5 15 Lip 2015 09:57
    JRV
    Specjalista - VBA, Excel

    Jaky format w A1?
    Sprobuj Sheets(Range("A1").Text).Select

    1
  • #6 15 Lip 2015 10:08
    dell1535
    Poziom 8  

    Jest tak, jak oczekiwałem. Działa poprawnie.
    Dzięęęęęęęęęęęęęęękujęęęęęęę!!!!!!!!!!!!!!!!

    0