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.

Makro Excel - dostęp do komórek po ich nazwach

03 Feb 2014 08:53 1656 8
  • Level 7  
    Witam
    Czy jest możliwy dostęp w vba do wartości komórki po ich nazwie
    przykład
    w arkuszu 1 komórki J7:N7 są scalone i mają nazwę - "status"
    Zadaniem makra jest skopiowanie wartości napisanej w tej komórce do innego arkusza
    można to zrobić tak:
    Cells(1,1) = wksz.Range("J7").Value
    wksz- zdefiniowane wcześniej jako arkusz1
    ale czy można się odwołać do nazwy status a nie do J7
    Cells(1,1) = wksz.Range(status).Value - tak niestety nie działa
    Pozdrawiam
  • Moderator of Programming
    Cudzysłowy zjadłeś... Range("status")
  • Level 7  
    jakos nadal nie działa
    pojawia się komunikat
    Application.defined or object-defined error

    Dodano po 7 [minuty]:

    Jeśli tak zrobię to faktycznie jest ok
    wksz.Activate
    MsgBox Range("status")

    Jeśli
    wksz.Range("status") to już błąd
    Ja chce kopiować komórki pomiędzy arkuszami wiec użyłem polecenia
    'Cells(NextRow, 1) = wksz.Range("status")
    gdzie cells jest poleceniem służącym do bieżącego aktywnego arkusza który nie w skoroszycie i wksz
  • Moderator of Programming
    pozek37 wrote:
    Ja chce kopiować komórki pomiędzy arkuszami
    Umieść kod w module (nie w kodzie arkusza)...
  • Level 7  
    Kod mam zapisany w module ( nie w arkuszu) tak wygląda (w skrócie)

    Sub Zapisz_Form()
    Application.ScreenUpdating = False
    Dim NextRow As Long

    fpath = ActiveWorkbook.Path
    fname = ActiveWorkbook.Name

    Workbooks.Open FileName:=fpath & "\Baza.xlsx"
    Set wksz = Workbooks(fname).Sheets("klient")
    Set wksdo = Application.Workbooks("Baza.xlsx").Sheets("Arkusz1")

    wksdo.Activate


    Cells(1,1) = wksz.Range("status")



    'zapisanie i zamkniecie skoroszytu baza
    wksdo.Activate
    ActiveWorkbook.Close SaveChanges:=True

    wksz.Activate
    Sheets("klient").Select
    Set wksz = Nothing
    Set wksdo = Nothing




    End Sub
  • VBA, Excel specialist
    Witam.
    wksz.Range("status") .copy Cells(1,1)
  • Level 7  
    zrobiłem tak bo to wksdo posiada arkusz do którego chce by zostawała wklejona wartość do pola status z aktywnego arkusza który na tą chwilę jest wksz

    Cells(1, 1).Copy wksdo.Range("status")

    Jednak wywala mi błąd że nie można tego zrobić dla scalonej komórki - pole status to komórki scalone h7-j7
    jak użyje ("H7:J7") zamiast ("status") to jest ok ale to nie o to mi chodziło
  • VBA, Excel specialist
    Dzień dobry,
    Z zakresami sklejonymi zawsze są problemy, lepiej tego unikać. Ale zawsze jakoś można sobie poradzić, czasem drogą okrężną.
    Ale ja już się trochę pogubiłem w tym Pana problemie: czy Pan chce kopiować z zakresu sklejonego do pojedynczej komórki czy odwrotnie z komórki do zakresu sklejonego?
    Poza tym ważne jest w jakiej kolejności Pan skleja i nadaje nazwę: jeśli Pan najpierw nada nazwę zakresowi komórek, a potem je sklei, to nazwa będzie przypisana do całego zakresu, ale jeżeli Pan najpierw sklei komórki, a potem nada nazwę, to nazwa będzie przypisana do lewej górnej komórki sklejonego zakresu.
  • Level 7  
    Kopiuje z pojedynczej komórki do zakresu scalonego który ma swoją nazwę.
    //wcześniej pomyliłem zmienne wksz,wksdo
    //status to nazwa scalonego zakresu
    //arkusz wksdo - jest aktywnym otwartym arkuszem


    fpath = ActiveWorkbook.Path
    fname = ActiveWorkbook.Name

    Workbooks.Open FileName:=fpath & "\Baza.xlsx"
    Set wksdo = Workbooks(fname).Sheets("Arkusz1")
    Set wksz = Application.Workbooks("Baza.xlsx").Sheets("Klienci")


    wksz.Activate
    Cells(1, 1).Copy wksdo.Range("status")

    Zrobiłem tak dlatego ze dane pobierane są z bazy danych do formularza i go wypełniają - gdzieniegdzie są scalone komórki z uwagi na swój wygląd. Scalone pola mają swoje nazwy by w przypadku zmian w formularzu (dodawanie nowych wierszy) nie poprawiać kodu

    Dodano po 10 [minuty]:

    Jednakże ten pomógł mi rozwiązać problem - zrobiłem testy na nazwach i zaczęło działać - w menadżerze nazw powprowadzałem zmiany odwołań - z pojedynczych komórek do scalonych zakresów (dziwne jest to że wcześniej nadawałem nazwy po scaleniu).

    Dodano po 38 [sekundy]:

    Dzięki za wsparcie