这是我对自己写的宏第一次,我遇到了两个小问题。VBA运行时错误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运行时错误1004)这里后发生: 如果将细胞(37,3)。价值= 31然后
如果我使用.Range("D37:D46")
和其他单元格的范围,它正在工作,但我想增加列的循环,当有数据已经填充。你有想法解决这个问题吗?
2. 有没有办法更改文件路径,以便谁曾经使用它,将被引导到桌面,文件应该放在哪里?
Filepath = "C:\Users\sebastian\Desktop\assessment answers"
谢谢你的想法,
塞巴斯蒂安
Re 1这个问题在这里的很多问题中都有介绍。您需要使用工作表限定'Cells'调用:'wbN.Sheets(“Answers”)。Range(wbN.Sheets(“Answers”)。Cells(37,4),wbN.Sheets(“Answers”)) .Cells(46,4))'。使用表格的变量或With语句将清理它。 – Rory
您需要确定'Cells(37,3).Value'是来自哪个工作簿和哪个工作表。我认为,这可以解决错误信息。当我测试你的代码时,它显示我没有错误。 –
回应问题1:https://support.microsoft.com/en-us/help/210684/copying-worksheet-programmatically-causes-run-time-error-1004-in-excel关于问题2:您可以参考桌面是这样的:Environ $(“USERPROFILE”)&“\ Desktop”,但我不确定它有多可靠,如果文件在桌面上,则最好使用此工作簿路径 – User632716