Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Magicy od excela i VBA - wyzwanie

invx 26 Paź 2005 16:07 6811 34
  • #1 26 Paź 2005 16:07
    invx
    Poziom 25  

    Czy da sie zrobic makro w excelu, ktore umozliwi wpisywanie do arkusza tylko danych liczbowych, i zliczy ilosc poszczegolnych cyfr ?

    0 29
  • #2 06 Lis 2005 01:23
    paweliw
    Spec od komputerów

    Czyzbyś chciał się pobawić w systemy do totolotka ? :D
    Może trochę więcej szczegółów.

    0
  • #3 06 Lis 2005 11:36
    invx
    Poziom 25  

    nie w totolotka :P to tj. projekt potrzebny mi do szkoly:D
    podobno to sie gdzies w ekonomii wykorzystuje ... ?

    ale ma to wygladc tak:
    mamy arkusz1. Wprowadzamy do jego komorek dowolne liczby, dowolnej dlugosci (jednak nie wszytskie pola musza byc zapelnione). I makro ma polegac na tym, zeby w akruszu2 (albo i tym 1) przedstawilo ilosc poszczegolnych cyfr (od 0 do 9) wpisanych do arkusza1.

    Narazie nie wiem kompletnie jak sie za to zabrac, potrzebuje jakis wskazowek, w necie nei moge nic znalezc :(.

    dzieki za odp :)

    0
  • #4 06 Lis 2005 16:27
    powerm
    Poziom 23  

    1. Do pierwszego uzyj narzedzia->sprawdzanie poprawnosci. Wybierz liczba, niestety musisz podac jakas duza liczbe minimalna i maksymalna.
    2. Druga sprawe zalatwia funkcja ile.liczb
    W tym wypadku programowanie makr jest zbedne

    0
  • #5 06 Lis 2005 20:06
    invx
    Poziom 25  

    1. ok

    2. ta funkcja zliczy mi tylko w ilu komurkach wpisano jakas liczbe. A ja potrzebuje zliczyc z zalego arkusza nie ilosc liczb, tylko poszczegolnych cyfr 0,1,2,3 ... 9.

    0
  • #7 06 Lis 2005 21:55
    powerm
    Poziom 23  

    Ad2 Uzyj w takim wypadku Licz.Jezeli dla kazdej cyfry.
    Mozesz uzyc Sum posrednich (menu Dane) - uwaga dane MUSZA byc posortowane poniewaz algorytm liczy elementy od zmiany do zmiany.

    0
  • #8 06 Lis 2005 22:18
    paweliw
    Spec od komputerów

    powerm napisał:
    Ad2 Uzyj w takim wypadku Licz.Jezeli dla kazdej cyfry.
    Mozesz uzyc Sum posrednich (menu Dane) - uwaga dane MUSZA byc posortowane poniewaz algorytm liczy elementy od zmiany do zmiany.


    Wszystko ładnie pięknie ale chodzi o poszczególne cyfry w liczbach !
    Korzystając tylko z funkcji Excela (bez VBA) formuły będą dosyć rozbudowane, trzeba najpierw obliczyć długość liczby, sprawdzić wartość każdego znaku i odpowiednio zsumować każde wystąpienie znaku.
    W VBA można użyć pętli i szybko sprawdzić (i zliczyć) poszczególne cyfry w liczbie. Nie jestem biegły w VBA (ostatnio coś pisałem dawno temu w Clipperze) ale myślę, że ktoś z tym obeznany zrobiłby to dosyć szybko.
    Ze swojej strony mogę przygotować arkusz (na wzór podanego w poprzednim poście) korzystający tylko z funkcji Excela ale to trochę potrwa.

    0
  • #9 07 Lis 2005 08:39
    invx
    Poziom 25  

    ooo cos takiego jak powyzszy screen ...
    tyko ze mialo by to zliczac nie z jednej liczbby, a z kazdej komurki w arkuszu, co jeszce bardzioej by formule zagmatwalo. Dlatego dobrze bylo by to w VBA napisac. Ale jak masz jakis pomysl jak cos takiego wykonac jako normalna formule excela, to mozesz podzucic cos :)

    dzieki :wink:

    0
  • #10 07 Lis 2005 22:29
    roxitro
    Poziom 10  

    Zamieniłbym liczbę na łańcuch a następnie dodał po kolei:
    Przepis nie jest dokładnym kodem, ale powinien wystarczyć ;)

    Dim i as integer
    Dim suma as real
    Dim x as real

    s = 0
    x = 'wartość komórki worksheets.cell(...,...).value

    For i =1 to len(str(x))
    s = s + val(mid(i,1,str(x)))
    Next i

    0
  • Pomocny post
    #11 08 Lis 2005 12:05
    etr
    Poziom 16  

    Załączam przykładowy plik excela z makrem liczącym ilośc znaków w zadanym zakresie arkusza. Wynik podawany jest w drugim arkuszu.
    Makro wybiera kolejno komórki z zakresu, liczy liczbę znaków w poszczególnych komórkach i dodaje narastająco liczbę poszczególnych znaków z zakresu.
    Arkusz można dostosować do swoich potrzeb, np. wynik podawać w tym samym arkuszu, inaczej wybrać żądany zakres, itp. modyfikując makro.
    Do liczenia ilości wystąpień poszczególnych znaków w komórce posłużyłem się formułą (w podwójnej pętli):
    np. DŁ(A1)-DŁ(PODSTAW(A1;B1;"")), gdzie:
    A1 - komórka z ciągiem znaków do liczenia np. "2344413"
    B1 - komórka, w której jest szukany znak, np. "1"

    0
  • #12 08 Lis 2005 15:43
    invx
    Poziom 25  

    dzieki :) o to mi chodilo nic dodac nic ujac :)
    masz pomogl i +10 pkt :wink:

    Dodano po 1 [minuty]:

    temat mozna odkleic, i zachowac dla potomnych :wink:

    0
  • #13 26 Lis 2005 09:49
    invx
    Poziom 25  

    wszystko pieknie, niestety pojawill sie kolejny problem.
    Musze zliczac drugim buttonem, w excelu, ilosc wystapien znakow anie nie z arklusza ... a wybranego pliku zewnetrznego *.txt. Czyli jak wczytac ten plik ? i jak go zliczyc ? przeciez ten plik nie bedzie mial komurek, wiec makro trzeba by bylo jakos zmodyfikowac, albo mnoze plik potraktowac jako jedna wielka komurke ?

    0
  • Pomocny post
    #14 27 Lis 2005 15:25
    bobo
    Poziom 28  

    Dostęp do pliku tekstowego z Excela jest prosty z poziomu VBA. Warunek to otwarcie pliku za pomoca instrukcji Open i zamknięcie za pomoca instrukcji Close oraz odczytywanie danych za pomocą odpowiedniej instrukcji Input. Najprosciej, bez zbednego wnikania w zawilosci, mozna czytac dane wg. ponizszego kodu:

    Sub importData()
    'miejsce położenia pliku tekstowego
    'plik musi już istnieć i zawierac dane tekstowe
    'przykladowy plik ma nazwe aa.txt i jest na dysku c w katalogu !user
    'otwarcie pliku tekstowego
    Open "c:\!user\aa.txt" For Input As #1
    wier = 0
    Do Until EOF(1)

    'pobranie danych
    Line Input #1, dane
    ActiveCell.Offset(wier, 0) = dane
    ActiveCell.Offset(wier, 1) = Len(dane)
    wier = wier + 1
    Loop

    'zamkniecie pliku tekstowego
    Close #1
    End Sub

    Calosc mozna przypisac do jakiegos przycisku i jeszcze bardziej rozwinac. Np. mozna czytac dane oddzielone przecinkiem ( Input # ), dokladnie jest to opisane w helpie VBA.
    Pozdrowka

    0
  • #15 27 Lis 2005 20:53
    invx
    Poziom 25  

    ok, dzieki :)

    tylko sie okazuje ze to makro co na samym poczatku kolega etr napisal, nie bardzo nadaje sie do policzenia liczb z pliku, bo jednak struktura pliku jest troszke inna niz arkusza ...

    P.S.
    a skad moge wziasc helpa do VBA in polish ?? ?

    0
  • Pomocny post
    #16 27 Lis 2005 21:33
    bobo
    Poziom 28  

    Fakt, ze help w VBA jest w jezyku "polskim uproszczonym":D i pisanie tutaj ze nalezy sie uczyc angielskiego jest nie na miejscu. Niemniej jednak mozna z helpa sprytnie korzystac. Mozna wykonywac przyklady, ktorych jest tam mnogo, i w ten sposob opanowac, zrozumiale, poszczegolne elementy jezyka. Osobiscie, dla osob ktore dopiero zaczynaja "walke" z VBA, polecam wg. mnie, wspaniala ksiazeczke za 10zł !!! napisana przez Miroslawa Lewandowskiego pt." VBA dla Excela 2002/2003 " Leksykon kieszonkowy i inna ksiazke tego autora pt." Tworzenie makr w VBA dla Excela 2002/XP PL". Dla bardzo ambitnych kolegow jest ksiazka, niestety za ogromna cene, Johna Wolkenbacha pt." EXCEL Programowanie w VBA, Vademecum profesjonalisty". Ale nic tak nie uczy jak robienie przykladow, poprostu praktyka.
    Pozdrawiam

    Dodano po 21 [minuty]:

    Fakt, ze help w VBA jest w jezyku "polskim uproszczonym":D i pisanie tutaj ze nalezy sie uczyc angielskiego jest nie na miejscu. Niemniej jednak mozna z helpa sprytnie korzystac. Mozna wykonywac przyklady, ktorych jest tam mnogo, i w ten sposob opanowac, zrozumiale, poszczegolne elementy jezyka. Osobiscie, dla osob ktore dopiero zaczynaja "walke" z VBA, polecam wg. mnie, wspaniala ksiazeczke za 10zł !!! napisana przez Miroslawa Lewandowskiego pt." VBA dla Excela 2002/2003 " Leksykon kieszonkowy i inna ksiazke tego autora pt." Tworzenie makr w VBA dla Excela 2002/XP PL". Dla bardzo ambitnych kolegow jest ksiazka, niestety za ogromna cene, Johna Wolkenbacha pt." EXCEL Programowanie w VBA, Vademecum profesjonalisty". Ale nic tak nie uczy jak robienie przykladow, poprostu praktyka.
    Pozdrawiam

    0
  • #17 28 Lis 2005 17:39
    invx
    Poziom 25  

    hmm bede sie rozgladac za jakas ksiazeczka :)

    ale mam do Was prosbe wspomuzcie mnie narazie jakos, puki ksiazki nie mam :wink:

    chcialbym zeby po kliknieciu na przycisk w excelu, mozna byo wybrac, pik, i makro zeby policzylo ilosc wystapien poszczegolnych yfr od 0 do 1, z pominieciem danych textowych. Makro liczace znaki @etr napisal wyzej, wiec tylko dostosowac go zeby dane byly pobierana z pliku a nie arkusza :)

    Bardzo Was prosze :)

    0
  • Pomocny post
    #19 29 Lis 2005 23:06
    bobo
    Poziom 28  

    Cierpliwości kolego, wszystko wymaga czasu. Więc tak, doszedłem do wniosku ze caly problem nalezy rozwiazac od poczatku. Ruszyc baniakiem, wypic pare piw ( o papieroskach nie wspomne ), jak w kartach, dym piwo i przekleństwo:D. Efekt tej walki przedstawiam ponizej, a w zalaczniku przykladzik. Sposob edycji wynikow moze sie wydawac troche dziwny, ale ma w sobie pewna logike, zreszta bardzo prosta. I jeszcze kilka uwag, niestety kod "olewa" literki z ogonami ( wrodzone lenistwo nie pozwolilo mi zalatwic tej opcji ) co nie jest takie trudne do realizacji; programik nie wypina sie na duze lub male literki, wszystkie traktuje jako male. I ostatnia uwaga, nie jest to acydzielo programistyczne:cry:, mozna to rozwiazac w zupelnie inny sposob, tylko pewnie juz wpadlbym w nalog piwny.:D a zona urwala by mi łeb za siedzenie po nocach i zniszcone firanki od dymu.:D
    Kod programu w VBA Excel:

    Sub importData()
    '** deklaracja tablic
    Dim zm
    Dim tablica(37) As Integer
    Dim tabl2(37) As String
    '** okreslenie szerokosci komorek
    '** naglowki kolumn
    zm = "0123456789abcdefghijklmnopqrstuvwxyz"
    For aa = 1 To 36
    tabl2(aa) = Mid(zm, aa, 1)
    Next aa
    '** kasowanie arkusza
    Cells.Select
    Selection.ClearContents
    '** kursor w pierwszej komorce arkusza
    Range("A1").Select
    '** miejsce położenia pliku tekstowego
    '** plik musi już istnieć i zawierac dane tekstowe
    '** przykladowy plik ma nazwe aa.txt i jest na dysku c w katalogu !user
    '** otwarcie pliku
    Open "c:\!user\aa.txt" For Input As #1
    wier = 0
    Do Until EOF(1)
    '** odczyt danych
    Line Input #1, dane
    '** zamiana na male litery, wczytanie do komorki
    xz = LCase(dane)
    ActiveCell.Offset(wier, 0) = xz
    '** liczy ilosc znakow w wierszu
    dl = Len(xz)
    '** podaje ile jest znakow w wierszu
    ActiveCell.Offset(1, 0) = dl
    '** pobiera znaki z danych i ustawia jako nazwy kolumn
    For a = 1 To dl
    znak = Mid(xz, a, 1)
    ActiveCell.Offset(0, a) = znak
    xx = Asc(znak) - 47
    '** kod znaku
    If xx > 48 And xx < 100 Then
    '** index tablicy znakow
    tablica(xx - 39) = tablica(xx - 39) + 1
    Else
    '** index tablicy dla liter
    tablica(xx) = tablica(xx) + 1
    End If
    Next a
    '** wyswietlanie danych
    For aa = 1 To 36
    ActiveCell.Offset(3, aa - 1) = tablica(aa)
    ActiveCell.Offset(2, aa - 1) = tabl2(aa)
    Next aa
    '** nastepny wiersz
    wier = wier + 1
    Loop
    '** zamkniecie pliku tekstowego
    Close #1
    End Sub

    PS. i najwazniejsza uwaga, bez przesady z dlugoscia zdania w pliku tekstowym, Excel moze w pewnym momencie wykorkowac jak ryba na piasku.
    Pozdrowka

    0
  • #20 01 Gru 2005 09:31
    invx
    Poziom 25  

    dzieki :D

    tylko to mialo znaki textowe ignorowac a nie je zliczac :P

    P.S.
    masz +5 i pomogl

    0
  • #21 02 Gru 2005 20:34
    invx
    Poziom 25  

    w tym Twoim makrze jest jakism blad, tworze plik i wywala mi "subscrip of range"

    0
  • Pomocny post
    #22 02 Gru 2005 21:16
    bobo
    Poziom 28  

    Raczej nie. taki bład się pojawi kiedy w pliku tekstowym pojawi sie znak z poza zakresu dopuszczalnych znakow. Makro reaguje prawidłowo, tylko na litery i cyfry, inne znaki traktuje jako bledy. Nawet spacja lub enter sa traktowane jako znak. Zwroc uwage ze znaki sa rozpoznawane na podstawie kodu ASCII, stad dzialania w obliczaniu indeksu tablicy.
    Pozdrowka

    0
  • #23 03 Gru 2005 20:27
    invx
    Poziom 25  

    DZIEKI :) juz wszytsko wiem :D

    za wyjatkiem jednej rzeczy ...

    Code:
    Sub Licz()
    
    Application.ScreenUpdating = False

    Range("wyniki").ClearContents
    Sheets(1).Select

       Dim znaki As Integer
       Dim znaki_poprz As Integer
       
       pocz = InputBox("PODAJ ADRES KOMÓRKI POCZĄTKOWEJ NP. A1" & Chr(13) & "ZAKRESU:", , "A1")
       fine = InputBox("PODAJ ADRES KOMÓRKI KOŃCOWEJ NP. B2" & Chr(13) & "ZAKRESU:", , "B2")
       
       If pocz = "" Or fine = "" Then
       MsgBox "BRAK DANYCH"
       Exit Sub
       Else
       On Error Resume Next ' pomijanie błędów wpisu do okna InputBox
       
       kol_pocz = Range(pocz).Column
       wiersz_pocz = Range(pocz).Row
       kol_fine = Range(fine).Column
       wiersz_fine = Range(fine).Row
         
       For y = kol_pocz To kol_fine
       For x = wiersz_pocz To wiersz_fine
       
       Cells(x, y).Select
         
       znaki_0 = znaki_poprz_0 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A2"), ""))
       znaki_1 = znaki_poprz_1 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A3"), ""))
       znaki_2 = znaki_poprz_2 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A4"), ""))
       znaki_3 = znaki_poprz_3 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A5"), ""))
       znaki_4 = znaki_poprz_4 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A6"), ""))
       znaki_5 = znaki_poprz_5 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A7"), ""))
       znaki_6 = znaki_poprz_6 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A8"), ""))




       znaki_7 = znaki_poprz_7 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A9"), ""))
       znaki_8 = znaki_poprz_8 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A10"), ""))
       znaki_9 = znaki_poprz_9 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A11"), ""))
       
       znaki_poprz_0 = znaki_0
       znaki_poprz_1 = znaki_1
       znaki_poprz_2 = znaki_2
       znaki_poprz_3 = znaki_3
       znaki_poprz_4 = znaki_4
       znaki_poprz_5 = znaki_5
       znaki_poprz_6 = znaki_6
       znaki_poprz_7 = znaki_7
       znaki_poprz_8 = znaki_8
       znaki_poprz_9 = znaki_9
           
    Next x
    Next y

    Sheets(2).Range("B2") = znaki_0
    Sheets(2).Range("B3") = znaki_1
    Sheets(2).Range("B4") = znaki_2
    Sheets(2).Range("B5") = znaki_3
    Sheets(2).Range("B6") = znaki_4
    Sheets(2).Range("B7") = znaki_5
    Sheets(2).Range("B8") = znaki_6
    Sheets(2).Range("B9") = znaki_7
    Sheets(2).Range("B10") = znaki_8
    Sheets(2).Range("B11") = znaki_9

    Sheets(2).Range("A15") = "ZAKRES: " & pocz & ":" & fine

    End If
    Sheets(2).Select
    Cells(1, 1).Select

    End Sub


    jak z tego wywalic wyswietlanie okienek dialogowych i na stale podac jako komorke poczatkowa A1 a jako koncowa np. ZZ600

    sprubowalem tak (wczesniejsze rzeczy jak wyswietlanie okienek wywalilem)
    Code:
    kol_pocz = A
    
       wiersz_pocz = 1
       kol_fine = ZZ
       wiersz_fine = 600


    i niedziala ... :cry:

    0
  • Pomocny post
    #24 03 Gru 2005 21:54
    etr
    Poziom 16  

    1. Zmienne te muszą być liczbami, np. musi być:
    kol_pocz = 1
    wiersz_pocz = 1
    kol_fine = 27 ' (27 jest nr kolumny "AA")
    wiersz_fine = 100
    2. "ZZ" - nie ma takiej kolumny (excel 97).
    3. Makro to dla dużych zakresów będzie liczyło bardzo długo (musi przejść wszystkie komórki)
    4. Należy usunąć wywołanie okien INPUTBOX i zmiennych z nim związanych (lub poprzedzić ' - znak komentarza)
    5. Linie makra po znaku komentarza (') można usunąć (zielony kolor)

    Dla zakresu: A1 do AA100 makro ma postać:

    Sub Licz()
    Application.ScreenUpdating = False
    Range("wyniki").ClearContents
    Sheets(1).Select

    Dim znaki As Integer
    Dim znaki_poprz As Integer

    'pocz = InputBox("PODAJ ADRES KOMÓRKI POCZĄTKOWEJ NP. A1" & Chr(13) & "ZAKRESU:", , "A1")
    'fine = InputBox("PODAJ ADRES KOMÓRKI KOŃCOWEJ NP. B2" & Chr(13) & "ZAKRESU:", , "B2")
    'pocz = "A1"
    'fine = "D5"

    'If pocz = "" Or fine = "" Then
    'MsgBox "BRAK DANYCH"
    'Exit Sub
    'Else
    'On Error Resume Next ' pomijanie błędów wpisu do okna InputBox

    'kol_pocz = Range(pocz).Column
    'wiersz_pocz = Range(pocz).Row
    'kol_fine = Range(fine).Column
    'wiersz_fine = Range(fine).Row

    kol_pocz = 1
    wiersz_pocz = 1
    kol_fine = 27 ' nr kolumny "AA" jest liczba 27
    ' lub kol_fine = Range("AA100").Column
    wiersz_fine = 100

    For y = kol_pocz To kol_fine
    For x = wiersz_pocz To wiersz_fine

    Cells(x, y).Select

    znaki_0 = znaki_poprz_0 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A1"), ""))
    znaki_1 = znaki_poprz_1 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A2"), ""))
    znaki_2 = znaki_poprz_2 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A3"), ""))
    znaki_3 = znaki_poprz_3 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A4"), ""))
    znaki_4 = znaki_poprz_4 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A5"), ""))
    znaki_5 = znaki_poprz_5 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A6"), ""))
    znaki_6 = znaki_poprz_6 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A7"), ""))
    znaki_7 = znaki_poprz_7 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A8"), ""))
    znaki_8 = znaki_poprz_8 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A9"), ""))
    znaki_9 = znaki_poprz_9 + Len(ActiveCell.Value) - Len(Application.Substitute(ActiveCell.Value, Sheets(2).Range("A10"), ""))

    znaki_poprz_0 = znaki_0
    znaki_poprz_1 = znaki_1
    znaki_poprz_2 = znaki_2
    znaki_poprz_3 = znaki_3
    znaki_poprz_4 = znaki_4
    znaki_poprz_5 = znaki_5
    znaki_poprz_6 = znaki_6
    znaki_poprz_7 = znaki_7
    znaki_poprz_8 = znaki_8
    znaki_poprz_9 = znaki_9

    Next x
    Next y

    Sheets(2).Range("B1") = znaki_0
    Sheets(2).Range("B2") = znaki_1
    Sheets(2).Range("B3") = znaki_2
    Sheets(2).Range("B4") = znaki_3
    Sheets(2).Range("B5") = znaki_4
    Sheets(2).Range("B6") = znaki_5
    Sheets(2).Range("B7") = znaki_6
    Sheets(2).Range("B8") = znaki_7
    Sheets(2).Range("B9") = znaki_8
    Sheets(2).Range("B10") = znaki_9

    'End If

    Sheets(2).Select
    Cells(1, 1).Select

    End Sub

    0
  • #25 05 Gru 2005 21:51
    invx
    Poziom 25  

    koeljny problem ...

    Code:
    plik = InputBox("PODAJ NAZWE PLIKU np. dane.txt" & Chr(13) & "", , "dane.txt")
    

    ''''''''''
        Open ThisWorkbook.Path & "/plik" For Input As #1
    '''''''''


    i w tej ostatniej lini wywala blad ... tam gdzie podstawilem zmianna plik pobrana z alertu ...

    0
  • #26 07 Gru 2005 14:47
    mkaminski
    Poziom 2  

    A czy plik, którego nazwę podałeś w InputBox znajduje się w tym samym katalogu w którym jest arkusz z którego uruchamiasz makro?

    0
  • #27 07 Gru 2005 20:26
    invx
    Poziom 25  

    znajduje sie, makro zawiesza excela ...
    dowiedzialem sie ze cos z buforowaniem trzeba pokombinowac ...

    0
  • #28 07 Gru 2005 21:35
    bobo
    Poziom 28  

    Tak to jest jak się myli instrukcje z metodami. Do otwierania plików lub zapisu słuzy instrukcja Open ( instrukcja VBA ) jej składnia:

    Open ścieżka For tryb As # numer_pliku

    Natomiast: metoda Open obiektu Workbook ( bo to jest obiekt ) nie ma nic wspolnego z otwieraniem pliku.
    Pozdrowka

    0
  • #29 08 Gru 2005 13:03
    mkaminski
    Poziom 2  

    Moim skromnym zdaniem składnia jest dobra, przecież w ten sposób pobiera ścieżkę - ThisWorkbook.Path - dla pliku który chce otworzyć

    0
  • #30 08 Gru 2005 14:02
    bobo
    Poziom 28  

    Owszem, tylko precedura zdarzeniowa w chwili uruchamiania skoroszytu, ma taka postac:
    Workbook_Open()

    Otworzyc prosto i skutecznie mozna tak ( gdy juz otwarty jest Excel ):

    ChDir "C:\Pliki"
    Workbooks.OpenText Filename:="C:\Pliki\xxx.txt"

    Pytanie, co jest arkuszem a co skoroszytem? w zwiazku z tym, nalezy dokladnie wiedziec gdzie maja wyladowac dane i w którym momencie.

    Pozdrowka

    I najwazniejsza sprawa, aby procedura Workbook_Open, zadziałała, całe makro musi być na karcie ThisWorkbook

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo