napisał: tomaszG postów: 10
umieszczony: 25 marca 2012 20:39
|
|
uruchomiłem i w domu działa genialnie - z kodu mało co rozumię niestety. mam natomiast małe obawy o sprzęt w pracy u mnie otwarcie okna w excelu trwa niekiedy 2 min (jak mam odpalonych kilka aplikacji to masakra) zauważyłem, że kopiowanie odbywa się przy pomocy otwierania i zamykania kolejnych plików - mam nadzieję że nie zawiesi mi systemu. juto próba
tym czasem serdeczne dzięki |
|
napisał: admin postów: 613
umieszczony: 22 marca 2012 22:35
|
|
W załączeniu moja propozycja rozwiązania.
Nie jest ona idealna, bo:
1. Zrobiona na szybko,
2. Dane w pliku źródłowym nie są poprawnie sformatowane - proszę zobaczyć kolumnę "B". Excel dane w niej oznacza jako "Liczba przechowywana jako tekst"
3. Działa na sztywno zdefiniowanej ilości kolumn (27). Można to oczywiście dopracować.
Dopracować całkiem łatwo można jeszcze automatyczne zapisywanie pliku wynikowego w odpowiedniej lokalizacji,
Powodzenia!
pozdrawiam
admin |
|
napisał: tomaszG postów: 10
umieszczony: 22 marca 2012 20:23
|
|
w załączeniu przykładowy plik
podobnych plików jest od kilku do kilkunastu w określonym folderze -różnią się wartościami i ilościami wierszy
i chcę zrobić z nich jeden zbiorczy arkusz - jedna tabela pod drugą z zachowaniem kolorów wypełnienia kolumny "F"
do tej pory robiono to w ten sposób, że otwierano nowy arkusz a potem po kolei każdy z poszczególnych plików i akcja "kopiuj/wklej"
ale głównie na chwilę obecną nurtuje mnie problem jak zrobić żeby funkcja getvalue lub inna zwracała wartości + kolor wypełnienia dla kolumny "F" |
|
napisał: admin postów: 613
umieszczony: 22 marca 2012 20:09
|
|
To już coś...
Ale ten opis jest daleko niewystarczający... Na załączonym pliku nic nie widać. Jeżeli chcesz dostać rozwiązanie musisz napisać jakie dane, z jakich kolumn z obydwu arkuszy chcesz scalić. Musisz też napisać jakie elementy formatowania (nie: "wszystkie", tylko konkretnie jakie!) należy przenieść. Opis musi być bardzo dokładny, inaczej nie wiadomo co należy zrobić. Ważna jest informacja jak są ułożone dane w arkuszu.
pozdrawiam
admin
Pliki Excela z przykładowymi danymi były też mile widziane
Cytat:w załączeniu podstawowy przykład o co mi chodzi ... kilka plików z podobnymi tabelami (2 screeny) kopiowane do jednego zbiorczego
niepotrzebne wiersze i elementy makro samo usunie (to nie jest problem)
generalnie ma być zachowany format tabel umieszczanych jedna pod drugą, łącznie z kolorami użytymi w jednej z kolumn
najprościej : chcę scalić zawartość wszystkich plików xls zawartych w jednym katalogu do jednego arkusza |
|
napisał: tomaszG postów: 10
umieszczony: 22 marca 2012 19:05
edytowany: 22 marca 2012 19:59
|
|
w załączeniu podstawowy przykład o co mi chodzi ... kilka plików z podobnymi tabelami (2 screeny) kopiowane do jednego zbiorczego
niepotrzebne wiersze i elementy makro samo usunie (to nie jest problem)
generalnie ma być zachowany format tabel umieszczanych jedna pod drugą, łącznie z kolorami użytymi w jednej z kolumn
najprościej : chcę scalić zawartość wszystkich plików xls zawartych w jednym katalogu do jednego arkusza |
|
napisał: tomaszG postów: 10
umieszczony: 22 marca 2012 18:48
|
|
To w odniesieniu do pkt 1.
jak w takim razie określić zmienną/e dla pobieranej komórki (lub zakresu/tablicy) aby przeniesiona w miejsce docelowe zachowała pierwotny format - głównie kolor wypełnienia
jeśli można to proszę na podstawie zamieszczonego wcześniej kodu |
|
napisał: admin postów: 613
umieszczony: 22 marca 2012 09:19
|
|
Cytat: Dwa kolejne pytania :
1. czy getvalue ma możliwość zwrócenia poza daną wartoscią również formatu komórki (np kolor wypełnienia)
2. czy istnieje inny sposób by scalić kilka plików w jeden (bez ich otwierania) - każdy zawiera podobne tabele z różnymi ilościami wierszy, bo może źle się zabieram do tematu
wygląda to tak, że cyklicznie otrzymuję dane w postaci arkusza z tabelą, w której wcześniej zaznaczono koszty 2 różnych działów - odrębnymi kolorami
getvalue ładnie przepisuje do jednego arkusza tabele z plików umieszczonych w określonym folderze, ale do dalszej analizy potrzebne mi są właśnie kolory, bo makro na ich podstawie podzieli zsumuje dane itd...
1. Format komorki musisz zapisac w zmiennych, osobne zmienne potrzebujesz dla pogrubienia, kroju czcionki, wielkosci czcionki, kolorow tla i czcionki...
2. Music otworzyc pliki zeby je przerobic. (Choc istnieje inny sposob, poprzez DAO, ale.. NIE ROB TEGO!
Opisz dokladnie problem, zalacz przykladowe pliki i napisz co chcesz z nich uzyskac. |
|
napisał: tomaszG postów: 10
umieszczony: 21 marca 2012 20:14
|
|
Dwa kolejne pytania :
1. czy getvalue ma możliwość zwrócenia poza daną wartoscią również formatu komórki (np kolor wypełnienia)
2. czy istnieje inny sposób by scalić kilka plików w jeden (bez ich otwierania) - każdy zawiera podobne tabele z różnymi ilościami wierszy, bo może źle się zabieram do tematu
wygląda to tak, że cyklicznie otrzymuję dane w postaci arkusza z tabelą, w której wcześniej zaznaczono koszty 2 różnych działów - odrębnymi kolorami
getvalue ładnie przepisuje do jednego arkusza tabele z plików umieszczonych w określonym folderze, ale do dalszej analizy potrzebne mi są właśnie kolory, bo makro na ich podstawie podzieli zsumuje dane itd... |
|
napisał: tomaszG postów: 10
umieszczony: 11 marca 2012 21:48
|
|
dzięki - pomogło, poskładałem z moim kodem zapętliłem i poszedłem krok dalej .... jak będą kolejne problemy, których nie zdołam znaleźć w sieci dam znak . pozdrawiam |
|
napisał: Trebor postów: 1209
umieszczony: 11 marca 2012 18:05
|
|
Sprawdź sposób (lekko przerobione makro Tajana) na wyciągnięcie nazwy arkusza:
Function GetWorkbookSchema(sciezka)
Dim cnt As Object
Dim cat As Object
Set cnt = CreateObject("ADODB.Connection")
Set cat = CreateObject("ADOX.Catalog")
With cnt
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sciezka & _
";Extended Properties=""Excel 8.0;HDR=Yes;"""
.Open
End With
cat.ActiveConnection = cnt
GetWorkbookSchema = Replace(cat.Tables(0).Name, "'", "")
GetWorkbookSchema = Left(GetWorkbookSchema, Len(GetWorkbookSchema) - 1)
cnt.Close
Set cnt = Nothing
Set cat = Nothing
End Function
Sub nazwa_arkusz()
MsgBox GetWorkbookSchema("C:\Documents and Settings\Admin\Pulpit\Excel\ado.xls")
End Sub
Korzystając z powyższego można by od razu wyciągnąć dane, ale GetValue też dobre. |
|
napisał: tomaszG postów: 10
umieszczony: 11 marca 2012 17:40
|
|
wykorzystałem kod znaleziony w sieci
Private Function GetValue(path, file, sheet, ref) As Variant
' GetValue(p,f,s,r)
' p - scieżka
' f - plik
' s - zakładka
' ref - komórka np ."A3"
Dim arg As String
Dim nRow, nCol
Dim nRowCount, nColCount
Dim nActRow, nActCol
Dim ArrVal() As Variant
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
'brak pliku ...
GetValue = CVErr(2042)
Exit Function
End If
nRow = Range(ref).Row
nCol = Range(ref).Column
nRowCount = Range(ref).Rows.Count
nColCount = Range(ref).Columns.Count
ReDim ArrVal(1 To nRowCount, 1 To nColCount)
For nActRow = 1 To nRowCount
For nActCol = 1 To nColCount
arg = "'" & path & _
"[" & file & "]" & _
sheet & "'!" & _
"R" & nRow + nActRow - 1 & _
"C" & nCol + nActCol - 1
ArrVal(nActRow, nActCol) = ExecuteExcel4Macro(arg)
Next
Next
GetValue = ArrVal
End Function
pliki umieszczone w jednym katalogu, każdy z nich zawiera jeden arkusz, ale nazwy arkuszy nie są identyczne
(najpierw tworzę tablice nazw plików, a potem w pętli zasysam potrzebne dane z każdego z nich), no niestety bez umieszczenia właściwej nawy arkuszy dla poszczególnych plików nic chyba z tego nie będzie |
|
napisał: Trebor postów: 1209
umieszczony: 11 marca 2012 16:04
|
|
Czy pliki z których chcesz pobierać dane mają tylko jeden arkusz?
Jeśli arkuszy jest więcej to jak rozróżnić, w którym są potrzebne dane?
Podaj na forum akładnię funkcji GetValue, której używasz. |
|
napisał: tomaszG postów: 10
umieszczony: 11 marca 2012 12:55
|
|
witam
tworze właśnie makro (w zasadzie modyfikuję inne swoje) i napotkałem problem z pobieraniem danych przy pomocy funkcji getvalue
w wielkim skrócie makro ma pobierać dane z kliku (kilkunastu) plików xls i kopiować do jednego zbiorczego (w innym zastosowaniu wspaniale sie ta metoda sprawdzała, gdyż wszystkie pliki miały 1 arkusz o identycznej nazwie, którą "na sztywno" wpisałem w kod makra
obecnie okazało się, że pliki posiadają arkusz o różniących się nazwach i funkcja getvalue w efekcie zwraca błąd #ARG! (co zrozumiałe)
moje pytanie : czy jest metoda aby wydobyć nazwy arkusza dla poszczególnych plików (bez ich otwierania oczywiście) |
|
wstecz 1 dalej wszystkich stron: 1
|
|