vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest wtorek, 30 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Kopiowanie danych z różnych plików .xls do jednego arkusza


otwartyotwarty rozpoczął: ese postów: 6



napisał: Trebor
postów: 1209


umieszczony:
19 czerwca 2012
16:44

edytowany:
19 czerwca 2012
16:44

  
Łączniki & służą do sklejania dwóch ciągów tekstowych. Np. gdy napiszesz 2 & 2 otrzymasz 22. Gdy napiszesz 2 + 2 otrzymasz cztery. Można użyć plusa do łączenia np ala + kota, ale jest to raczej niewskazane.

Otwórz skoroszyt zapisany na dysku i drugi, może być nowy. W tym nowym wpisz znak = i kliknij komórkę w tym zapisanym na dysku. Zamknij skoroszyt zapisany na dysku i obejrzyj formułę która powstała. Będzie to coś w rodzaju "='C:\Documents and Settings\Admin\Pulpit\kalendarze\[Grafik_Absencja.xls]Arkusz2'!$A$1". Teraz ze wszystkich sił spróbuj zmusić kod VBA, aby taki ciąg wpisał do komórki. Czy można inaczej? pewnie tak, ale tak jest najprościej.
napisał: ese
postów: 3


umieszczony:
19 czerwca 2012
10:09

edytowany:
19 czerwca 2012
10:14

  
Witam ponownie.
Mam pytanie co do jednego makra:

Option Explicit
Public Sub WpiszDane()
Dim sciezka As String
Dim Kolumna As Range
Dim Komorka As Range
Dim Gdzie As String
Dim JakiKatalog As String
Dim JakiPlik As String
Dim JakiArkusz As String
Dim JakaKomorka
Dim Wartosc
Dim i As Integer

sciezka = ("d:\spolki")
 
JakiKatalog = sciezka
i = 0
For Each Kolumna In Range("B1:Z1")
 If Kolumna.Value <> "" Then
    i = i + 1
    JakiArkusz = Kolumna.Value
    JakaKomorka = Kolumna.Offset(1, 0).Value
        For Each Komorka In Range("a3:a1000")
            If Komorka.Value <> "" Then
               JakiPlik = Komorka.Value
               Gdzie = "'" & JakiKatalog & "\" & "[" & JakiPlik & "]" & JakiArkusz & "'!" & JakaKomorka
               Wartosc = "=" & Gdzie
               Komorka.Offset(0, i).Value = Wartosc
            End If
         Next Komorka
  End If
Next Kolumna
End Sub



Nie jest to makro mojej roboty, ale działa dokładnie tak jak chce. Chciałbym tylko zrozumieć niektóre części kodu, a mianowicie
Gdzie = "'" & JakiKatalog & "\" & "[" & JakiPlik & "]" & JakiArkusz & "'!" & JakaKomorka
Wartosc = "=" & Gdzie



Jak działają te łączniki &, co oznacza "=" oraz "!". Ta linijka wstawia mi wartość konkretnej komórki z innego skoroszytu, ale czy równie dobrze mógłbym napisać coś w stylu
komorka.value=d:\spolki\skoroszyt1 & arkusz1 & A1
napisał: Trebor
postów: 1209


umieszczony:
1 czerwca 2012
18:22

  
Z zipami to będzie dodatkowy kłopot - trzeba będzie je rozpakować. Rozglądnij się np. tu: http://www.rondebruin.nl/windowsxpunzip.htm
Linia którą wskazałeś wstawia łącze do komórki w określonym pliku i arkuszu. Dla Ciebie raczej nieprzydatna.
napisał: ese
postów: 3


umieszczony:
1 czerwca 2012
10:12

edytowany:
1 czerwca 2012
14:41

  
Dzięki wielkie, troche to pomogło.
Pierwsza procedura robi wlasnie to, czego potrzebowalem, choziaz za nazwa dodaje mi rozszerzenie .zip, ale z tym dam sobie rade.

