Скопируйте и вставьте лист Excel , значение данных ячейки листа для ссылки в коде

#excel #vba #copy-paste

#excel #vba #копировать-вставить

Вопрос:

Я пытаюсь скопировать и вставить лист в новую книгу, в новой книге не будет vba, поэтому я создаю книгу, затем один лист, и скопированные данные вставляются в этот лист. Для этого я должен ссылаться на лист, с которого копируются данные.

Лист, с которого копируются данные, будет постоянно меняться. Поэтому я ссылаюсь на лист, который нужно скопировать в ячейку B1 листа 1. Также имя целевого листа (новая книга и лист) также будет постоянно меняться, они назначаются из ячеек листа 1 B2, C2 исходного листа. Все это работает нормально,

введите описание изображения здесь

Для получения дополнительной информации см. Сообщение MR Excel внизу.

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

Объект не поддерживает это свойство или метод

 wksh(CopySheet).UsedRange.Copy 'COPY THIS SHEET
 

Это код

 ''Copy and Paste Sheet
        Application.SheetsInNewWorkbook = 1 'Number of Sheets in New Workbook
        Workbooks.Add 'Add sheet to new workbook
        With ThisWorkbook ' Now with this workbook

'' ########## Refering to WORKBOOK   SHEET from which the data is to be copied From to new Sheet ########        
Dim wkb As Excel.Workbook
Dim wksh As Excel.Worksheet
Dim CopySheet As Variant

    Set wkb = Excel.Workbooks("Test Copy Sheet3B.xlsm") ' USE THIS WORKBOOK
    Set wksh = wkb.Worksheets("Sheet1") 'USE THIS SHEET

    wksh.Range("B1") = CopySheet 'COPY THE SHEET NAMED IN THIS CELL E.G Sheet10
    wksh(CopySheet).UsedRange.Copy 'COPY THIS SHEET
    'wksh.Range("B1").UsedRange.Copy
    'wks.Sheets(Sheets("Sheet1").Range("B1").Value).Copy
    'ActiveWorkbook.Sheets(1).Range("A1").PasteSpecial xlPasteValues = CopySheet
     ActiveWorkbook.Sheets(1).Range("A1").PasteSpecial xlPasteValues 'PASTE IN NEW CREATED WORKBOOK SHEET
     
'' ############### Original Code ###############
''Copy and Paste Sheet
'   Application.SheetsInNewWorkbook = 1
'        Workbooks.Add
'    With ThisWorkbook
'        .Sheets("Sheet2").UsedRange.Copy 'Copy this sheet
'        ActiveWorkbook.Sheets(1).Range("A1").PasteSpecial xlPasteValues
'        ActiveWorkbook.Sheets(1).Name = "Data Search" ' new sheet name     
'' ############### Original Code ###############
 

Я также опубликовал это в Mr Excel Здесь есть загружаемая рабочая книга и полный код, поскольку я исправил большинство проблем, последние несколько сообщений лучше всего разместить на странице 2 Mr Excel. Это последнее, на чем я зациклился.

Комментарии:

1. Отображается ошибка, поскольку CopySheet она пуста.

2. Это помогло, у меня здесь проблема wksh(CopySheet).UsedRange.Copy ' so i changed it to this . Листы (CopySheet). UsedRange. Скопируйте ` и это сработало. Супер спасибо за вашу помощь

Ответ №1:

Ответ ниже, большое спасибо Лууку за то, что он указал мне правильное направление.

Исправление

 ''Copy and Paste Sheet
        Application.SheetsInNewWorkbook = 1
        Workbooks.Add
        With ThisWorkbook
        
Dim wkb As Excel.Workbook
Dim wksh As Excel.Worksheet
Dim CopySheet As Variant

    Set wkb = Excel.Workbooks("Test Copy Sheet3B.xlsm") ' USE THIS WORKBOOK
    Set wksh = wkb.Worksheets("Sheet1") 'USE THIS SHEET
    CopySheet = wksh.Range("B1")
    .Sheets(CopySheet).UsedRange.Copy
    ActiveWorkbook.Sheets(1).Range("A1").PasteSpecial xlPasteValues 'PASTE IN NEW CREATED WORKBOOK SHEET
 

Полный код, также размещенный в Mr Excel, см. Ссылку выше

 Private Sub CommandButton3_Click()

Application.ScreenUpdating = False
If Sheets(Sheets("Sheet1").Range("B1").Value).Range("A2").Value = "" Then
'ExportError.Show
MsgBox "Nothing to report"
Else
''Copy and Paste Sheet
        Application.SheetsInNewWorkbook = 1
        Workbooks.Add
        With ThisWorkbook
'' ########## Refering to WORKBOOK   SHEET from which the data is to be copied From to new Sheet ########
Dim wkb As Excel.Workbook
Dim wksh As Excel.Worksheet
Dim CopySheet As Variant

    Set wkb = Excel.Workbooks("Test Copy Sheet3B.xlsm") ' USE THIS WORKBOOK, name must match
    Set wksh = wkb.Worksheets("Sheet1") 'USE THIS SHEET name must match
    CopySheet = wksh.Range("B1")
    .Sheets(CopySheet).UsedRange.Copy
    ActiveWorkbook.Sheets(1).Range("A1").PasteSpecial xlPasteValues 'PASTE IN NEW CREATED WORKBOOK SHEET
     
'' Rename Tab On new Sheet
    Dim TabName As Variant
        TabName = ThisWorkbook.Worksheets("Sheet1").Range("B2").Value
    ActiveWorkbook.Sheets(1).Name = TabName
''##################
 '' Format Header in new workbook
        ActiveWorkbook.Sheets(1).Columns("A:g").ColumnWidth = 25
        ActiveWorkbook.Sheets(1).Range("A1:g1").Font.Name = "Calibri"
        ActiveWorkbook.Sheets(1).Range("A1:g1").HorizontalAlignment = xlCenter
        ActiveWorkbook.Sheets(1).Range("A1:g1").Font.Color = vbWhite
        ActiveWorkbook.Sheets(1).Range("A1:g1").Interior.ColorIndex = 16 'Color Grey
' Create a Freeze panel on new sheet
   Dim wks As Worksheet
        For Each wks In Worksheets
            wks.Activate
                With Application.ActiveWindow
                .SplitColumn = 0
            .SplitRow = 1
        End With
        Application.ActiveWindow.FreezePanes = True
            If Not ActiveSheet.AutoFilterMode Then
                ActiveSheet.Range("A1").AutoFilter
            End If
        Next wks
'Fill all BLANK CELLS with Hyphen
    Dim r As Range, LastRow As Long
        LastRow = Cells(Rows.Count, "A").End(xlUp).Row
        For Each r In ActiveWorkbook.Sheets(1).Range("A1:g" amp; LastRow)
        If r.Text = "" Then r.Value = "-"
    Next r
'Rename Sheet
    Dim SheetName As Variant
   '   Application.DisplayAlerts = False
        SheetName = ThisWorkbook.Worksheets("Sheet1").Range("B3").Value
 'Save Sheet
    ActiveWorkbook.SaveAs Filename:=(SheetName) amp; Format(Now, " dd_mm_yyyy    HH_mm_ss") amp; ".xlsx", FileFormat:=51

   Application.ScreenUpdating = True
End With
End If
End Sub

 

Комментарии:

1. Если это ответ, вы можете установить зеленую галочку справа, чтобы закрыть вопрос. Это приносит вам очки!