Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Skrócony regulamin

[Excel] Sposób na rozstrzeliwanie tekstu

Idź do strony Poprzedni  1, 2, 3  Następny

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Oprogramowanie biurowe
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Hegemon12



Dołączył: 30 Lis 2008
Posty: 39

PostWysłany: Pon Lut 08, 2010 7:43 pm      Temat postu: Odpowiedz z cytatem Pisownia

No i super Gościu, kod śmiga, tylko właśnie głowie się jak tu jeszcze dać mu w zakres dwie lub trzy komóreczki:
Dodaje do przykładowego B2 jeszcze C8 jak poniżej, ale przenosi mi zawartość B2 do C8, a chciałbym żeby komórki te były niezależne od siebie.

pobrane = Range("B2, C8").Value
Range("B2, C8").Value = Left(zmiana, Len(zmiana) - 1)


Ostatnio zmieniony przez Hegemon12 dnia Pon Lut 08, 2010 8:12 pm, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
karolinavb
Site Admin


Dołączył: 25 Maj 2005
Posty: 5614

PostWysłany: Pon Lut 08, 2010 7:50 pm      Temat postu: Odpowiedz z cytatem Pisownia

2010-02....
Zapomniałeś dodać, że w module (standard lub klasy), gdzie znajduje się ten kod, nie maprawa być "Option Explicit".
Nawiasem mówiąć, ten kto "tego nie ma" sam prosi się o kłopoty...
------------------------------------------
Ja mam w okienku edycji projektu VBA, Tools/Options, zakładka Editor zaznaczone wszystkie opcje...
Otwieram okienko edycji kodu klasy worksheet... wpisuję Twój kod...
I Twój kod się normalnie nie kompiluje...
Option Explicit... brak deklaracji zmiennych...
Być może ten początkujący jest łepski i ma takie ustawienia, one są niekonieczne, ale właściwe!!!!
A skoro wspomniałeś o "początkującym"... takie gadżety jak zaprezentowłaś mogą być "zgubne"...
Cytat:
ma ta wadę ze musisz wpisać Application.EnableEvents = False

A Application.EnableEvents nie jest żadną "wadą" , jeśt świadomym działaniem, jesio piszący rozumie co to jest obsługa błędów,
oraz jesio zapewnia sobie powrót do właściwych ustawień...
Artik kurde, jest obsługa błędów w Twoim kodzie ?????
Cytat:
ale troszeczkę go też analizuj
Ty też... i nie prezentuj kodu, który przy ustawieniach jak u mnie "beka"...
Ale jesio Hegemon12 jest zadowolony... powodzenia...
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Artik
Moderator


Dołączył: 10 Maj 2006
Posty: 1156
Skąd: Szczecin

PostWysłany: Pon Lut 08, 2010 9:58 pm      Temat postu: Odpowiedz z cytatem Pisownia

karolinavb napisał:
Artik kurde, jest obsługa błędów w Twoim kodzie ?????
No kurde, nie ma! Lecz na razie nie widzę zagrożeń (może dlatego, że nockę mam nie przespaną).

Hegemon12 napisał:
po wyjściu z wypełnianej komórki (z paska formuły) za pomocą ENTERA literki jeszcze bardziej się 'rozjeżdżają'
Enter od zawsze służył do zatwierdzania czegoś, Esc do anulowania. Nie moja wina, że ktoś używa narzędzi niezgodnie z przeznaczeniem. :-)
Miałem świadomość zachowania się kodu w opisany przez ciebie sposób. Kod trzeba by przerobić tak, by odczytać wartość przed wprowadzeniem (z wykorzystaniem Undo), porównać z obecnie wprowadzonym i podjąć decyzję czy przerabiać czy nie.
...
Mimo początkowych oporów, może faktycznie wykorzystać kod Gościa, jeśli komórek zmienianych będzie dosłownie kilka. (Idę na łatwiznę :-) )
Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim pobrane, odstep As String, znak As Integer, zmiana As String
  Dim ZakresDoZmian As Range
  Dim Rng As Range
  
