Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 70542 Skopiuj do schowka Adresowanie numeru kolumny w bazie danych
Autor Wiadomość
wczesny 
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 34 razy
Posty: 302
Wysłany: 29-03-2021, 11:17   Adresowanie numeru kolumny w bazie danych

Cześć,

w przy wyszukiwaniu w bazach danych tworzonych w excelu, stosuję zawsze odwołanie to komórki na zasadzie:
Kod:

Cells(i, 2)

Problem pojawia się, jeżeli muszę dodać kolumnę w środek bazy danych, ponieważ muszę przepisać od nowa numery kolumn.
Zastanawiam się, czy nie zacząć stosować wyszukiwania wg nazwy kolumny.
np:
Kod:

Range("Tabela1[[#Headers],[Nazwa_kolumny]]").Column
'lub
Worksheets("Arkusz1").ListObjects("Tabela1").ListColumns("Nazwa_kolumny").Index

Jakie stosujecie podejście do tematu?
ID posta: 402898 Skopiuj do schowka
 
 
kuma 
Excel Expert


Wersja: Win Office 2010
Pomógł: 1453 razy
Posty: 4171
Wysłany: 29-03-2021, 11:46   

Może coś takiego.
Kod:
Worksheets("Arkusz1").ListObjects("Tabela1").ListColumns("Nazwa_kolumny").Range.EntireColumn.Insert
_________________
Pozdrawiam.
ID posta: 402901 Skopiuj do schowka
 
 
wczesny 
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 34 razy
Posty: 302
Wysłany: 29-03-2021, 12:26   

Problemem nie jest samo dodanie kolumny, ale przepisywanie kodu, bo kolumna która była np. 2 po wstawieniu jest 3.
Dlatego zastanawiam się nad odwołaniami wg. nazw nagłówków, ale chciałem zapytać, czy stosujecie jakieś inne rozwiązania.
ID posta: 402905 Skopiuj do schowka
 
 
kuma 
Excel Expert


Wersja: Win Office 2010
Pomógł: 1453 razy
Posty: 4171
Wysłany: 29-03-2021, 14:47   

Teraz nie mam dostępu do Excela, ale zrobiłbym to w ten sposób. Wyznaczyłbym nry kolumn sprzed dodania kol. w układzie po dodaniu (Application.Match, Filter) , następnie użyłbym Application.Index do wstawienia wartości. Działania na tablicach.
_________________
Pozdrawiam.
ID posta: 402918 Skopiuj do schowka
 
 
ąćęłńóś
Excel Expert


Pomógł: 327 razy
Posty: 1615
Wysłany: 29-03-2021, 19:58   

"Range.Find("Nazwa_etykiety").Column" ?

Poza tym można sql'em.
ID posta: 402934 Skopiuj do schowka
 
 
wczesny 
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 34 razy
Posty: 302
Wysłany: 30-03-2021, 08:13   

Dzięki za porady.

Wygląda na to, że wszystkie rozwiązania są podobne i tak samo pracochłonne.
Widać nie ma wyjścia, trzeba się narobić ;)
ID posta: 402941 Skopiuj do schowka
 
 
ąćęłńóś
Excel Expert


Pomógł: 327 razy
Posty: 1615
Wysłany: 30-03-2021, 18:24   

A co jest pracochłonnego w poniższym ?
Kod:
kolumna = Rows(1).Find("Nazwisko").Column

Chyba tylko to "o" występujące 4 razy ... :->
ID posta: 402985 Skopiuj do schowka
 
 
wczesny 
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 34 razy
Posty: 302
Wysłany: 30-03-2021, 22:01   

W sumie nic. Baza ma tylko 41 kolumn i miałem podpięte pod nią 3 procedury.
4 godziny kopiuj-wklej.
ID posta: 402991 Skopiuj do schowka
 
 
Tajan


Pomógł: 4767 razy
Posty: 10469
Wysłany: 30-03-2021, 23:35   

W takich przypadkach można zastosować typ wyliczeniowy, gdzie zdefiniujemy wartości odpowiadające numerom kolumn. Załóżmy, że nasza baza zaczyna się w kolumnie B i ma następujące pola: Lp. Imię, Nazwisko, Pesel więc definiujemy:
Kod:
Enum kol
LP = 2
Imie
Nazwisko
Pesel
End Enum
i wtedy odwołując się np. do wartości kol.Pesel otrzymamy liczbę 5:
Kod:
Cells(i, kol.Pesel)

W przypadku dodania kolumny zmieniamy tylko typ wyliczeniowy "kol":
Kod:
Enum kol
LP = 2
Imie
Nazwisko
Telefon
Pesel
End Enum

i bez zmiany reszty kodu wartość kol.Pesel będzie odpowiadać liczbie 6.
Oczywiście, najlepiej jest to zastosować już na etapie tworzenia kodu, przewidując takie zmiany struktury, bo później będzie to wymagać już nieco więcej wysiłku.
ID posta: 402997 Skopiuj do schowka
 
 
wczesny 
Stały bywalec Excelforum


Wersja: Win Office 2016
Pomógł: 34 razy
Posty: 302
Wysłany: 31-03-2021, 10:24   

Czytałem ostatnio o Enum i nie skojarzyłem, że można to tak zastosować.
Zastanawiałem się też nad stworzeniem nowej klasy, ale tutaj mam zerowe doświadczenie.
Rozumiem, że jeżeli zaczniemy od liczby np 2, to następne będą automatycznie numerowane 3,4,5 bez ręcznego przypisywania wartości?
ID posta: 403007 Skopiuj do schowka
 
 
Tajan


Pomógł: 4767 razy
Posty: 10469
Wysłany: 31-03-2021, 17:55   

wczesny napisał/a:
jeżeli zaczniemy od liczby np 2, to następne będą automatycznie numerowane 3,4,5 bez ręcznego przypisywania wartości?
Tak, dokładnie!
Przy czym, uzupełniając, ten typ można stosować również inaczej:
Kod:
Public Enum kolumna
LP = 2
Imie
Nazwisko
Pesel
End Enum

Sub Test()
Dim nrKol As kolumna
   nrKol = Pesel
   Cells(2, nrKol).Value = "12121212121"
End Sub
ID posta: 403038 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe