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

  tytuł wątku:
Wątki dyskusji

Makro zamieniające wybrany obszar na plik csv


otwartyotwarty rozpoczął: Marie postów: 13



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

  
nazwa pliku rozmiar
VBA - przyklad_do_scv.zip 20.99 kB

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

  
nazwa pliku rozmiar
VBA - przyklad_do_scv.zip 20.55 kB

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ł: admin
postów: 613


umieszczony:
19 lipca 2012
10:10

  
Cytat:

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.


Nic nie stoi na przeszkodzie, by bylo to zadanie domowe lub projekt. My tu lubimy pomagac
Zobacze co sie da zrobic
napisał: Marie
postów: 22


umieszczony:
19 lipca 2012
10:02

  
nazwa pliku rozmiar
VBA - przyklad_do_scv.xlsx 11.43 kB

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


Sortuj posty: z