Wątek przeniesiony 2021-09-16 10:11 z Inne języki programowania przez cerrato.

VBA, wklejanie działa tylko czasami

0

Dzień dobry.

Mam taki kod:

Sub skopiujDruk(i As Integer, nazwaArkusza As String)
    Dim ws As Worksheet
    Set ws = Worksheets(nazwaArkusza)
    
    Dim r As Range
    Set r = ws.Range(Cells(1, 1), Cells(39, 9))
    
    r.Copy
    
    Dim cel As Range
    Set cel = ws.Range("J1")
    
    cel.PasteSpecial xlPasteAll
End Sub

I on działa, ale gdy zamiast ws.Range("J1") użyję ws.Range(Cells(1, 1 + 9 * (i - 1)), Cells(39, 9 + 9 * (i - 1))), to wkleja mi jakoś tak pokracznie, wszystko się przesuwa i nie wiadomo czemu. Jak obejść ten problem?

Albo inaczej, jak przekazać metodzie Range adres kolejnych komórek, w formacie tekstowym, w stylu "J1".
Dzięki.

PS.
Próbowałem też przekazać adres jednej komórki, w stylu Range(Cells(1, 1 + 9 * (i - 1))), ale wkleja identycznie pokracznie.

Kod który nie działa:

Sub skopiujDruk(i As Integer, nazwaArkusza As String)
    Dim ws As Worksheet
    Set ws = Worksheets(nazwaArkusza)
    
    Dim r As Range
    Set r = ws.Range(Cells(1, 1), Cells(39, 9))
    
    r.Copy
    
    Dim cel As Range
    Set cel = ws.Range(Cells(1, 1 + 9 * (i - 1)), Cells(39, 9 + 9 * (i - 1)))
    
    cel.PasteSpecial xlPasteAll
End Sub

PS.

Dodam, że vba wkleja mi tak, że całość jest przesunięta o 1 kolumnę w tył. Jak użyję PasteSpecial xlPasteValues to nie ma przesunięcia, ale jest niesformatowana tabela.

0

Sam kod działa poprawnie (sprawdziłem zarówno PasteAll, jak i PasteValue - zachowuje się poprawnie tak samo). Prawdopodobnie gdzieś masz połączone komórki i wtedy może głupieć...

0

Dziękuję za odpowiedź.

Przechytrzyłem VBA i skorzystałem z funkcji: http://stackoverflow.com/questions/12796973/function-to-convert-column-number-to-letter

Użyłem jej do zapisania adresu, przez Col_Letter(numerKolumny) & "1"
I się udało.

Faktycznie, mam scalone komórki, ale dlaczego, w takim razie, jeden sposób działa, a inny, nie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1