Это первый раз, когда я пишу макрос самостоятельно, и я столкнулся с двумя небольшими проблемами.Ошибка VBA Runtime 1004 «Определенная пользователем или объектная ошибка» с диапазоном
Задача Макро: Скопируйте информацию одного документа в другой документ в определенном столбце, если столбец пуст, в этом случае он должен использовать следующий столбец.
Это код до сих пор:
Sub CopyData()
Dim i As Long
Dim wbA As Workbook
Dim wbN As Workbook
Dim Filepath As String
i = 7
Set wbA = ThisWorkbook
Filepath = "C:\Users\sebastian\Desktop\assessment answers"
Do
If IsEmpty(wbA.Sheets("Answers").Cells(1, i)) Then
Set wbN = Workbooks.Open(Filepath)
If Cells(37, 3).Value = 31 Then
wbN.Sheets("Answers").Range(Cells(37, 4), Cells(46, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(36, i), Cells(45, i))
ElseIf Cells(37, 3).Value = 41 Then
wbN.Sheets("Answers").Range(Cells(37, 4), Cells(46, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(46, i), Cells(55, i))
ElseIf Cells(37, 3).Value = 51 Then
wbN.Sheets("Answers").Range(Cells(37, 4), Cells(46, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(56, i), Cells(65, i))
Else
MsgBox "There could be a problem with the data, please check if the candidate has selected a topic."
Exit Sub
End If
wbN.Sheets("Answers").Range(Cells(2, 4), Cells(3, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(1, i), Cells(2, i))
wbN.Sheets("Answers").Range(Cells(7, 4), Cells(36, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(6, i), Cells(35, i))
wbN.Close
Exit Sub
Else
i = i + 1
End If
Loop
End Sub
1. Проблема (VBA Runtime Ошибка 1004) здесь происходит после того, как: Если клетки (37, 3) .Value = 31 Тогда
Если я использую .Range("D37:D46")
и диапазоны для других ячеек, он работает, но я хотел бы увеличить столбец с помощью цикла, когда уже заполнены данные. У вас есть идея решить эту проблему?
2. Есть ли способ изменить путь к файлу, чтобы тот, кто когда-либо использовал его, будет направлен на рабочий стол, где должен находиться файл?
Filepath = "C:\Users\sebastian\Desktop\assessment answers"
Спасибо за ваши идеи,
Sebastian
Re 1 эта проблема во многих вопросах здесь. Вы должны также квалифицировать вызовы «Ячейки» с листом: 'wbN.Sheets (« Ответы »). Диапазон (wbN.Sheets (« Ответы »). Ячейки (37, 4), wbN.Sheets (« Ответы ») .Целты (46, 4)). Использование переменной для листа или оператора With приведет к ее убою. – Rory
Вам нужно идентифицировать «Ячейки (37,3). Значение, из которого написана книга и какой лист. Я думаю, это может решить сообщение об ошибке. Когда я проверяю ваш код, он не показывает мне ошибки. –
В ответ на проблему 1: https://support.microsoft.com/en-us/help/210684/copying-worksheet-programmatically-causes-run-time-error-1004-in-excel В отношении проблемы 2: вы можете эталонный рабочий стол вроде этого: Environ $ («USERPROFILE») и «\ Desktop», но я не уверен, насколько он надежный, лучше использовать thisworkbook.path, если файл на рабочем столе в любом случае – User632716