помогите, создана книга с кодом,создаем в панели быстрого доступа общую кнопку "макросы" и кнопки "My_Copy", "My_Paste". сохраняем книгу под другим именем. при запуске макроса в новой книге с помощью кнопок "My_Copy", "My_Paste" макрос работает, но только еще открывается предыдущая книга/файл с макросом. это происходит только именно с созданными отдельными кнопками, если залазить через общую кнопку/вкладку "макросы" первоначальная книга не открывается. Как лечится?
вот код:
'Этим макросом копируем данные
Sub My_Copy()
If Selection.Count > 1 Then
Set rCopyRange = Selection.SpecialCells(xlVisible)
Else: Set rCopyRange = ActiveCell
End If
End Sub
'Этим макросом вставляем данные, начиная с выделенной ячейки
Sub My_Paste()
If rCopyRange Is Nothing Then Exit Sub
If rCopyRange.Areas.Count > 1 Then MsgBox "Вставляемый диапазон не должен содержать более одной области!", vbCritical, "Неверный диапазон": Exit Sub
Dim rCell As Range, li As Long, le As Long, lCount As Long, iCol As Integer, iCalculation As Integer
Application.ScreenUpdating = False
iCalculation = Application.Calculation: Application.Calculation = -4135
For iCol = 1 To rCopyRange.Columns.Count
li = 0: lCount = 0: le = iCol - 1
For Each rCell In rCopyRange.Columns(iCol).Cells
Do
If ActiveCell.Offset(li, le).EntireColumn.Hidden = False And _
ActiveCell.Offset(li, le).EntireRow.Hidden = False Then
ActiveCell.Offset(li, le) = rCell: lCount = lCount + 1
End If
li = li + 1
Loop While lCount <= rCell.Row - rCopyRange.Cells(1).Row
Next rCell
Next iCol
Application.ScreenUpdating = True: Application.Calculation = iCalculation
End Sub
вот код:
'Этим макросом копируем данные
Sub My_Copy()
If Selection.Count > 1 Then
Set rCopyRange = Selection.SpecialCells(xlVisible)
Else: Set rCopyRange = ActiveCell
End If
End Sub
'Этим макросом вставляем данные, начиная с выделенной ячейки
Sub My_Paste()
If rCopyRange Is Nothing Then Exit Sub
If rCopyRange.Areas.Count > 1 Then MsgBox "Вставляемый диапазон не должен содержать более одной области!", vbCritical, "Неверный диапазон": Exit Sub
Dim rCell As Range, li As Long, le As Long, lCount As Long, iCol As Integer, iCalculation As Integer
Application.ScreenUpdating = False
iCalculation = Application.Calculation: Application.Calculation = -4135
For iCol = 1 To rCopyRange.Columns.Count
li = 0: lCount = 0: le = iCol - 1
For Each rCell In rCopyRange.Columns(iCol).Cells
Do
If ActiveCell.Offset(li, le).EntireColumn.Hidden = False And _
ActiveCell.Offset(li, le).EntireRow.Hidden = False Then
ActiveCell.Offset(li, le) = rCell: lCount = lCount + 1
End If
li = li + 1
Loop While lCount <= rCell.Row - rCopyRange.Cells(1).Row
Next rCell
Next iCol
Application.ScreenUpdating = True: Application.Calculation = iCalculation
End Sub