这是我第一次独自编写宏,遇到了两个小问题。
宏的任务: 如果列为空,则将一个文档的信息复制到特定列中的另一个文档中,在这种情况下,它应该使用下一列。
这是到目前为止的代码:
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")
和Ranges,它可以正常工作,但是当我已经填充了数据时,我想用循环增加列。你有想法解决这个问题吗?
2。 有没有办法更改文件路径,以便谁使用它,将被定向到文件所在的桌面?
Filepath = "C:\Users\sebastian\Desktop\assessment answers"
感谢您的想法,
塞巴斯蒂安
答案 0 :(得分:0)
错误编号1004通常表示“我找不到您要找的内容”。
对于此特定示例,您看到此错误,因为您对编码不够明确。如果有的话,最好去OTT。
所以而不是
If Cells(37, 3).Value = 31 Then
使用:
If wbA.Sheets("Sheet Name Here").Cells(37, 3).Value = 31 Then
更好的是在代码中包含“With”语句。一个通用的例子如下:
Sub Example()
Dim wb As Workbook
Dim sht As Worksheet
Set wb = ActiveWorkbook
Set sht = wb.ActiveSheet
With sht
.Name = "New Name"
.Visible = xlSheetVisible
.Protect
End With
End Sub
这可以节省大量的输入,并允许您在一次点击中对一个对象执行多项操作。
答案 1 :(得分:0)
对于可能感兴趣的其他人,我在这里发布我的解决方案:
问题1:
在Rory和Naing Win Htun的建议之后,我将细胞前面的路径包括在内。显然我也可以用 With 来完成它。
wbN.Sheets("Answers").Range(wbN.Sheets("Answers").Cells(37, 4), wbN.Sheets("Answers").Cells(46, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(wbA.Sheets("Answers").Cells(36, i), wbA.Sheets("Answers").Cells(45, i))
问题2:
用户现在可以手动输入文件的路径和名称,这显然是一个更好的解决方案。这也是Naing Win Htun的建议。
谢谢大家的帮助。