Excel 范围(单元格(x,y))。复制抛出错误1004
我有一个工作表,我必须每天导出,其中包括工作计划。我试图做的是在将.csv文件复制到工作簿之前操作该文件中的数据。对于任何给定的一天,技术人员一天最多可以有4个时间表。我试图找到常规移位所在的列,并将其移动到E列Excel 范围(单元格(x,y))。复制抛出错误1004,excel,vba,Excel,Vba,我有一个工作表,我必须每天导出,其中包括工作计划。我试图做的是在将.csv文件复制到工作簿之前操作该文件中的数据。对于任何给定的一天,技术人员一天最多可以有4个时间表。我试图找到常规移位所在的列,并将其移动到E列 | Supervisor | Technician | On Duty? | Earliest Route Time | Shift 1 Type | Shift 1 Start | Shift 1 End | Shift 2 Type | Shift 2 Start | Shift
| Supervisor | Technician | On Duty? | Earliest Route Time | Shift 1 Type | Shift 1 Start | Shift 1 End | Shift 2 Type | Shift 2 Start | Shift 2 End |
|------------|------------|----------|---------------------|--------------|---------------|-------------|--------------|---------------|-------------|
| Harold | Doug | No | | Meetings | 8:00 AM | 9:30 AM | Regular | 9:30 AM | 4:30 PM |
| Harold | Greg | No | | Meetings | 8:00 AM | 9:30 AM | Regular | 9:00 AM | 4:30 PM |
| | | | | | | | | | |
我已尝试从()实施解决方案
还有一个,但我好像把它弄丢了
Sub test_cell()
Dim sh1 As Worksheet
Dim x as Integer
Dim col as Integer
For Each w In Workbooks 'loop through open workbooks
If w.Name = "tech_shifts_now.csv" Then
w.Activate
Sheets("tech_shifts_now").Select
Set sh1 = ActiveWorkbook.Sheets("tech_shifts_now")
x = 3
If Cells(x, 5) <> "Regular" Then
With sh1
.Range(.Cells(x, 5), .Cells(x, 7)).Copy Destination:=.Range(.Cells(x, 17)) 'Move current data to Q
End With
'Range("E" & x & ":G" & x).Copy Range("Q" & x)
'Find the column that regular shift is in
Rows(x).Find(What:="Regular", LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
'get the columns number
col = ActiveCell.Column
'copy the data for regular to Column E
Range(Cells(x, col), Cells(x, col + 2)).Copy Destination:=Range(Cells(x, 5))
'Copy for Column Q to where we just removed the Regular data from
Range("Q" & x & ":S" & x).Copy Range(Cells(x, col))
End If
End If
Next w
End Sub
子测试单元()
Dim sh1作为工作表
作为整数的Dim x
作为整数的Dim col
通过打开工作簿的工作簿循环中的每个w
如果w.Name=“tech\u shifts\u now.csv”,则
w、 激活
工作表(“技术轮班”)。选择
Set sh1=ActiveWorkbook.Sheets(“技术轮班”)
x=3
如果单元格(x,5)“常规”,则
与sh1
.Range(.Cells(x,5),.Cells(x,7))。复制目标:=.Range(.Cells(x,17))'将当前数据移动到Q
以
'范围(“E”&x&“:G”&x)。复制范围(“Q”&x)
'查找常规shift所在的列
行(x).Find(What:=“Regular”,LookIn:=xlFormulas_
查看:=xlPart,搜索顺序:=xlByRows,搜索方向:=xlNext_
匹配案例:=False,搜索格式:=False)。激活
'获取列数
col=ActiveCell.Column
'将常规数据复制到列E
范围(单元格(x,列),单元格(x,列+2))。复制目标:=范围(单元格(x,列+5))
'将Q列复制到刚才从中删除常规数据的位置
范围(“Q”&x&“:S”&x)。复制范围(单元格(x,列))
如果结束
如果结束
下一个w
端接头
当工作表到达
.Range(.Cells(x,5),.Cells(x,7))时,我收到错误1004对象的方法范围\u工作表失败。。复制目标:=.Range(.Cells(x,17))
您的目标错误。它应该是.Cells(x,17)
。或者,.Range(.Cells(x,17).Address)
为什么??至少有两个构造函数没有显式调用。如果使用单个参数调用Range
,则假定为(添加了强调):
使用Range(arg)
,其中arg
命名范围,返回表示单个单元格或单元格范围的范围对象
在这里,Range()
需要一个字符串来标识一个范围,比如Range(“A2”)
或Range(“一些被命名的范围”)
等
当您通过范围(单元格(1,1))
时,将计算内部部分(单元格(1,1)
,它本身就是一个范围
)。由于单个单元格的范围
可以(通常)从其值
属性隐式转换为字符串
,但由于这(通常)不是有效的引用,因此会发生错误
如前所述,您可以这样做:Range(单元格(1,1).Address)
,但我认为这有点难看,即使是有效的
Range
确实有一个接受两个Range
参数的构造函数,但您正在将Range
对象传递给需要一个字符串参数的构造函数。隐式转换发生在引擎盖下,您将遇到一个难以排除的错误:)
使用Range(cell1,cell2)
,其中cell1
和cell2
是指定起始单元格和结束单元格的Range
对象,以返回范围对象
按照这个逻辑,你实际上可以做范围(单元格(1,1),单元格(1,1))
,但同样,不必要的冗长/重复,我不喜欢这个约定。你的目的地是错误的。它应该是.Cells(x,17)
。或者,它.Range(.Cells(x,17).Address)
。但前者更好,谢谢。我知道我少了一点东西。。工作起来很有魅力。我感谢你的快速回复。。。你想把你的回答作为一个答案,这样我就可以标记它完整吗?或者我应该用你的答案来更新代码,并将其标记为完成?当然,我还添加了一些详细信息,解释了为什么它不能以这种方式工作。干杯
Range(Cells(x, col), Cells(x, col + 2)).Copy Destination:=.Cells(x, 17)