2015-08-25 43 views
1

我试图选择Excel中第一列填充连续数据(10-20行)的一个范围,范围内可能有空单元格。我录制了一个宏,但是当我运行它时,它不起作用。选择范围“不起作用”

错误在哪里?

'Range("A2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlToRight)).Select` 
+2

也许阐述什么是“*不工作* “在这种情况下的确切含义。 – displayname

+0

第二次选择。结束(xlToRight).Select没有正确传球。也许是因为存在一个空单元。 – sisty

+1

您应该将此添加到您的问题中^^您还可以通过编写“@” @stefanfalk向您想要与之通话的用户发送通知。 – displayname

回答

0

这张桌子的空单元格C2,E2

“子Macro2()

Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
Dim currentRowValue As String 

Sheets("Sheet2").Select 
Range("A2").Select 
Range(Selection, Selection.End(xlDown)).Select -Select first Column until exists data 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlToRight)).Select -Did not make step over C2 (empty cell) 
Range(Selection, Selection.End(xlToRight)).Select 

Selection.Copy 
Sheets("Sheet3").Select 
Range("A1").Select 


sourceCol = 1 
rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

    For currentRow = 1 To rowCount + 1 
    currentRowValue = Cells(currentRow, sourceCol).Value 
    If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
     Cells(currentRow, sourceCol).Select 
    End If 
Next 

ActiveSheet.Paste 
Sheets("Sheet2").Select 
Range("A2:A100").Select 
Application.CutCopyMode = False 
Selection.ClearContents 
Range("C2:C100").Select 
Selection.ClearContents 
ActiveWorkbook.Save 
Range("A2").Select 
End Sub' 
+0

'.select'的数量让我非常紧张! – BruceWayne

+0

我用一些信息填充了空单元格。这样,脚本工作。感谢所有。 – sisty

0

你可以尝试这样的事情(你可能要改变这一点了)

Cells(ActiveCell.Row, 1000).Select 
Selection.End(xlToLeft).Select 
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, ActiveCell.Column)).Select 
Range(Selection, Selection.End(xlDown)).Select 

而不是试图保持跨下去,直到你打到最后填充的单元 - 这开始了1000列然后选择从第一列到最后一个填充的范围(不管间隙)的范围

我相信这将适合所提及的场景 - 因为它也会随后进入填充选区的末尾。

然而,您可以调整代码,为行做同样的事情。

+0

例如我有范围“A2:F8”。 – sisty

+0

我有点困惑。什么不是特别工作? 范围(“A2:F8”)。选择 这样做的想法是,它忽略空白动态选择的时候,但我 如果您想选择范围A2-F8,然后作为只是简单只是为你做了这个 - 对于如何做到这一点还有一个相当大的线索 – Trum

+0

我不知道行数_(在我的例子中是8)_将选择'范围(选择,Selection.End(xlDown))。选择',但是在这个选择之后,我想选择全部,直到列F. – sisty

1

首先,代码中似乎存在拼写错误。在最后一次陈述结束时,你有一个流浪的角色。

什么看起来像你想excel做的是相当于CTRL + Shift +向下,右,右,右。代码实际上在做什么是Ctrl + [方向键],然后将原始选择展开到这个新单元格。 Microsoft告诉我们CTRL + [ArrowKey]将我们带到当前区域的边缘。作为一个例证:

Ctrl Right

所以,既然你选择了,你将只是重新选择每次都在同范围的范围!

什么可能是你正在试图选择哪些需要调用.End(xlToRight)多次范围时使用的最后一列的解决方案:

'Range("A2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.Cells(1,Selection.Columns.Count).End(xlToRight)).Select 
Range(Selection, Selection.Cells(1,Selection.Columns.Count).End(xlToRight)).Select 
Range(Selection, Selection.Cells(1,Selection.Columns.Count).End(xlToRight)).Select 

这是等同于按Ctrl + Shift +向下,右,右,对。

让我知道,如果你有更多的问题:)

+0

这是真的。我想CTRL + Shift +向下,右,右,右。但代码不执行第二个右侧,因为第一行中的下一个单元格是空的。如果你在Excel中做过_CTRL + Shift + Down,Right,Right,Right._它工作的很完美 – sisty

+0

@sisty我提供的代码是否工作?如果不是,请添加一个明确的例子,说明在你的问题中不起作用的东西。 –