Wpis z mikrobloga

#excel #office #vba

Walcze aby wklejał mi zakres w kazdy sheet o nazwie od 1-10.

Excel natomiast 1-10 uważa za numeracje sheetow chyba bo wkleja mi wartosc nawet gdy shett sie nazywa jakos inaczej.

Jak ogarnac ten loop??

mam cos takiego

Sub wkle()

Dim i As Integer

Dim sh As Worksheet

For i = 1 To 12

ActiveSheet.Range("S46:U52").Copy

Worksheets(i).Range("S46:U52").PasteSpecial ----------------- tu wywala mi blad
Next i

End Sub
  • 11
via Wykop Mobilny (Android)
  • 0
@KwasneJablko: czyli to jest kwestia adresowania nazwy samej w sobie. Excel adresuje nazwę i numer. Ja bym:
1. sprawdził wszystkie skoroszyty, może poprzednio użyte makro wprowadza zmiany w pierwszych 12 a nie we wszystkich, wtedy da się to uratować
2. Spróbował drugiej metody adresowania skoroszytu Sheets(CStr(i)) pod tym samym kątem. Któreś z tych 2 powinno zadziałać albo dla skoroszytów 1-12 albo dla 12 pierwszych skoroszytów.
@Waspin:

ok kolejny blocker rozwiazany. to dziala natomiast jak nie ma ktoregos z 12 sheetow to mi wywala error. jak to obejsc?

to juz ostatnie na dzis i ide spac :)dzieki

Sub wkle()
Dim sh As Worksheet
Dim i As Long

For i = 1 To 12

ActiveSheet.Range("S46:U52").Copy
Set sh = Sheets(CStr(i))
sh.Range("S46:U52").PasteSpecial

Next i

End Sub
@KwasneJablko Worksheets(""" & i & """). Ot i cała filozofia ;) Worksheets(5) - to piąty arkusz, Worksheets("5") - to arkusz o nazwie 5, dlatego musisz wstawić i w cudzysłów ;)

Żeby nie wywalał błąd to wyłącz obsługę błędów ;)
On error resume next
Set sh = Sheets(CStr(i))
sh.Range("S46:U52").PasteSpecial
On error goto 0
@KwasneJablko:
Zrób to tak:

Sub wkle()
Dim sh As Worksheet
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Weekly Volume Calc")

Dim rng As Range
Set rng = ws.Range("S46:U52")

Dim i As Long
Dim j As Long
For i = 1 To 12
For j = 1 To Worksheets.Count
If Worksheets(j).Name = CStr(i) Then
Set sh = Sheets(CStr(i))
sh.Range("S46:U52").Value = rng.Value
End If
Next j
Next i
End Sub

Zmień sobie nazwę
@ZimnyKalmar: dzieki za opisowe wytlumaczenie.

a gdybym chcial "Set rng =..." ustawic 3 range to jak to zrobic?

Set rng = ws.range("S46:U52")
Set rng = ws. range("S146:U152")
Set rng = ws. range("S246:U252")

I wtedy w kazdy z tych rng wkleji mi to co skopiuje?
@KwasneJablko:
W ten sposób nadpisałbyś poprzednie Range, więc rng byłoby tylko takie jak w ostatniej linijce, czyli
ws. range("S246:U252")
Zadeklaruj po prostu kilka innych Range'ów
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range

Set rng1 = ws.range("S46:U52")
Set rng2 = ws. range("S146:U152")
Set rng3 = ws. range("S246:U252")