Set ZakresDoZmian = Union([A1], [C5], [H8])
  
  For Each Rng In ZakresDoZmian
    pobrane = Rng.Text
    odstep = " "
    If Mid(pobrane, 2, 1) <> odstep And pobrane <> vbNullString Then
        zmiana = vbNullString
        For znak = 1 To Len(pobrane)
            zmiana = zmiana & Mid(pobrane, znak, 1) & odstep
        Next
      Rng.Value = Left(zmiana, Len(zmiana) - 1)
    End If
  Next Rng
End Sub
Ale kod jeszcze nie jest wolny o wad.
Nie zadziała właściwie dla tekstu: O kurde, z powodu trochę mało pewnego warunku
Kod:
Mid(pobrane, 2, 1) <> odstep


Artik

_________________
Wymagasz? - masz! ;-) Szkolenia Excel
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora
2010-02-08
Gość





PostWysłany: Pon Lut 08, 2010 10:05 pm      Temat postu: Odpowiedz z cytatem Pisownia

oczywiście wielka karolinavb ma rację należy deklarować zmienne
a szczególnie początkujący czyli ja i ty Hegemon12

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim odstep, pobrane, zmiana As String
    Dim znak As Integer
    
    odstep = "_"
  
    pobrane = Range("B2").Value
    If Mid(pobrane, 2, 1) <> odstep And pobrane <> "" Then
        zmiana = ""
        For znak = 1 To Len(pobrane)
            zmiana = zmiana & Mid(pobrane, znak, 1) & odstep
        Next
        Range("B2").Value = Left(zmiana, Len(zmiana) - 1)
    End If
    
    pobrane = Range("C8").Value
    If Mid(pobrane, 2, 1) <> odstep And pobrane <> "" Then
        zmiana = ""
        For znak = 1 To Len(pobrane)
            zmiana = zmiana & Mid(pobrane, znak, 1) & odstep
        Next
        Range("C8").Value = Left(zmiana, Len(zmiana) - 1)
    End If
    
End Sub


Dodane przez moderatora (łączenie postów)

Artik cudnie tylko jedno ale , co i u mnie jest niedopracowane
9 linia pobrane = Replace(Rng.Text, " ", "")
hi hi taka błahostka a taka polemika

Dodane przez moderatora (łączenie postów)

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim odstep, pobrane, zmiana As String
    Dim znak As Integer
    Dim ZakresDoZmian As Range
    Dim Rng As Range
    odstep = "_"
    Set ZakresDoZmian = Union([B2], [C8], [H8])
    ' UNION nie znałem ale poznałem :)
    For Each Rng In ZakresDoZmian
        pobrane = Replace(Rng.Text, odstep, "")
        If pobrane <> "" Then
            zmiana = vbNullString
            For znak = 1 To Len(pobrane)
            zmiana = zmiana & Mid(pobrane, znak, 1) & odstep
        Next
        Rng.Value = Left(zmiana, Len(zmiana) - 1)
        End If
      Next Rng
End Sub


Mid(pobrane, 2, 1) <> odstep ... to prowadziło do nikąd

Od moderatora: może jednak warto się zarejestrować? Mógłbyś wtedy edytować swoje posty zamiast zmuszać do tego moderatorów.
Powrót do góry
Artik
Moderator


Dołączył: 10 Maj 2006
Posty: 1156
Skąd: Szczecin

PostWysłany: Pon Lut 08, 2010 11:34 pm      Temat postu: Odpowiedz z cytatem Pisownia

2010-02-08 napisał:
należy deklarować zmienne
a szczególnie początkujący
Tyle, że "dzieciom" się wybacza, ale "młodzieży" - ja ty - już nie! :-)

Artik

_________________
Wymagasz? - masz! ;-) Szkolenia Excel
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora
Hegemon12



Dołączył: 30 Lis 2008
Posty: 39

PostWysłany: Wto Lut 09, 2010 9:40 am      Temat postu: Odpowiedz z cytatem Pisownia

