Хорошо, поэтому я относительно не знаком с Excel VBA. Я пытаюсь сделать что-то, что кажется мне очень простым, и есть много, много примеров того, как это сделать, которые я прочитал исчерпывающе, но я не могу пройти мимо этого так ... вот и все.Копирование диапазона ячеек из одной книги в другую дает ошибку 400
Я пытаюсь вставить диапазон ячеек из одного листа в другой в Excel Microsoft Office Professional Plus 2010. Я думаю, что я уменьшил проблему до абсолютной простейшей формы, чтобы проиллюстрировать проблему. Это всего лишь фрагмент. Переменные VictimResults и TempWorksheet устанавливаются выше. Я не включил код, потому что думал, что это может смутить артикуляцию проблемы.
Dim SourceWorksheet As Worksheet
Dim TargetWorksheet As Worksheet
Dim SourceRange As Range
Dim TargetRange As Range
Set SourceWorksheet = VictimResults
Set TargetWorksheet = TempWorksheet
Set SourceRange = Cells(1, 1)
Set TargetRange = Cells(1, 1)
TargetWorksheet.Range (TargetRange) = SourceWorksheet.Range (SourceRange) Я поместил переменные SourceWorksheet, TargetWorksheet, SourceRange и TargetRange в часах и установить точку останова в последней строке, и все они действительны объекты (не нуль). Когда я перехожу через точку останова, я получаю диалоговое окно, которое просто говорит «400».
Любая помощь очень ценится.
--- edit --- Я создал этот полный файл VBA, который реплицирует проблему. Мысль, которая может помочь кому-то ответить.
Option Explicit
Sub Main()
GetFirstWorksheetContainsName("Sheet1").Range(Cells(1, 1)).Value = GetFirstWorksheetContainsName("Sheet2").Range(Cells(1, 1)).Value
End Sub
Function GetFirstWorksheetContainsName(worksheetNameContains) As Worksheet
Dim m As Long
Dim result As Worksheet
m = 1
Do
If InStr(1, Sheets(m).Name, worksheetNameContains) Then
Set result = Sheets(m)
Exit Do
End If
m = m + 1
Loop Until m > ThisWorkbook.Worksheets.Count
Set GetFirstWorksheetContainsName = result
End Function
Вот что-то еще, что я пробовал, что дает что-то более подробное.
Option Explicit
Sub Main()
Sheets("Sheet1").Select
Range(Cells(1, 1)).Select
Selection.Copy
Sheets("Sheet2").Select
Range(Cells(1, 1)).Select
ActiveSheet.Paste
End Sub
Это дает мне "метод 'Диапазон' объекта '_global' не удалось" ошибка при выполнении первого диапазона (Cells (1, 1)). Выберите строку.
Почему вы используете пользовательский UDF? Вы просто хотите установить диапазон листа 2 на те же значения, что и тот же диапазон в Sheet1? (или два листа, как определено вами?) – BruceWayne
Я использую пользовательскую функцию, определенную пользователем, потому что я работаю над большим проектом и пытаюсь повторно использовать код там, где это возможно, но это не то место, где он терпит неудачу. Мой пользовательский UDF работает нормально. – rsnell
Вы получаете сообщение об ошибке в более подробном, потому что ваш Range имеет только одну ячейку.AFAIK у вас должно быть два, поэтому попробуйте использовать 'Range (ячейки (1,1), ячейки (1,1))' – BruceWayne