所以我有一张excel表,一周的日子从D7开始,延伸到AF7,持续15天。我想查看它们中的每一个,然后将第8行中正下方单元格的内容复制到另一个工作表中。
我得到运行时错误1004对象_Global的方法范围在此行上失败。我对VBA很新,所以我不确定出了什么问题。
LastCol = Range(Cells(7, Columns.Count)).End(xlUp).Columns
完整代码:
Sub Copy()
Dim cell As Range
Dim lastRow As Long, i As Long
LastCol = Range(Cells(7, Columns.Count)).End(xlUp).Columns
i = 4
For Each cell In Sheets(1).Range(LastCol & "D7:7")
If cell.Value = "MON" Then
cell.Offset(-1, 0).Copy Sheets(2).Cells(1, i)
i = i + 1
End If
Next
End Sub
答案 0 :(得分:1)
要获取最后一个,即最右边的一行,首先将MyRow设置为您要使用的行:
lastcol= ActiveSheet.Cells(MyRow, Columns.Count).End(xlToLeft).Column
对于最后一行,将MyColumn设置为适当的值后:
lastrow = ActiveSheet.Cells(Rows.Count, MyColumn).End(xlUp).Row
但你的范围参考也不是很正确。就个人而言,我没有看到在循环中使用范围变量的价值。你可以试试这个。 (请注意,负偏移量会读取上面的行,而不是下面的行)
Sub Copy()
Dim lastRow As Long, i As Long, LocX as long
Dim source As Worksheet, dest As Worksheet
Set source = Sheets(1)
Set dest = Sheets(2)
lastcol = source.Cells(7, Columns.Count).End(xlToLeft).Column
i = 4
For locX = 4 To lastcol
If source.Cells(7, locX).Value = "mon" Then
source.Cells(7, locX).Offset(1, 0).Copy dest.Cells(1, i)
i = i + 1
End If
Next
End Sub
答案 1 :(得分:0)
您分配给 LastCol 的名称似乎表示您希望获取列号但尚未使用xlUp
而不是xlToLeft
。此外,您要求的是.Columns
,而不是Column
。
LastCol = Cells(7, Columns.Count).End(xlToLeft).Column
这将返回第7行中最后一个使用列的列号(例如,列F = 6,列AA = 27等)。
with Sheets(1)
LastCol = .Cells(7, Columns.Count).End(xlToLeft).Column
For Each cell In .cells(7, "D").resize(1, LastCol - 3)
If ucase(cell.Value) = "MON" Then
cell.Offset(1, 0).Copy destination:=Sheets(2).Cells(1, i)
i = i + 1
End If
Next
end with
If weekday(cell.Value) = 2 Then
而不是检查 MON 。cell.Offset(1, 0).Copy