Прокручивайте диапазон и копируйте вставку между книгами - PullRequest
1 голос
/ 15 октября 2019

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

    Source      Target      Cell/Row
    G29         G29         Cell
    G30         G32         Cell
    G31         G33         Row

Например, на основании вышеизложенного код VBA должен копировать содержимое ячейки G29 в исходной книге и вставлять его в G29 в целевой книге и т. Д. Я определил диапазон «Source» как rng и зациклил диапазон, чтобы определить целевой диапазон и будь то ячейка или строка, которая должна быть вставлена ​​при копировании. Однако по какой-то причине я получаю ошибку при первом определении моих переменных cell_source, cell_target и cell_cellrow, а также получаю ошибки при запуске цикла, в котором я устанавливаю целевую ячейку в целевой книге, равную переменной cell_source_input. Я был бы очень признателен, если кто-нибудь может помочь с этим.

    Sub transferScript()

    Dim wbMain As Workbook: Set wbMain = ThisWorkbook
    Dim wbMainDashboard As Worksheet: Set wbMainDashboard = wbMain.Worksheets("Dashboard")
    Dim CopyLastRow As Long
    Dim rng As Range: Set rng = Application.Range("Dashboard!E9:E15") 'change to E150 !!

    sourceModel = wbMainDashboard.Range("FILE_SOURCE")
    targetModel = wbMainDashboard.Range("FILE_TARGET")

    Dim wbSource As Workbook: Set wbSource = Workbooks.Open(Filename:=sourceModel)
    Dim wbTarget As Workbook: Set wbTarget = Workbooks.Open(Filename:=targetModel)

    'Source workbook
    Dim wsKpInput_source As Worksheet: Set wsKpInput_source = wbSource.Worksheets("INPUT (KP)")
    Dim wsSCEInput_source As Worksheet: Set wsSCEInput_source = wbSource.Worksheets("INPUT (SCE)")
    'Target workbook
    Dim wsKpInput_target As Worksheet: Set wsKpInput_target = wbTarget.Worksheets("INPUT (KP)")
    Dim wsSCEInput_target As Worksheet: Set wsSCEInput_target = wbTarget.Worksheets("INPUT (SCE)")

    'Error handling
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    Dim i As Integer
    Dim cell_source As String
    Dim cell_target As String
    Dim cell_cellrow As String

    Dim cell_source_input As Variant

    For i = 0 To rng.Rows.Count
        'Definition of source cell, target cell, and cell_row input
        cell_source = rng.Cells
        cell_target = rng.Cells.Offset(rowOffset:=0, columnOffset:=1)
        cell_cellrow = rng.Cells.Offset(rowOffset:=0, columnOffset:=3)

        cell_source_input = wsKpInput_source.Range(cell_source)

        If cell_cellrow = "Cell" Then
            wsKpInput_target.Range(cell_source) = cell_source_input
        End If
    Next

    End Sub

1 Ответ

1 голос
/ 15 октября 2019

Предположим, что в предыдущем коде нет ошибки:

Dim i As Integer
Dim cell_source As String
Dim cell_target As String
Dim cell_cellrow As String

Dim cell_source_input As Variant

For i = 0 To rng.Rows.Count
    'Definition of source cell, target cell, and cell_row input
    cell_source = rng.Cells
    cell_target = rng.Cells.Offset(rowOffset:=0, columnOffset:=1)
    cell_cellrow = rng.Cells.Offset(rowOffset:=0, columnOffset:=3)

    cell_source_input = wsKpInput_source.Range(cell_source)

    If cell_cellrow = "Cell" Then
        wsKpInput_target.Range(cell_source) = cell_source_input
    End If
Next

Должно быть:

Dim i As Integer
Dim cell_source As String
Dim cell_cellrow As String
Dim cell_source_input As Variant

For i = 0 To rng.Rows.Count
    'Definition of source cell, target cell, and cell_row input
    cell_source = rng.Cells(i,1).Value 'It seems to, but it is not clear with no sample
    cell_cellrow = rng.Cells(i,1).Offset(0, 3).Value
    cell_source_input = wsKpInput_source.Range(cell_source)

    If cell_cellrow = "Cell" Then
        wsKpInput_target.Range(cell_source) = cell_source_input
    End If
Next

Надеюсь, это поможет ... Всегда будет лучше, если вы предоставите образецвход и ожидаемый результат. Во всяком случае, в коде, предшествующем этой процедуре, есть несколько проблем: sourceModel не определен и кажется, что Range, targetModel не определен и, кажется, это Range, Workbooks.Open(Filename:=sourceModel) пытаетсяоткрыть один файл с именем файла, что он принимает диапазон ... проверить их ...

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