Что-то в корне не так со скриптом копирования / вставки из другой книги - PullRequest
0 голосов
/ 11 июля 2019

Извините, если это кажется легкомысленным, но я потратил последние 8 часов, разбивая голову об стену этим. Независимо от того, какой вариант я пробую, этот код постоянно выдает ошибки всех степеней. Я компетентен, и я взял так много примеров и ничего из них не работает. Я начинаю думать, что что-то не так с тем, где код находится в моей книге. Я положил его в Module1, где я обычно храню весь код.

Актуальная проблема - копировать / вставлять значения из одного листа книги в другой после выбора файла во всплывающем окне. Вот и все. Структура таблицы та же, но ее нужно переместить на 5 строк вверх на целевом листе.

Я пробовал так много разных типов кода, которые вы можете увидеть как закомментированные, когда я пытаюсь повторить что-то другое. В ОТНОШЕНИИ ОТКРЫТОГО РАБОЧЕГО КНИГА НЕ БУДЕТ По-прежнему выдает ошибки, как будто я пытаюсь получить доступ к некоторой скрытой базе данных darknet вместо файла рядом с ним ......

Я пробовал так много разных подходов, но все они заканчиваются разными ошибками. приведенный выше код дает мне «Ошибка выполнения 13. Тип, несоответствие.» в строке в цикле, который пытается скопировать код.

Я думаю, что все это связано с тем, что Excel не может правильно ссылаться на открытый файл. хотя это должно .......................

 Sub ImportEstimatorData()
    Dim xTargetWb As Workbook 'Consolidator
    Dim xSourceWb As Workbook 'Estimator
    Set xTargetWb = ActiveWorkbook

    Dim xTargetRng As Range 'Target row/column in new sheet, changes row starting
    Dim xSourceRng As Range 'Source data from Estimator, Never changes

    Dim xSourceSt As Worksheet
    Dim xTargetSt As Worksheet

    Sheets("CR Data").Activate

    Set xTargetSt = ThisWorkbook.Sheets("CR Data")

    Dim vFile As Variant
    'fileToOpen = Application _
    ' .GetOpenFilename("Text Files (*.txt), *.txt")
    'If fileToOpen <> False Then
    ' MsgBox "Open " & fileToOpen
    'End If

    'Dim vFile As Variant
    'vFile = Application.GetOpenFilename("Excel-files,*.xlsx", 1, "Select One File To Open", , False)
    'if the user didn't select a file, exit sub
    'If vFile = "" Then Exit Sub
    'Set targetworkbook
    'Set xSourceWb = Workbooks.Open(vFile)
        If Not Application.OperatingSystem Like "*Mac*" Then
            ' Is Windows.
        vFile = Application.GetOpenFilename("Excel-files,*.xlsm", 1, "Select One File To Open", , False)
'if the user didn't select a file, exit sub
            If vFile = "" Then
            Exit Sub
            End If
        Else
        Exit Sub
        End If
            ' Is a Mac and will test if running Excel 2011 or higher.
      ' If Val(Application.Version) > 14 Then
       '         Set xSourceWb = Select_File_Or_Files_Mac

        '        End If
          '      End If

        'Workbooks.Open (vFile)

        Set xSourceWb = Workbooks.Open(vFile)

        'Workbooks(xSourceWb).Open
        'Workbooks(xSourceWb).Activate

        'Set Sheets for both Source & Target Workbooks

        'Set xSourceSt = xSourceWb.Sheets("Output data GPE")

        'Set xTargetRng = xTargetSt.Range(Cells(4, 2), Cells(80, 16))


        Sheets("Output Sheet GPE").Activate 'Range(Cells(1, 1), Cells(2, 2)).Select
        Set xSourceWb = ActiveWorkbook

        'xSourceWb.Activate

        'Set xSourceRng = xSourceSt.Range(Cells(4, 2), Cells(80, 16))

        'xSourceRng.Copy xTargetRng

        'Workbooks(xSourceWb).Worksheets("Output Sheet GPE").Range(Cells(8, 2), Cells(84, 16)).Copy Workbooks(xTargetWb).Worksheets("CR Data").Range(Cells(4, 2), Cells(80, 16))

        For i = 8 To 84

        For j = 2 To 16

        Workbooks(xSourceWb).Worksheets("Output Sheet GPE").Cells(i, j) = Workbooks(xTargetWb).Worksheets("CR Data").Cells(i - 4, j)
   'Debug error here

        Next j

        Next i


        'Workbooks(xWb).Worksheets("CR Data").Range(Cells(4, 2), Cells(80, 16)).Copy Workbooks(xTargetWb).Worksheets("C").Range(Cells(4, 2), Cells(80, 16))

        'Workbooks(xTargetWb).Worksheets("CR Data").Range(Cells(4, 2), Cells(80, 16)).PasteSpecial Paste:=xlPasteValues

        'Workbooks(xTargetWb).Sheets("CR Data").Range(Cells(4, 2), Cells(80, 16)).Value = Workbooks(xSourceWb).Sheets("Output Sheet GPE").Range(Cells(4, 2), Cells(80, 16))

       'xSourceWb.Close
    'End If
'End With

End Sub'

1 Ответ

0 голосов
/ 12 июля 2019

Спасибо, BigBen!Это было именно так!Я удалил кодировщик 'workbooks', и он работал: -)

Скопируйте / вставьте ответ ниже для будущего прочтения: xSourceWb и xTargetWb уже являются объектами Workbook.Не включайте их в рабочие тетради.Тем не менее, вам не нужен цикл для этого.- BigBen 16 часов назад

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