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

  tytuł wątku:
Wątki dyskusji

Odwołanie do danych w schowku/buforze


otwartyotwarty rozpoczął: shan postów: 7



napisał: popbart
postów: 56


umieszczony:
12 stycznia 2007
13:07

  
Próbowałem dostać się do schowka z poziomu Accessa, ale z mizernym skutkiem.
Czy ktoś ma na tym polu doświadczenie?
napisał: Trebor
postów: 1209


umieszczony:
8 stycznia 2007
16:55

  
W moim przypadku dla liczby 98.3 Twój kod wkleja właściwą liczbę ale ignoruje formatowanie w excelu (ilość miejsc po przecinku). Mam ustawiony separator części ułamkowej na kropkę.
Natomiast dla liczby 98,30000 czego mój excel nie rozpoznaje jako liczby Twój kod wkleja 9 830 000.
Przy linii
ActiveCell.Offset(a, b) = Mid(Replace(x.GetText, ",", "."), gdzie, ileEnter - gdzie)



Wkleja prawie dobrze (bez zer na końcu) ale to już można załatwić fomatowaniem.

Podobnie wychodzi przy linii
ActiveCell.Offset(a, b) = CDbl(Mid(x.GetText, gdzie, ileEnter - gdzie))



Pozdrawiam
napisał: shan
postów: 5


umieszczony:
8 stycznia 2007
13:35

  
Wielkie dzięki, Trebor.

Pobawiłem się trochę Twoim kodem i zmieniłem na ten poniżej.
Jeżeli kopiuje się obszar w Excelu, to ten kod wkleja go wartość po wartości w takim samym układzie komórek, jak w kopiowanym źródle (z uwzględnieniem pustych komórek) - przynajmniej moje dotychczasowe testy tak pokazują.

Zrobiłem sobie też test kopiując 3 rekordy z tabeli w Accessie. Normalnie Excel wkleja nagłówek plus trzy skopiowane rekordy, ten kod wkleił nagłówek i dwa rekordy (mnie interesuje kopiowanie Excel-Excel, więc na razie nie badam w tamtym kierunku).

Widzę jeszcze minusy, nad którymi będę dalej pracował - jeżeli wpiszemy w Excelu 98,3 i sformatujemy tak, aby pokazywał 5 miejsc po przecinku, to skopiowanie i wklejenie pokazuje 9830000 - tak jakby połykał przecinek. Dziwne o tyle, że sformatowanie do 2 miejsc po przecinku wkleja stringa '98,30'...

Sub PasteFormula()
  
  On Error Resume Next
  Dim x As New DataObject
  x.GetFromClipboard

  a = 0 'offset po wierszu
  b = -1 'offset po kolumnie
  
  Do
    b = b + 1
    gdzie = ileTab + 1
    ileTab = InStr(gdzie, x.GetText, Chr(9))
    ileEnter = InStr(gdzie, x.GetText, Chr(13))
    If ileTab = 0 Or ileEnter < ileTab Then
      ActiveCell.Offset(a, b) = Mid(x.GetText, gdzie, ileEnter - gdzie)
      a = a + 1
      b = -1
      ileTab = ileEnter + 1
    Else
      ActiveCell.Offset(a, b) = Mid(x.GetText, gdzie, ileTab - gdzie)
    End If
  If ileEnter = 0 Then Exit Sub
  Loop

End Sub

napisał: Trebor
postów: 1209


umieszczony:
5 stycznia 2007
19:18

  
Obszar dla mnie mało znany, ale że wątek już co nieco opadł a jestem ciekaw rozwiązania to zaproponuję coś takiego.
Wenę do tego zaczerpnąłem z tej strony http://www.cpearson.com/excel/clipboar.htm
Wymagana referencja do Microsoft Forms 2.0
Sub PasteFormula()
    On Error Resume Next
    Dim x As New DataObject
    x.GetFromClipboard
a = -1
Do
a = a + 1
gdzie = ile + 1
ile = InStr(gdzie, x.GetText, Chr(13))
If gdzie = 1 Then gdzie = 0
If ile = 0 Then ActiveCell.Offset(a, 0) = Mid(x.GetText, gdzie + 1, 1000): Exit Sub
ActiveCell.Offset(a, 0) = Mid(x.GetText, gdzie + 1, ile - gdzie - 1)
Loop

End Sub


Nie bawiłem się tu w szczególną poprawność kodu, ponieważ posiada on braki. Zakładam że dane są już w schowku. Jeśli ich źródłem jest inna aplikacja to wszystko działa tak jak założyłem. Natomiast jeśli kopiuję z excela to należy wywołać schowek ( dwa razy Ctrl+c) i kliknąc na odpowiednią pozycję ze schowka i dopiero uruchomić kod. Oczywiście jeśli kopiowanie jest w makrze wszystko przebiega prawidłowo.

Pozdrawiam
napisał: shan
postów: 5


umieszczony:
5 stycznia 2007
00:51

  
Hej,

Niestety potrzebuję uzyskać taki efekt bez wklejania tego gdzieś pośrednio, bo to nie ja mam z tego docelowo korzystać, tylko różni ludzie.

To wklejanie wartości komórka po komórce jest mi potrzebne, bo chcę dopisać kod do działającej już aplikacji. W tej aplikacji wklejenie jednej komórki jako wartość daje taki rezultat, jakbym chciał, ale jak wklejam już obszar (np dwie komórki) to efekt jest inny, dlatego chciałem zrobić eksperyment z zasymulowaniem wklejania po jednej wartości. Liczę, że wtedy zadziała.

Widzę, że wcześniej nie napisałem, więc dla ścisłości pracuję w MS Excel 2003.

Jarek
napisał: shan
postów: 5


umieszczony:
4 stycznia 2007
21:52

  
Witam wszystkich,

Mam problem, z którym nie umiem sobie poradzić mimo wsparcia googla. Potrzebuję się dowiedzieć, jak odwołać się do komórek znajdujących się w schowku/buforze (nie wiem jak to fachowo się nazywa). Chcę się dowiedzieć, bo potrzebuję napisać makro, które przy wklejaniu skopiowanego gdzieś indziej zestawu komórek spowoduje wklejenie ich w moim skoroszycie jako wartości, ale komórka po komórce (nie całość naraz, jak dzieje się to w przypadku 'paste special' -> 'values'). Podejrzewam, że takie skopiowane komórki to obiekt typu 'range'. Jeśli wiedziałbym jak się do niego odwołać, z resztą kodu powinienem sobie poradzić.

Pozdrawiam, Jarek


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z