ID tematu: 70542
 |
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:
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
|
|
|
 |
|
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
ąćęłńóś
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
ąćęłńóś
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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:
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
|
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
|
 |
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
|