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
|
|