Co do drugiej, to chodzi o to, ze mam jeden folder (spółki), w ktorym jest 800 innych skompresowanych folderow, i kazdy skompresowany folder zawiera jeden skoroszyt, np.:

D:\spolki\KGHM\KGHM.xls
D:\spolki\Police\Police.xls.

I teraz kolejne makro mialoby za zadanie wyszukiwac konkretna daną w kazdym ze skoroszytów, czyli na chlopski rozum - otworzyc folder KGHM, zaladowac skoroszyt KGHM.xls, skopiowac konkretną daną, zamknąc skoroszyt KGHM.xls, wkleic skopiowana daną do skoroszytu "zbiorowka" i tak dalej z kazda spolka. Z tego co sie orientuje, to Excel nie musi fizycznie otwierac kazdego skoroszytu, by zdobyc konkretną daną, ale nie wiem jak napisac procedure, która by skakala miedzy tymi folderami.


Przygode z VBA zaczalem nie dawno, w miare mozliwosci, prosze o wyrozumialosc i cierpliwosc.
Pozdrawiam.

EDIT:
Przyznam szczerze, ze nie rozumiem tej linijki w drugim makrze:

Cells(j, 2) = "='" & dukt & Cells(j, 1) & "\[" & Dir(dukt & Cells(j, 1) & "\*.xl*") & "]" & "Arkusz1'!A1"

Jak narazie, u mnie to wyglada tak:

Sub dane()
Dim i As Integer

i = Application.WorksheetFunction.CountA(Range("a:a"))

For j = 1 To i
    Cells(j, 2) = ???
Next j
End Sub

napisał: Trebor
postów: 1209


umieszczony:
31 maja 2012
16:53

edytowany:
31 maja 2012
16:53

  
Ponieważ nie wiem czy dobrze zrozumiałem Twój problem, zamieszczam dwie procedury dość uproszczone pod względem logicznym. Daje to jednak pogląd jak ja bym to widział
Sub foldery()
Dim katalog As String, i As Integer, sciezka As String
sciezka = "C:\Documents and Settings\Admin\Pulpit\"
i = i + 1
Cells(i, 1) = sciezka
katalog = Dir(sciezka, vbDirectory)
Do
If katalog = "" Then Exit Do

If katalog <> "." And katalog <> ".." Then
    i = i + 1
        Cells(i, 1) = katalog
            End If
katalog = Dir
Loop

dane i, sciezka
End Sub

Sub dane(ile As Integer, dukt)
Dim j As Integer
On Error Resume Next
For j = 2 To ile
Cells(j, 2) = "='" & dukt & Cells(j, 1) & "\[" & Dir(dukt & Cells(j, 1) & "\*.xl*") & "]" & "Arkusz1'!A1"
Next j
On Error GoTo 0
End Sub

napisał: ese
postów: 3


umieszczony:
31 maja 2012
15:51

  
Witam serdecznie!

Wiem, ze temat byl/jest/bedzie walkowany wiele razy, jednak pomimo poszukiwan, nie udalo mi sie znalesc rozwiazania. Moja sytuacja wyglada tak:

Mam kilkaset skoroszytow stworzonych wedlug tego samego standardu, kazdy skoroszyt na dodatek jest w osobnym folderze o tej samej nazwie, co ów skoroszyt. Chciałbym w całkiem nowym skoroszycie zbiorczym umieścic wybrane dane z tych wszystkich skoroszytów. Najchętniej bym stworzył makro, które będzie aktualizowało nazwy tych skoroszytów (na wypadek, gdyby pojawił się nowy plik, lub inny został usunięty), oraz inne makro, które obok ich nazw umieszczałoby konkrtne dane, tak by później łatwo można było stworzyć jakąś tabelę przestawną.

Próbowałem wykorzystać makro zawarte tutaj: http://mojezmaganiainformatyczne.blox.pl/2010/09/Odczyt-listy-plikow-z-katalogu.html, jednak z miernym skutkiem.


Jakieś wskazówki?




Z góry dziękuję.


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z