您在“A”之前缺少一个“:”
Range("A" & i & ":A" & LastCol - 1)
跟进
在我浏览了您的评论后,我发现您的代码中有很多错误
1)你变暗i
为Integer
。如果您的最后一行超过 32,767,这可能会给您在 Excel 2007 以后的错误。将其更改为Long
我建议您查看此链接。
主题:整数、长整数和字节数据类型
链接:http: //msdn.microsoft.com/en-us/library/aa164754%28v=office.10%29.aspx
从上面的链接引用
整数变量的值可以在 -32,768 到 32,767 之间,而长变量的值可以在 -2,147,483,648 到 2,147,483,647 之间
2)您正在查找最后一列,但在哪个工作表中?您必须像这样完全限定路径。
If WorksheetFunction.CountA(Sheets("Sheet1").Cells) > 0 Then
LastCol = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End If
情况也是如此
With Sheets("Sheet1")
Set DatesRange = Range("B2" & LastCol)
End With
你之前错过了一个 DOTRange
这是正确的方法...
.Range("B2....
也不Range("B2" & LastCol)
会给你你想要的范围。请参阅下面的代码,了解如何创建您的范围。
3)您正在使用变量LastColumn
,但使用LastCol
. 我强烈建议使用Option Explicit
我还建议查看此链接(请参阅链接中的第 2 点)。
主题:“犯错”是人之常情
链接:http ://www.siddharthout.com/2011/08/01/to-err-is-human/
4)如果有会发生什么.CountA(Sheets("Sheet1").Cells) = 0
?:) 我建议您使用此代码
If WorksheetFunction.CountA(Sheets("Sheet1").Cells) > 0 Then
LastCol = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
Else
MsgBox "No Data Found"
Exit Sub
End If
5) ActiveSheet.Rows.Count
不会给你最后一个活动行。它将为您提供该工作表中的总行数。我建议获取包含数据的 Col A 的最后一行。
你可以用这个
With Sheets("Sheet")
LastRow =.Range("A" & .Rows.Count).End(xlup).row
End With
现在使用LastRow
代替ActiveSheet.Rows.Count
你也可能想使用 aFor Loop
这样你就不必i
每次都增加。例如
For i = 1 to LastRow
6)最后你不应该使用End
. 原因很简单。这就像使用 POWER OFF 按钮切换计算机一样。End 语句会突然停止代码执行,而不调用 Unload、QueryUnload 或 Terminate 事件或任何其他 Visual Basic 代码。其他程序持有的对象引用(如果有)也无效。
7)根据您在聊天中的形象,我相信您正在尝试这样做?这使用了不使用任何循环的代码。
Option Explicit
Sub FindFill()
Dim wsI As Worksheet, wsO As Worksheet
Dim DatesRange As Range
Dim LastCol As Long, LastRow As Long
If Application.WorksheetFunction.CountA(Sheets("Sheet1").Cells) = 0 Then
MsgBox "No Data Found"
Exit Sub
End If
Set wsI = Sheets("Sheet1")
Set wsO = Sheets("Sheet2")
With wsI
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
Set DatesRange = .Range("B1:" & Split(Cells(, LastCol).Address, "$")(1) & 1)
.Columns(1).Copy wsO.Columns(1)
DatesRange.Copy
wsO.Range("B2").PasteSpecial xlPasteValues, _
xlPasteSpecialOperationNone, False, True
.Range("B2:" & Split(Cells(, LastCol).Address, "$")(1) & LastCol).Copy
wsO.Range("C2").PasteSpecial xlPasteValues
End With
End Sub