napisał: Marie postów: 22
umieszczony: 23 lipca 2012 12:11
|
|
Super, faktycznie to tutaj było... Jeszcze nie jestem w tym biegła - dlatego dziękuję jeszcze raz za pomoc.
Baaardzo dziękuję |
|
napisał: admin postów: 613
umieszczony: 23 lipca 2012 11:53
|
|
Hej,
Wystarczy zmienic tylko jedna procedure, reszta kodu, ktory Ci wyslalem pozostaje bez zmian.
Sub Main_DANE()
'Musimy okreslic, gdzie zaczynaja sie dane, dlatego H15!
Const sStart As String = "H15"
Dim sStopCol As String, sStopRow As String
Dim oWKS As Worksheet
'Tylko tu trzeba zmienic:
Set oWKS = Sheets("Dane do załadowania")
'Okreslamy ostatni wiersz gdzie wystepuja dane
sStopRow = GetStopRow(oWKS, sStart)
'Okreslamy ostatnia kolumne gdzie wystepuja dane
sStopCol = GetStopCol(oWKS, sStart)
'Wywolujemy procedure, ktora tworzy plik CSV (Comma-Separated Values or Chatacter-Separated Values)
CreateCSV oWKS, "A1", sStopRow, sStopCol
Set oWKS = Nothing
End Sub |
|
napisał: Marie postów: 22
umieszczony: 23 lipca 2012 11:41
|
|
A jak zrobić, by to działało dla konkretnego arkusza a nie dla bieżącego.
Czyli na przykład chciałabym by przycisk do tworzenia csv był w arkuszu X ale działał na arkusz o nazwie na przykład "Dane do załadowania"
Tak nie działa, więc prośba ponownie o pomoc:
Option Explicit
Set a1 = Sheets("Dane do załadowania")
Function GetStopRow(oWKS As a1, sStart As String) As String
Dim sStop As String
sStop = sStart
'W petli sprawdzamy poszczegolne wiersze, az wystapi zero
Do While oWKS.Range(sStart).Value <> 0
'bierzemy nastepny wiersz
sStart = oWKS.Range(sStart).Offset(1, 0).Address(False, False)
If oWKS.Range(sStart).Value <> "" Then sStop = sStart
Loop
GetStopRow = sStop
End Function
Function GetStopCol(oWKS As a1, sStart As String) As String
Dim sStop As String
sStop = sStart
'W petli sprawdzamy poszczegolne kolumny, az wystapi ciąg ""
Do While oWKS.Range(sStart).Value <> ""
'bierzemy nastepna kolumne
sStart = oWKS.Range(sStart).Offset(0, 1).Address(False, False)
If oWKS.Range(sStart).Value <> 0 Then sStop = sStart
Loop
GetStopCol = sStop
End Function
Function GetFileName(sWBK As a1) As String
Dim sPath As String
Dim sName As String
Dim sFileName As String
Dim i As Long
'odczytujemy sciezke pliku Excela
sPath = sWBK.Path
'odczytujemy nazwe pliku Excela
sName = sWBK.Name
'Usuwamy rozszerzenie pliku Excela xls, xlsx, xlsm...
'Rozszerzenie moze byc trzy- albo czteroliterowe,
'szukamy wiec ostatniej kropki w nazwie pliku i obcinamy
If InStr(sName, ".") > 0 Then
sName = Mid(sName, 1, InStrRev(sName, ".") - 1)
End If
i = 1
sFileName = Format(Now(), "YYYY_MM_DD") & "_" & sName & "_(" & i & ").csv"
'W petlki sprawdzamy, czy plik z biezacym numerem istnieje
'Jesli tak, zwiekszamy numer o jeden
Do While Dir(sPath & "\" & sFileName) <> ""
i = i + 1
sFileName = Format(Now(), "YYYY_MM_DD") & "_" & sName & "_(" & i & ").csv"
Loop
GetFileName = sPath & "\" & sFileName
End Function
Sub CreateCSV(oWKS As Worksheet, sStart As String, sStopRow As String, sStopCol As String)
Dim c As Long, w As Long
Dim strPath As String, sZnak As String, sLinia As String
Dim lngFF As Long
'Wywolujemy funkcje okreslajaca nazwe pliku
strPath = GetFileName(oWKS.Parent)
'pobieramy numer pliku
lngFF = FreeFile()
'Tworzymy plik CSV
Open strPath For Output As lngFF
'W petli odczytujemy dane z pliku Excela
For w = oWKS.Range(sStart).Row To oWKS.Range(sStopRow).Row
sLinia = ""
'W petli odczytujemy dane z poszczegolnych kolumn dla danego wiersza (zmienna w)
For c = oWKS.Range(sStart).Column To oWKS.Range(sStopCol).Column
If c < oWKS.Range(sStopCol).Column Then sZnak = ";" Else sZnak = ""
sLinia = sLinia & oWKS.Cells(w, c).Value & sZnak
Next c
'zapisujemy biezaca linie do pliku CSV
Print #lngFF, sLinia
Next w
'zamykamy plik CSV
Close lngFF
End Sub
Sub Main_DANE()
'Musimy okreslic, gdzie zaczynaja sie dane, dlatego H15!
Const sStart As String = "H15"
Dim sStopCol As String, sStopRow As String
Dim oWKS As Worksheet
Set oWKS = ActiveSheet
'Okreslamy ostatni wiersz gdzie wystepuja dane
sStopRow = GetStopRow(oWKS, sStart)
'Okreslamy ostatnia kolumne gdzie wystepuja dane
sStopCol = GetStopCol(oWKS, sStart)
'Wywolujemy procedure, ktora tworzy plik CSV (Comma-Separated Values or Chatacter-Separated Values)
CreateCSV oWKS, "A1", sStopRow, sStopCol
Set oWKS = Nothing
End Sub |
|
napisał: Marie postów: 22
umieszczony: 23 lipca 2012 10:50
|
|
Jupi - dałam radę - działa wszystko jak trzeba.
Przepraszam za zamieszanie... |
|
napisał: Marie postów: 22
umieszczony: 23 lipca 2012 10:38
|
|
Hm...
Chciałam przypisać to makro do innego arkusza w innym skoroszycie nazwanego inaczej niż stansardowo i nie działa (zapisuje pusty plik), nie bardzo wiem czemu... |
|
napisał: Marie postów: 22
umieszczony: 23 lipca 2012 10:03
|
|
Super. Działa tak jak miało działać. I dzięki za komentarze, teraz wiem co gdzie jest robione.
Nawet nie wiesz jak bardzo mi pomogłeś.
Jeśli chodzi o średniki to faktycznie - w takim razie nieważne.
Jeszcze raz dziękuję - to forum i strona są świetne : ) |
|
napisał: admin postów: 613
umieszczony: 23 lipca 2012 09:48
|
|
Cytat:
1. Zapisując plik jako csv on zapisuje tylko wielkości C7:I17, a czy jest możliwość, by plik zawierał wartości od A1 do I17 czyli łącznie z głównym wierszem A, gdzie będą się zmieniały różne wartości oraz tytułami kolumn i wierszy dla tej tabelki?
Zrobione. W arkuszu wystepuje naglowki kolumn i wierszy - troche mnie to zmylilo.
Cytat:
2. Oraz (tego nie wiem czy tu istnieje różnica) - w opisie tego pliku jest napisane, że jest to plik oddzielony przecinkami, czy można zrobić by był oddzielony środnikiem? I najważniejsze czy to jest jakaś różnica, bo do tej pory miałam wszystkie tego typu pliki oddzielone średnikami?
jak otworzysz plik CSV w notatniku, to zobaczysz, ze jest oddzielony srednikami, nie przecinkami. Nie rozumiem...
Cytat:
3. Zapisując nową wersję z tego samego dnia od nadpisuje plik już istniejący nad tamtem - czyli docelowo istnieje tylko
"2012_07_23_VBA - przyklad_do_scv.".
A ja bym chciała, żebym jak zopisuję ten sam plik tego samego dnia nazywał go kolejnymi numerami czyli:
"2012_07_23_VBA - przyklad_do_scv_2"
"2012_07_23_VBA - przyklad_do_scv_3"
Zrobione. W sumie bylo to poprzenio tez zrobione, tylko byl maly blad, ktory w czasie testowania nie mial wplywu i makro dzialalo:)
Komentarze rowniez dodane.
pozdrawiam
admin |
|
napisał: Marie postów: 22
umieszczony: 23 lipca 2012 09:16
|
|
A i poza tym czy mogę mieć prośbę o chociaż krótkie komentarze do napisanego makra?
Chodzi mi o krótkie komentarze do napisanego kodu... |
|
napisał: Marie postów: 22
umieszczony: 23 lipca 2012 09:02
|
|
Witam,
Super - dziękuję.
Pod istniejący przycik przypisałam makro, więc jest ok. Poza tym wiem, że dla pliku z makrami musi być rozszerzenie xlsm, jednakże wcześniej makr nie zawierał, więc zapisałam go w normalnym formacie : ) ale dziękuję.
Jednakże mam pytanie - wątpliwość, w sumie to chyba trzy.
1. Zapisując plik jako csv on zapisuje tylko wielkości C7:I17, a czy jest możliwość, by plik zawierał wartości od A1 do I17 czyli łącznie z głównym wierszem A, gdzie będą się zmieniały różne wartości oraz tytułami kolumn i wierszy dla tej tabelki?
2. Oraz (tego nie wiem czy tu istnieje różnica) - w opisie tego pliku jest napisane, że jest to plik oddzielony przecinkami, czy można zrobić by był oddzielony środnikiem? I najważniejsze czy to jest jakaś różnica, bo do tej pory miałam wszystkie tego typu pliki oddzielone średnikami?
3. Zapisując nową wersję z tego samego dnia od nadpisuje plik już istniejący nad tamtem - czyli docelowo istnieje tylko
"2012_07_23_VBA - przyklad_do_scv.".
A ja bym chciała, żebym jak zopisuję ten sam plik tego samego dnia nazywał go kolejnymi numerami czyli:
"2012_07_23_VBA - przyklad_do_scv_2"
"2012_07_23_VBA - przyklad_do_scv_3"
Z góry dziękuję za pomoc (jeszcze raz : ) ) |
|
napisał: admin postów: 613
umieszczony: 23 lipca 2012 08:24
|
|
Witam,
Makro w zalaczniku.
Jedna tylko uwaga, Excel 2007 jak i zapewne Excel 2010 w pliku z rozszerzeniem xlsx nie pozwalaja na przechowywanie makr.
Do tego sluza pliki z rozszerzeniem xlsm.
pozdrawiam
admin
Cytat:Z góry dziękuję. Napisałam tak dlatego, że lubię wyzwania i nowe rzeczy, a nie migam się od zadań i prac. Ale tutaj na prawdę nie wiem jak to ugryźć, dlatego zrwóciłam się o pomoc, gdyż juz kilka razy bardzo mi pomogli ludzie na forum : ) |
|
napisał: Marie postów: 22
umieszczony: 19 lipca 2012 10:15
|
|
Z góry dziękuję. Napisałam tak dlatego, że lubię wyzwania i nowe rzeczy, a nie migam się od zadań i prac. Ale tutaj na prawdę nie wiem jak to ugryźć, dlatego zrwóciłam się o pomoc, gdyż juz kilka razy bardzo mi pomogli ludzie na forum : ) |
|
napisał: Marie postów: 22
umieszczony: 19 lipca 2012 10:02
|
|
Witam.
Nie bardzo wiem jak do tego się zabrać, gdyż nie jestem biegła w vba.
Dlatego też dołączyłam plik z danymi.
Chciałabym, by makro zapisywało pewien obszar jako plik csv.
Od komórki A1. Do w kolumnie do momentu gdy nie napotka "0", a w wierszy dopóki nie napotka pustego wiersza.
Czyli w zamieszczonym przykładzie byłby to obszarar A1:I17.
W sumie nie wiem nawet jak się do tego zabrać, stąd moja prośba o pomoc.
Jak potrzeba jeszcze jakiś informacji to odpowiem na dodatkowe pytania.
Aha - nie wiem czy to istotne, ale napiszę, że dane powinny zostać oddzielone średnikiem.
A nazwa pliku powinna być mniej więce coś takiego: YYYY_MM_DD_ <nazwa oryginalna pliku>_<nr kolejny jeżeli plik już istnieje>
Nie wiem też jak zaznaczyć konkterne miejsce do zapisu tego pliku (chciałabym by plik csv znajdował się w tym samym katalogu co otwierany Excel).
Przepraszam i dziękuję z góry za pomoc. Od razu napiszę, że nie jest to ani zadanie domowe, ani nic na zaliczenie, tylko coś co chciałam zrobić sama dla siebie na własne potrzeby. |
|
wstecz 1 dalej wszystkich stron: 1
|
|