问题与范围

为什么Range(Cells(),Cells())使用的第二种格式不起作用?

 Sub start() Dim ws As Worksheet Dim wb As Workbook Dim cond_rng As Range Set ws = Application.Workbooks("ndata.xlsm").Worksheet("conditionsSheet") ' This works and selects one cell Set cond_rng = ws.Cells(4, 1) cond_rng.Select 'this works as expected Set cond_rng = ws.Range("A1:B10") cond_rng.Select 'this fails with error 1004 Set cond_rng = ws.Range(Cells(1, 1), Cells(4, 4)) cond_rng.Select 

好吧,这个工程:

 'this works Set cond_rng = ws.Range(ws.Cells(1, 1), ws.Cells(4, 4)) cond_rng.Select 

要么

 With Sheets("conditionsSheet") .Range(.Cells(1, 1), .Cells(4, 4)).Select End With 

.Cells非常重要,因为它不适用于Cells。

我testing了一个简单的子如下,它的作品。 我认为你的错误来自“工作表”之后缺less的“s”。

设置ws = Application.Workbooks(“ndata.xlsm”)。工作表(“conditionsSheet”)应该是…工作表….

 sub TEST() Dim ws As Worksheet Dim cond_rng As Range Set ws = Worksheets("sheet1") Set cond_rng = ws.Range(Cells(1, 1), Cells(5, 4)) cond_rng.Value = 5 End Sub 

我相信这是令人迷惑的范围select。 如果您尝试从非活动工作表中select一个范围,通常会得到一个错误。

如果您试图从另一个工作表中获取该范围内的值,或者需要将信息添加到该范围内,则不必select该范围。 例如:下面的代码将遍历每个工作表并复制A1:D4(不包括PasteSheet)并将其粘贴到PasteSheet中。 对于这个例子,确保你有一个名为“PasteSheet”

 Sub SheetLoop() Dim ws As Worksheet Dim sh As Worksheet Set ws = Sheets("PasteSheet") For Each sh In Sheets If sh.Name <> ws.Name Then With sh .Range(.Cells(1, 1), .Cells(4, 4)).Copy ws.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) End With End If Next sh End Sub 

您可以从工作簿中的任何工作表运行此代码,因为您不必select任何内容。

因此,如果例如Sheet2 A1 = 2,则sheet1(A1:D4)的颜色是红色,否则是蓝色。

 Sub Button2_Click() Dim ws As Worksheet, x Dim sh As Worksheet, rng As Range, Crng As Range Set ws = Sheets("Sheet1") Set sh = Sheets("Sheet2") Set rng = sh.Range("A1") Set Crng = ws.Range(ws.Cells(1, 1), ws.Cells(4, 4)) x = IIf(rng = 2, vbRed, vbBlue) Crng.Interior.Color = x End Sub