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

  tytuł wątku:
Wątki dyskusji

Pobieranie daty lub daty i nazwy do arkusza


otwartyotwarty rozpoczął: wojpen postów: 24



napisał: wojpen
postów: 23


umieszczony:
19 lutego 2009
21:28

  
Witam i raz jeszcze dzięki,
Z plikami csv będę miał problem - okazuje się, że pliki eksportowane z aplikacji sprzedaży są za każdym razem w innej stronie kodowej - i to w zupełnie przypadkowej kolejności. Myślę, że stąd te problemy z "" - raz one są a raz ich nie ma i to w całym pliku.
Ciekawa sprawa.
Pozdrawiam i dziękuję
napisał: Trebor
postów: 1209


umieszczony:
19 lutego 2009
16:24

  
Coś w rodzaju:
Dim dukt As String
dukt = "C:\Documents and Settings\Admin\Pulpit\"
ActiveWorkbook.SaveAs Filename:=dukt & Range("F2").Value & ".xlsm"



W komórce F2 nie może być znaków typu / :
napisał: wojpen
postów: 23


umieszczony:
19 lutego 2009
16:04

  
Wielkie dzięki Trebor
Dalej sam już podziałam
Ale na koniec mam jeszcze pytanie:
Jak wykorzystując informację z komórki F2 dowolnego arkusza zapisać cały skoroszyt pod nazwą
zbiorczy "parametr".xls w lokalizacji C:\Archiwum\Magazyny ?
Próbuję za pomocą formuły "ActiveWorkbook.SaveAs" - ale nie bardzo wiem jak w miejscu "parametr" umieścić wartość komórki F2 (chodzi o to, aby za miesiąc nie wklepywać ręcznie, tylko zapisać automatem kopię skoroszytu
Dzięki raz jeszcze
pozdrawiam
napisał: Trebor
postów: 1209


umieszczony:
19 lutego 2009
13:29

  
Sądzę, że jeśli ustalisz jaki jest stosowany separator w pliku oryginalnym (nie przepisywanym na pulpit) to makro zadziała.
Sub wstaw()

Dim wiersz1 As String, wiersz, dane(1 To 10000, 1 To 16), i As Integer, TxtFileNames, Fnum As Long
Dim licznik As Long, ostatnia As Long, separator As String
'deklaracja dane w ciemno
            TxtFileNames = Application.GetOpenFilename _
            (filefilter:="Pliki csv (*.csv), *.csv", MultiSelect:=True)
            If IsArray(TxtFileNames) Then


For Fnum = LBound(TxtFileNames) To UBound(TxtFileNames)

Open TxtFileNames(Fnum) For Input As #1 'otwórz plik do odczytu
Do While Not EOF(1) 'czytaj plik aż dojdziesz do końca
    Line Input #1, wiersz1 'wczytaj wiersz do zmiennej wiersz1
    If separator = "" Then 'ustal jaki jest separator
        If InStr(1, wiersz1, ";") > 0 Then
            separator = ";"
                ElseIf InStr(1, wiersz1, ",") > 0 Then
                    separator = ","
                        Else
                            separator = vbTab
                                End If
                                    End If
wiersz = Split(wiersz1, separator) 'zapisz wiersz do tablicy rozdzielając dane separatorem
If InStr(1, UCase(wiersz(0)), "TOWARIDX") = 0 Then ' jeśli pierwszy element talicy ma TOWARIDX to opuść taki wiersz
licznik = licznik + 1 ' zmień licznik o jeden
'dane dla pierwszych 6 kolumn w wierszu licznik
dane(licznik, 1) = wiersz(1)
dane(licznik, 2) = wiersz(2)
dane(licznik, 3) = wiersz(4)
dane(licznik, 4) = "BrakDanych" 'tu wpisz swoją formułę wyszukującą
dane(licznik, 5) = Left(Dir(TxtFileNames(Fnum)), InStr(1, Dir(TxtFileNames(Fnum)), ".") - 1)
dane(licznik, 6) = DataU(TxtFileNames(Fnum)) 'przekaż dane do funkcji
'Pozostałe dane dla tego samego wiersza
For i = 7 To UBound(wiersz) + 2
dane(licznik, i) = wiersz(i - 2)
Next i
'koniec danych
End If
Loop ' następny wiersz
Close #1
separator = ""
Next Fnum 'następny plik
ostatnia = Cells.Find(What:="*", After:=Cells(1, 1), _
               SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'zapisz dane do skoroszytu
Range("A" & ostatnia + 1 & ":P" & licznik + ostatnia) = dane
End If

End Sub

napisał: wojpen
postów: 23


umieszczony:
19 lutego 2009
11:36

edytowany:
19 lutego 2009
11:38

  
Witaj,
Coś dalej jest nie tak.
1. z lokalizacji pliku źródłowego innej niż pulpit - pliku nie otwiera a likwiduje 1 wiersz nagłówkowy.
2.Plik, który Ci wysłałem otwiera, ostatnie dwie kolumny mają wartości, ale w kolumnie Producent jest wszędzie zapis Brak Danych, a powinna zadziałać funkcja wyszukaj pionowo.
3.podmiana pliku przykładowego na oryginalny źródłowy powoduje, że macro zachowuje się jak w p.1.

I tu moje obserwacje:
1.Jeżeli z pliku oryginalnego - który w csv ma 1048576 wierszy wykasuję wszystkie puste wiersze i zostaną tylko zapełnione - makro zaczyna działać.
2.Ja w swoim kodzie specjalnie zrezygnowałem ze wskazywania w imporcie filtra ogólnego csv i rozpisałem go szczegółowo, bo następuje konflikt ustawień reg. VBA i Excela PL (chodzi o separatory listy w postaci ; i , oraz brak możliwości wskazania w ogólnym formacie importu istnienia lub nie kolejnych ograniczeń "" - których w pliku źródłowym jest brak i to trzeba zaznaczyć.
Gdybyś puścił fragment mojego kodu z opcją Get Open Filename - krokowo to zauważysz o co chodzi.

A tak przy okazji - mógłbyś "skomentować' linie swego kodu? - chcę przy okazji nauczyć się czegoś, a nie tylko iść na gotowca.

Bardzo Ci dziękuję za już, i proszę o jeszcze.
Pozdrawiam
napisał: Trebor
postów: 1209


umieszczony:
19 lutego 2009
09:04

  
nazwa pliku rozmiar
Zeszyt1.zip 16.52 kB

Sprawdź jeszcze kod z załącznika. Jeśli w kolumnie B nie ma wartości to wskazuje, że mamy jeszcze dodatkowo problem cudzysłowie.
Pytanie dla biegłych w temacie - jak profesjonalnie ustalić jaki separator jest używany w pliku CSV?
napisał: wojpen
postów: 23


umieszczony:
18 lutego 2009
20:30

  

Kod zmieniłem, macro odpaliłem, wskazałem folder z danymi źródłowymi i.... nic.
Znowu usunęło wyłącznie pierwszy wiersz.
Przeczytałem Twój mail raz jeszcze i... plik źródłowy skopiowałem na pulpit
Macro nie ruszyło - (na pliku źródłowym o pełnej ilości wierszy).
Zamieniłem zatem plik źródłowy na ten, który Ci wysłałem i tu siurpryza - macro ruszyło
Zaimportowane zostały 3 wiersze, ale w dziwny sposób:
1. W kolumnie B (TOWARNAZWA) pojawiły się "" ,
2. W kolumnie D (PRODUCENT) pojawił się napis Producent - zamiast bd (bo plik odniesienia TOWAR_KOD itp. akurat tych kodów w wzorcu nie ma)
3. W kolumnie O i P brak jest wartości, chociaż we wzorze takie są dla ostatniego wiersza.

Zrobiłem próbę jeszcze jedną: Z pliku źródłowego wyciąłem 27 wierszy(przypadkowa ilość) i zapuściłem raz jeszcze - poszło, ale z uwagami jw.
Na kilku plikach nie sprawdzałem (jeszcze)
PZDR
napisał: Trebor
postów: 1209


umieszczony:
18 lutego 2009
15:57

  
Zmień linię
If UCase(wiersz(0)) <> "TOWARIDX" And wiersz(0) <> "" Then


na
If UCase(wiersz(0)) <> "TOWARIDX" Then



Czekam niecierpliwie na efekt.
napisał: Trebor
postów: 1209


umieszczony:
18 lutego 2009
15:50

  
Ściągnąłem plik na pulpit, odpaliłem swoje makro, wskazałem plik na pulpicie i zaimportowało mi trzy wiersze danych.
Test uważam za udany.
napisał: wojpen
postów: 23


umieszczony:
18 lutego 2009
15:43

  
nazwa pliku rozmiar
gdansk.csv 626 B

Plik jest taki sam - na wszelki wypadek wysyłam raz jeszcze - tym razem 4 wiersze i bez kompresji
Pzdr.
napisał: Trebor
postów: 1209


umieszczony:
18 lutego 2009
15:34

  
Skoroszyt, który załączyłem powinien w sobie zebrać dane z plików CSV. Błąd wyskakuje, ponieważ w arkuszu w którym powinno się robić zestawienie muszą być nagłówki.
Dołącz na forum plik CSV, z którego robisz import jeśli jest inny aniżeli ten który był poprzednio dołączany gdanskzródło.
napisał: wojpen
postów: 23


umieszczony:
18 lutego 2009
15:05

  
Witam,
No aż taki gamoń to nie jestem
Zrobiłem dokładnie to, co Napisałeś.
Efekty tego co zrobiłem podałem w mailu wcześniejszym - komunikat runTime error 91 itp.

Efekt główny - powtórzę raz jesze - kasowanie pierwszego wiersza i nic więcej.
Zatem pytam raz jeszcze - bo może ja nie wszystko zrozumiałem - czy z Twojego kodu mam coś gdzieś skopiować?
Nawet przy uruchomionym Twoim kodzie po uruchomieniu mojego nic się nie zmienia i brak jest daty a w lokalizacji jest zapis np.gdansk.csv
Pozdrawiam
napisał: Trebor
postów: 1209


umieszczony:
18 lutego 2009
09:59

  
W załączniku jest makro Wstaw (to uruchamiasz) i funkcja z której korzysta makro. Uruchamiasz makro Wstaw i dalej działasz jak zazwyczaj.
Rozumiem, że jest jakiś problem - opisz dokładnie co dzieje się nie tak (nie robi się zestawienie to trochę mało)
napisał: wojpen
postów: 23


umieszczony:
18 lutego 2009
09:27

  
Witaj,
Tzn. jak dobrze rozumiem muszą być dostępne oba macra? w trakcie wykonywania?
pzdr.
napisał: Trebor
postów: 1209


umieszczony:
18 lutego 2009
08:34

  
No to poszło coś nie tak. Makro uruchom będąc w pierwszym arkuszu załącznika (tam gdzie są nagłówki - musi coś być w arkuszu). Makro (Twoje) prosi o wskazanie plików CSV do zestawienia. To wszystko jest surowe (do obróbki), ale chodziło mi raczej o metodę niż finałowy efekt.
napisał: wojpen
postów: 23


umieszczony:
17 lutego 2009
22:43

  
Witam,
Ciemność widzę...
Trebor - bardzo Cię proszę nie przeceniaj mnie - ja naprawdę jestem zielony
Skopiowałem Twój załącznik, rozpakowałem, uruchomiłem VBA - przeszedłem całem macro - cokolwiek to znaczy - czysta magia i zaklinanie deszczu i.....nic.
Odpalenie go z Twego zeszytu daje jedynie efekt wykasowania 1 wiersza - tego, który zawiera etykiety kolumn.
Odpalenie go po przekopiowaniu do nowego zeszytu - też kupa,
otwarcie nowego skoroszytu i uruchomienie makra zapisanego w Twoim daje to co niżej:
"Run-time error'91'
objectvariable or with block variable not set"
a macro stoi na 31 linii kodu -
..."ostatnia = Cells.Find(What:="*", After:=Cells(1, 1), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row"...
A może mam to gdzieś wkleić do siebie?
I co mam z tym zrobić?
Pozdr. Wojtek
napisał: Trebor
postów: 1209


umieszczony:
17 lutego 2009
19:44

  
nazwa pliku rozmiar
Zeszyt1.zip 14.41 kB

Rozglądnij się w załączniku.
napisał: wojpen
postów: 23


umieszczony:
17 lutego 2009
15:22

  
nazwa pliku rozmiar
magazyny.rar 24.18 kB

Witam po delegacji
Oczywiście jestem gamoń - sam mogłem wpaść na to, aby zamieścić pliki.
Zatem:
gdansk.csv - fragment pliku źródłowego uzyskanego z aplikacji sprzedażowej.
gdansk.xls - fragment pliku (struktura), który chcę uzyskać i dopisywać do bazy.
Towar_Producent_Typ.xls - fragment bazy odniesienia do wyszukaj pionowo

fragment kodu VBA do miejsca wykonania instrukcji wyszukaj.pionowo (dla określenia producenta)

Uwaga - w moim kodzie nazwa arkusza posiada .csv - a tego nie chcę.
kod umieszczony jest w module1 arkusza gdansk.xls

Macro działa dla wszystkich lokalizacji, ale nie wstawia właściwie nazwy (FILIA), oraz daty (o którą pytałem w mailu).

Dalej nie wiem jak napisać instrukcje, które pozwolą na kopiowanie poszczególnych arkuszy do bazy zbiorczej (narastająco) o nazwie np. magazyny narastająco - umieszczonej w nowym skoroszycie wedle zasady, że każdy z arkuszy poszczególnych miesięcy będzie dopisywany.
Tu mam problem z zadeklarowaniem zmieniającego się zakresu każdego z arkuszy - do kopiowania.
Później chcę robić z tego PIVOT'Y w różnych przekrojach.
To tyle - jeśli coś jest nie zrozumiałe proszę pytać
Pozdrawiam Wojtek
napisał: Trebor
postów: 1209


umieszczony:
16 lutego 2009
16:22

edytowany:
16 lutego 2009
16:23

  
Daj trochę Twojego kodu, to łatwiej będzie pokazać co i gdzie.
napisał: wojpen
postów: 23


umieszczony:
16 lutego 2009
15:38

  
Wielkie dzięki - działa, ale...
lamerskie pytanie:
uzupełnia mi komórki, ale w pliku źródłowym csv - a mnie chodzi, aby uzupełniało je w wynikowym xls.
I druga sprawa - deklaracja nazwy pliku dotyczy tego konkretnego - jak ją zmienić, aby odnosiło się to do aktywnego - przetważanego pliku
w kolejności:
import (przez GetOpenFilename z opcją wielu plików) plik.csv
formatowanie po imporcie
wstawianie lokalizacji (kom.E1)
wstawianie daty (kom.F1)
zapis arkusza jako plik.xls

a po ostatnim zapis całego skoroszytu z nazwą styczeń.xls

Sorry za takie pytania, ale w VBA jestem jeszcze w lesie
Pozdrawiam


<-wstecz  1 2  dalej->
wszystkich stron: 2


Sortuj posty: z