Добрый день! Подскажите, пожалуйста, как в этом макросе: [vba]
Код
Sub DataCopy() Dim n As Long, rngData As Range Set rngData = Sheets("Data").Range("A1:A15") rngData.Copy For n = 1 To ThisWorkbook.Worksheets.Count If ThisWorkbook.Worksheets(n).Name = "1_Yes" Or ThisWorkbook.Worksheets(n).Name = "3_Yes" _ Or ThisWorkbook.Worksheets(n).Name = "4_Yes" Or ThisWorkbook.Worksheets(n).Name = "5_Yes" _ Or ThisWorkbook.Worksheets(n).Name = "7_Yes" Then With Sheets(n) .Cells(1, 1).PasteSpecial Paste:=xlValues End With End If Next n End Sub
[/vba] упростить эту запись: [vba]
Код
If ThisWorkbook.Worksheets(n).Name = "1_Yes" Or ThisWorkbook.Worksheets(n).Name = "3_Yes" _ Or ThisWorkbook.Worksheets(n).Name = "4_Yes" Or ThisWorkbook.Worksheets(n).Name = "5_Yes" _ Or ThisWorkbook.Worksheets(n).Name = "7_Yes" Then
[/vba] т.е. вместо того, чтобы перечислять листы через Or, задать переменную листам.
Добрый день! Подскажите, пожалуйста, как в этом макросе: [vba]
Код
Sub DataCopy() Dim n As Long, rngData As Range Set rngData = Sheets("Data").Range("A1:A15") rngData.Copy For n = 1 To ThisWorkbook.Worksheets.Count If ThisWorkbook.Worksheets(n).Name = "1_Yes" Or ThisWorkbook.Worksheets(n).Name = "3_Yes" _ Or ThisWorkbook.Worksheets(n).Name = "4_Yes" Or ThisWorkbook.Worksheets(n).Name = "5_Yes" _ Or ThisWorkbook.Worksheets(n).Name = "7_Yes" Then With Sheets(n) .Cells(1, 1).PasteSpecial Paste:=xlValues End With End If Next n End Sub
[/vba] упростить эту запись: [vba]
Код
If ThisWorkbook.Worksheets(n).Name = "1_Yes" Or ThisWorkbook.Worksheets(n).Name = "3_Yes" _ Or ThisWorkbook.Worksheets(n).Name = "4_Yes" Or ThisWorkbook.Worksheets(n).Name = "5_Yes" _ Or ThisWorkbook.Worksheets(n).Name = "7_Yes" Then
[/vba] т.е. вместо того, чтобы перечислять листы через Or, задать переменную листам.drugojandrew
drugojandrew, привет например, такой вариант: [vba]
Код
Sub DataCopy() Dim n As Long, sNm As String sNm = "~1_Yes~3_Yes~4_Yes~5_Yes~7_Yes~" With ThisWorkbook .Sheets("Data").Range("A1:A15").Copy For n = 1 To .Sheets.Count If InStr(sNm, .Sheets(n).Name) Then Sheets(n).Cells(1, 1).PasteSpecial Paste:=xlValues Next n End With Application.CutCopyMode = False End Sub
[/vba]
drugojandrew, привет например, такой вариант: [vba]
Код
Sub DataCopy() Dim n As Long, sNm As String sNm = "~1_Yes~3_Yes~4_Yes~5_Yes~7_Yes~" With ThisWorkbook .Sheets("Data").Range("A1:A15").Copy For n = 1 To .Sheets.Count If InStr(sNm, .Sheets(n).Name) Then Sheets(n).Cells(1, 1).PasteSpecial Paste:=xlValues Next n End With Application.CutCopyMode = False End Sub
Sub DataCopy() Dim strName As Variant 'String не подходит With ThisWorkbook .Sheets("Data").Range("A1:A15").Copy For Each strName In Array("1_Yes", "3_Yes", "4_Yes", "5_Yes", "7_Yes") Sheets(strName).Cells(1, 1).PasteSpecial Paste:=xlValues Next strName End With Application.CutCopyMode = False End Sub
[/vba]
[p.s.]А конкретно эту задачу можно даже без цикла - мультишитовой вставкой, т.е. с предварительным выделением всех нужных листов и затем собственно вставкой в один из них - эффект вставки распространится на все выделенные:[/p.s.] [vba]
Код
Sub DataCopy() With ThisWorkbook .Sheets("Data").Range("A1:A15").Copy .Sheets(Array("1_Yes", "3_Yes", "4_Yes", "5_Yes", "7_Yes")).Select .Sheets("1_Yes").Cells(1, 1).PasteSpecial Paste:=xlValues End With Application.CutCopyMode = False End Sub
Sub DataCopy() Dim strName As Variant 'String не подходит With ThisWorkbook .Sheets("Data").Range("A1:A15").Copy For Each strName In Array("1_Yes", "3_Yes", "4_Yes", "5_Yes", "7_Yes") Sheets(strName).Cells(1, 1).PasteSpecial Paste:=xlValues Next strName End With Application.CutCopyMode = False End Sub
[/vba]
[p.s.]А конкретно эту задачу можно даже без цикла - мультишитовой вставкой, т.е. с предварительным выделением всех нужных листов и затем собственно вставкой в один из них - эффект вставки распространится на все выделенные:[/p.s.] [vba]
Код
Sub DataCopy() With ThisWorkbook .Sheets("Data").Range("A1:A15").Copy .Sheets(Array("1_Yes", "3_Yes", "4_Yes", "5_Yes", "7_Yes")).Select .Sheets("1_Yes").Cells(1, 1).PasteSpecial Paste:=xlValues End With Application.CutCopyMode = False End Sub