Dziecko dziękuje dorosłym za bezpieczne przeprowadzenie przez ciemną dolinę VBA !

Qrcze, a jednak jeszcze jedno pytanie :( Chce zrobić rozstrzelenie tekstu w kilku arkuszach. Jednak kod działa pod jednym arkuszem, przeklejony do drugiego arkusza w edytorze VBA już nie działa. Czy jest prosty sposób żeby temu zaradzić ?

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim odstep, pobrane, zmiana As String
    Dim znak As Integer
        odstep = " "
       pobrane = Range("K42").Value
    If Mid(pobrane, 2, 1) <> odstep And pobrane <> "" Then
        zmiana = ""
        For znak = 1 To Len(pobrane)
            zmiana = zmiana & Mid(pobrane, znak, 1) & odstep
        Next
        Range("K42").Value = Left(zmiana, Len(zmiana) - 1)
    End If
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
karolinavb
Site Admin


Dołączył: 25 Maj 2005
Posty: 5614

PostWysłany: Wto Lut 09, 2010 8:53 pm      Temat postu: Odpowiedz z cytatem Pisownia

Cytat:
Tyle, że "dzieciom" się wybacza, ale "młodzieży" - ja ty - już nie! :-)
Kurcze, Artur nie masz racji!!!!
Można byłoby wybaczyć "Odpowiadaczowi 2010-02", ale On pisze
Cytat:
no ale bez urazy Artik wiedza twa wielka szacun ... nie czepiam się
a kolega Hegemon12 dopiero zaczyna przygodę
I prezentuje kod…
Korzystający kliknięciem (po raz 1-szy) otwiera okienko edycji klasy WorkSheet, przed nim pracowałam ja.
Mam zaznaczone stosowne opcje…
On zatem ma Option Explicit, wpisuje kod gościa…Sorry i dupa…
W porzo byłoby gdyby gość zaznaczył w poście, że w module, klasie nie ma Option Explicit…
Bez urazy, synu, gościu, skoro zwracasz uwagę, że pytacz jest początkujący, 3maj się reguł!!!!
Określaj warunki!!!!
Cytat:
należy deklarować zmienne…
Po czym:
Cytat:
Dim odstep, pobrane, zmiana As String
Na górze, dział Teoria.
To tylko ostania zmienna jest typu String, reszta Variant…
Ponadto:
Cytat:
Dim Rng As Range

Bez obsługi błędów + na Nothing może prowadzić do uszkodzenia skoroszytu!!!
Ta uwaga dotyczy także Ciebie, królu Arurze ;-))

Hegemon12
Przepraszam, ale czy zawsze Target to jest Range("K42") ?????
Bo Ty ciągle operujesz na Range("K42") ????


Ostatnio zmieniony przez karolinavb dnia Sro Lut 10, 2010 7:08 am, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
2010-02-09
Gość





PostWysłany: Wto Lut 09, 2010 9:17 pm      Temat postu: Odpowiedz z cytatem Pisownia

Cytat:
Od moderatora: może jednak warto się zarejestrować? Mógłbyś wtedy edytować swoje posty zamiast zmuszać do tego moderatorów.


010-02-08 vel 2010-02-07 miło by było gdybyś się zarejestrował na forum. Nic nie kosztuje, spamu nie dostajesz, a lepiej by się gadało. Jakoś tak głupio gadać z datą. ;-)
I ustabilizował byś się nieco. ... Artik

powyższy post jest odpowiedzią na te dwa nurtujące pytania

karolinavb wiedza wiedza a może nawet wiedza .... tylko czy jest coś poza tą wiedzą <- pytanie retoryczne

Odpowiedź od moderatora: tak się składa, że ostatnia sugestia była ode mnie. A ta twoja wypowiedź nie brzmi zbyt miło - szczególnie w odniesieniu do Karoliny. marcin_an
Powrót do góry
karolinavb
Site Admin


Dołączył: 25 Maj 2005
Posty: 5614

