скопировать данные из другой книги в текущий рабочий лист

Я в основном застрял. У меня есть код, который позволяет мне просматривать файл, как только файл выбран, он копирует все данные в этом файле, а затем позволяет мне выбирать рабочий лист из любой открытой книги в то время. Как только рабочий лист выбран [это то, где я застреваю], я хочу, чтобы он вставлял его в j7. вместо этого он не делает этого, имея в виду, что я буду менять имя файла каждый день, так как он имеет дату текущего дня на нем. вот мой код:

Sub Macro4() ' ' Macro4 Macro ' ' Range("A1").Select Dim fileStr As String fileStr = Application.GetOpenFilename() If fileStr = "False" Then Exit Sub Workbooks.Open fileStr Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Window.Sheets(Array("Forecast_workings")).Select{**this is where i want to be able to select a worksheet from any open workbook and it will paste the data in cell J7 of that worksheet.** Range("J7").Select Application.CutCopyMode = False Range("C16:C27").Select Selection.Copy Range("E16").Select ActiveSheet.Paste Application.CutCopyMode = False Range("G16:G27").Select Selection.Copy Range("C16").Select ActiveSheet.Paste Application.CutCopyMode = False Range("O16").Select End Sub 

Я вижу много ошибок в вашем коде.

Прежде всего. Вы избегаете использования .Select . ИНТЕРЕСНО ЧИТАТЬ

Если я правильно вас понял, чтобы получить имя листа, который пользователь выбирает во время выполнения , вы можете использовать Application.InputBox с Type:=8 . Это вернет диапазон и из него вы можете использовать .Parent.Name чтобы получить имя рабочего листа.

Это то, что вы пытаетесь?

Ваш код может быть записан как ( UNTESTED )

 Sub Macro4() Dim fileStr As String Dim wb As Workbook, thiswb As Workbook Dim ws As Worksheet, thisws As Worksheet Dim Lcol As Long, LRow As Long Dim Ret As Range '~~> Set an object for thisworkbook and worksheet Set thiswb = ThisWorkbook '~~> Change this to the sheet from where you want to copy Set thisws = thiswb.Sheets("Sheet1") '~~> Let user choose a file fileStr = Application.GetOpenFilename() If fileStr = "False" Then Exit Sub '~~> Set an object for workbook opened and it's worksheet Set wb = Workbooks.Open(fileStr) On Error Resume Next Set Ret = Application.InputBox("Select a cell from the sheet you want to choose", Type:=8) On Error GoTo 0 If Ret Is Nothing Then Exit Sub Set ws = wb.Sheets(Ret.Parent.Name) With thisws '~~> Find Last column in row 2 Lcol = .Cells(2, .Columns.Count).End(xlToLeft).Column '~~> Find last cell in Col 1 LRow = .Range("A" & .Rows.Count).End(xlUp).Row '~~> Copy your range directly to new worksheet selected .Range(.Cells(2, 1), .Cells(LRow, Lcol)).Copy ws.Range("J7") .Range("C16:C27").Copy ws.Range("E16") .Range("G16:G27").Copy ws.Range("C16") Application.CutCopyMode = False End With End Sub 

при работе с несколькими книгами не используйте range (), а wb.range (), где wb определяется с помощью функции set. Также может быть сложно. Предпочтительно назовите лист, на котором вы используете листы («что угодно»). И для последнего, чтобы скопировать вещи, не используйте активацию / выбор, просто выполните следующие действия:

 wb.sheets("whatever").range() thisworkbook.sheets("watever2").range(""). 

Я также видел, что вы не используете application.enableevents = false / true, поэтому события будут запускаться как сумасшедшие, и ваш activesheet (или ячейка) изменится как сумасшедший, если у вас есть код в разделе workheet_change.

Interesting Posts

424 Ошибка времени выполнения

Поменяйте местами оси x и y без ручной замены значений

VBA UDF Variant / Integer и Variant / String Массивы печатают только первое значение для вывода ячеек

Excel – сопоставление имен продуктов с идентификаторами продуктов из отдельной книги

Несколько гиперссылок в одной ячейке

Динамическая загрузка сборки

Чтение изображений со всех листов Excel с использованием Apache POI

Формула Excel, которая возвращает значение, основанное на совпадении и самой ранней дате

Удаление данных с одного листа, который появляется в другом, используя VBA

Как только i Вычислить две цифры для вывода должны быть разными, чем Excel в php

Условное форматирование в несмежном диапазоне

VBA импортирует CSV-файл для Excel

Ошибка matlab при использовании xlsread в цикле

Скопируйте TDataSet в XLS через ADO

Excel 2010 VBA – захватывать значения на основе даты, добавлять, вставлять в другую книгу (включая код)

Давайте будем гением компьютера.