Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

excel - wklejanie skopiowanych komorek bez utraty formatowan

her_miona 09 Lip 2009 16:31 7545 5
  • #1 09 Lip 2009 16:31
    her_miona
    Poziom 9  

    Witam,

    ponownie napotkalam problem z ktorym nie moge sobie poradzic.

    Chcialabym tak zabezpieczyc komorki aby po skopiowaniu (komorki, tekstu itp) i wklejeniu jej do (w tym wypadku) tabelki, nie utracic formatowania.

    Rownoczesnie dana komorka ma przypisane ograniczenie wprowadzania znakow specjalnych:




    Code:
    Sub ValidateProjectName(Target As Range)
    

       If Target.Address() = "$E$7" Then
       
            Dim RegEx As Object
            Dim strTest As String
            Dim valid As Boolean
       
            Set RegEx = CreateObject("VBScript.RegExp")
            RegEx.Pattern = "[^\w]"
           
            strTest = ActiveSheet.Range("$E$7").Text
            valid = RegEx.test(strTest)
           
            If valid = True Then
               
                MsgBox ("Project name can contain only alphanumeric characters, hyphen and underscore." & Chr(13) & "Please enter correct project name.")
                ActiveSheet.Range("$E$7").ClearContents
                ActiveSheet.Range("$E$7").Activate
               
            End If
           
        End If
    End Sub


    i takze wymagane jest zachowanie powyzszego.

    Bardzo prosze o pomoc i dzieki z gory

    0 5
  • #2 09 Lip 2009 18:13
    marek003
    Poziom 40  

    Nie wiem do końca czy o to chodzi.
    Kopiowanie chcesz przeprowadzać makrem czy z ręki (myszki)?
    Jeżeli z ręki to zamiast zwykłego wklej - prawoklik wklej specjalnie i wybierz wklej tylko wartości.
    A jak makrem

    Code:
    ActiveSheet.Range("$E$7").PasteSpecial Paste:=xlPasteValues

    Oczywiście wcześniej trzeba coś skopiować w stylu np.
    Code:
    ActiveSheet.Range("A1").Copy

    0
  • #3 10 Lip 2009 10:02
    her_miona
    Poziom 9  

    Moze nie do konca jasno wyjasnilam problem.

    Ja oczywiscie wiem jak to zrobic, chodzi o to, ze osoby uzywajace tabelki sa troche mniej rozgarnieci i wklejaja skopiowane komorki na chama co rozwala formatowanie.

    Chodzi mi o takie zablokowanie komorki (myslalam tez o formatowaniu w locie - czyli zeby juz po wklejeniu niesformatowanego tekstu) zeby w efekcie finalnym zachowac pierwotne formatowanie.

    Uf. Wystarczajaco jasne? :)

    0
  • #4 10 Lip 2009 13:19
    marek003
    Poziom 40  

    Przyznam że też myślałem żeby np przy przeliczaniu arkusza

    Code:
    Private Sub Worksheet_Calculate()
    
    'odpowiedni format komórek
    End Sub

    albo zmianie w arkuszu
    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    
    'odpowiedni format komórek
    End Sub

    wstawiać dany format poszczególnym komórkom.

    Innej możliwości nie widzę ("protect" nie ma takiej właściwości [przynajmniej ja nie znalazłem] by chronił wszystko oprócz wartości, a jeszcze jak by już to potrafił to żeby nie krzyczał że błąd bo ktoś chce zmienić format).

    Ewentualnie można się zastanowić (jeżeli dane sa wklejane zawsze w to samo miejsce i zawsze mają to samo ułożenie kopiowanego żródła) by np. zrobić przycisk wklej i obsługującym powiedzieć by korzystali tylko z przycisku.

    A może cały proces kopiowania i wklejania włączyć pod przycisk "przerzuć dane" i wtedy wszystko można zrobić.

    1
  • #5 10 Lip 2009 16:37
    her_miona
    Poziom 9  

    Niekoniecznie o to mi chodziło :)
    Raczej o coś takiego: Link tylko nie do konca mi to dziala nawet po zmianach :(

    0
  • #6 10 Lip 2009 19:43
    marek003
    Poziom 40  

    Bardzo ciekawy link :)

    Dalej nie wiem czy dobrze rozumiem ale...
    Wykorzystując idee z linka co podałaś można zmienić przypisanie zadanie skrótom klawiszowym (i przyciskom z menu zwykłego i kontekstowego - ale to bardziej skomplikowane). Podstawić tam własny kod wykorzystując np. makro z "wklej specjalne - wartości". Z tym że jak to autor napisał jest "zylion" sposobów wklejania i zawsze ktoś może znaleźć ominięcie. Np. w powyższym autor nie przewidział skopiowania poprzez - prawoklik (menu kontekstowe) i wstaw komórki.

    Piszę o samym kopiowaniu - na razie bez sprawdzania (validacji).
    Przykład:
    To wpisz w w module:

    Code:
    Public Sub WklejTylkoWartosc()
    

    If Application.CutCopyMode <> False Then 'sprawdza czy jest coś skopiowane
    Selection.PasteSpecial Paste:=xlPasteValues 'kopiuje w zaznaczenie tylko wartość
    End If
    End Sub

    Code:
    Sub wklejanie()
    

    'Zamiana standardowej funkcji copy na makro "WklejTylkoWartosc"
       
        Application.OnKey "^v", "WklejTylkoWartosc" 'Ctrl+V
        Application.OnKey "+{Insert}", "WklejTylkoWartosc" 'Shift+Insert
    End Sub

    Code:
    Sub WylaczWklejanie()
    

        Application.OnKey "^v"
        Application.OnKey "+{Insert}"

    End Sub

    W ThisWorkbooks wklej procedury zamieniające skróty klawiszowe przy aktywacji i przywracające działąnie przy dezaktywacji arkusza.
    Code:
    Private Sub Workbook_Activate()
    
    Wklejanie
    End Sub

    Code:
    Private Sub Workbook_Deactivate()
    
    WylaczWklejanie
    End Sub

    To tyle jeżeli chodzi o wklejanie wyłącznie wartości bez zmiany formatu.
    (pod przyciskami - dwie metody)

    Jeżeli chcesz zabezpieczyć inne opcje (klikanie myszką itd. przeanalizuj i zastosuj (z linku ) procedurę "AddCatch" z poszczególnymi parametrami np "Dummy", 22 odpowiada za "wklej" z menu zwykłego (w Edycja) i kontekstowego (prawoklik myszki).
    Pamiętaj aby po wyjściu z arkusza wyłączyć podmiany.

    Dla pewności ściągnij z tej strony co podałaś przykładowy plik (CatchPasteDemo). Jakbyś nawet zapomniała wyłączyć podmianę włączenie i wyłączenie tego pliku wyłączy wszystkie przypisania.

    Samą procedurę sprawdzania (validacji) możesz wstawić w procedurę "WklejTylkoWartosc" (właściwie tak jak to jest w linku).

    0