PostWysłany: Sro Lut 10, 2010 7:13 am      Temat postu: Odpowiedz z cytatem Pisownia

Dzięki Marcin.
"Czepiam" się, a to przeważnie wywołuje reakcje...
Hegemon12
Czy to koniecznie musi być spacja, może CHR(160), wygląda jak zwykla spacja, a umożliwiłoby userowi wpisać tekst:
Tytuł Mojej Książki
czy Nazwisko i Imię, który po opuszczeniu komórki wyglądałby tak:
T y t u ł  M o j e j  K s i ą ż k i
a przy wejściu do komórki user powinien widzieć w pasku formuły i mieć do edycji ponownie normalny teskt:
Tytuł Mojej Książki
------------------------------------------
Do Gościa, którego bardzo przepraszam, że ośmielam ponownie się napisać uwagi ;-))
Istotnie poza wiedzą, zresztą wcale nie taką dużą, nie prezentuję sobą nic, o ile masz na myśli, to o czym ja myślę ;-))
Jestem robotem.

Kod Gościa z Pon Lut 08, 2010 10:05 pm (wersja ostatnia)
Cytat:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim odstep, pobrane, zmiana As String
Dim znak As Integer
Dim ZakresDoZmian As Range
Dim Rng As Range
odstep = "_"
Set ZakresDoZmian = Union([B2], [C8], [H8])
' UNION nie znałem ale poznałem :)
For Each Rng In ZakresDoZmian
Debug.Print Time; Target.Address ' dopisałam !!!!!
pobrane = Replace(Rng.Text, odstep, "")
If pobrane <> "" Then
zmiana = vbNullString
For znak = 1 To Len(pobrane)
zmiana = zmiana & Mid(pobrane, znak, 1) & odstep
Next
Rng.Value = Left(zmiana, Len(zmiana) - 1)
End If
Next Rng
End Sub
Cytat:
' UNION nie znałem ale poznałem :)

To skoro tak, to proszę jesio raz zajrzeć do kodu Artura:
Cytat:
....Set Zakres = Intersect(Target, ZakresDoZmian)
If Not Zakres Is Nothing Then...

Który jak widzę już sam się zagubił i zaczął to pomijać.
Wcale nie tykam zakresów zawartych w zbiorze ZakresDoZmian (korzystając z przytoczonego wyżej kodu gościa),
zaglądam do okienka Immediate i co widzę:
07:03:16 $P$4
07:03:17 $P$7
07:03:17 $P$10
07:03:18 $P$12
07:03:19 $P$14
07:03:20 $P$16

itd… Kod wykonywany jest wielokrotnie, kiedy "nie musi".
Co więcej, obaj panowie pominęli właściwość Calculation, więc jeżeli Hegemon12 ma trochę bardziej obciążony skoroszyt…
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Hegemon12



Dołączył: 30 Lis 2008
Posty: 39

PostWysłany: Sro Lut 10, 2010 8:54 am      Temat postu: Odpowiedz z cytatem Pisownia

Cytat:
Hegemon12
Czy to koniecznie musi być spacja, może CHR(160), wygląda jak zwykla spacja, a umożliwiłoby userowi wpisać tekst:

Fajny pomysł. Sprawdze to. Właśnie pewną drobną niedogodnością przy spacji jest to że później na pasku formuły gdy chce się dokonać jakiejś korekty tekst jest już rozstrzelony.

Cytat:

Przepraszam, ale czy zawsze Target to jest Range("K42") ?????
Bo Ty ciągle operujesz na Range("K42") ????

NIE, K42 to tylko przykładowy przykład :) Można w to miejsce podstawić jakiekolwiek inne komórki.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Oprogramowanie biurowe Wszystkie czasy w strefie CET (Europa)
Idź do strony Poprzedni  1, 2, 3  Następny
Strona 2 z 3

 
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.25277 sekund, zapytan = 8
contact

| Darmowe programy i porady Jelcyna | VB4all | Promocje.biz | Tansze zakupy w Helionie | Skróć długi link |