Копирование одного листа Excel на второй лист по индексу листов - PullRequest
0 голосов
/ 02 июня 2019
  1. Я хочу скопировать из одного листа Excel в другой в той же книге, используя ссылку на активный лист, а не имя листа.
  2. Я хочу ссылаться на целевой диапазон с помощью переменной.

Я не нашел никаких примеров этого.

  1. Я пытался установить

currentSheet = ActiveSheet.Name,

влиния

Worksheets(currentSheet).Range("A1").Copy Worksheets("Report").Range("A1") с "currentSheet" и currentSheet.

У меня есть следующее, чтобы найти следующую пустую строку
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
printRow = LastRow + 2

Аналогично, я попытался установить .Range("A1") в .Range("PrintRow") и .Range(PrintRow).

Sub CopyAndPrintToReport()
    'Find the last used row in a Column: column A in this example
     Dim LastRow As Long
     Dim printRow As Long
     Dim currentSheet As String
     currentSheet = ActiveSheet.Name

     Worksheets("Report").Activate
     With ActiveSheet
         LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
     End With

     printRow = LastRow + 2    

     Worksheets(currentSheet).Range("A1").Copy_ 
         Worksheets("Report").Range(printRow)

End Sub

Мне нужно сослаться на активный лист по currentSheet = ActiveSheet.Name и диапазон назначения по printRow.

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 02 июня 2019

Если вы установите переменную, вам не нужно использовать двойные кавычки для ссылки на нее (она не будет работать).

Кроме того, вы можете хранить и использовать имя листа впеременная, как правило, лучше объявить сам лист как переменную и использовать ее (или, по крайней мере, в данном случае наверняка).

Sub CopyAndPrintToReport()    
     Dim LastRow As Long
     Dim printRow As Range
     Dim currentSheet As Worksheet
     Set currentSheet = ActiveSheet

     With Worksheets("Report")
         LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
         Set printRow = .Range(.Cells(LastRow + 2, "A"), .Cells(LastRow + 2, "A"))
         'Set printRow = .Cells(LastRow + 2, "A")
         'Set printRow = .Range("A" & LastRow + 2)
     End With

     currentSheet.Range("A1").Copy printRow
End Sub

Может стоить переименовать переменные во что-то вроде sourceSheetиз currentSheet, но это происходит со временем.

Я установил printRow для своего способа выбора диапазона (больше, чем просто одна ячейка), но в комментариях можно увидеть альтернативные варианты того же действия., для одной клетки.

Пожалуйста, дайте мне знать, если я могу помочь в дальнейшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...