【问题标题】:Reading/Writing Data In Other Sheets Without Selecting First在不先选择的情况下读取/写入其他工作表中的数据
【发布时间】:2011-01-06 11:22:12
【问题描述】:

我在从其他工作表读取和写入数据时遇到了一点问题。

虽然我可以使用以下方法很好地读写单个单元格:

sheets(sheet Name).cells(x,y).value

使用:

sheets(sheet Name).range(cells(x,y),cells(a,b)).value

似乎不起作用。

虽然这很容易通过简单地选择工作表来解决,但它确实有点开销并且感觉很不聪明。

我需要这个的主要目的是读取和写入数组到非活动工作表,如果有人有替代方案,我会非常感激。

干杯

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    如果您想避免使用 Select 或 Activate,您可以不这样做吗?:

    With Sheets("Sheet Name")
    
        arrData = .Range(.Cells(1,1), .Cells(2,1)).Value
    
    End With
    

    据我所知,这应该可行。

    【讨论】:

      【解决方案2】:
      Dim ws As Worksheet
      
      Set ws= Worksheets("MySheet")
      
             With ws
              .Range(ws.Cells(3, 1), ws.Cells(3, 14)).ClearContents
             End With
      
      End If
      

      这在不激活工作表的情况下效果很好

      【讨论】:

        【解决方案3】:

        我认为在范围对象中使用单元格方法来引用另一个工作表需要您首先激活该工作表(请参阅 msdn 中的第 5 节)

        Sub ReferToCells()
            Dim arrData() As Variant, i As Long
            Sheets("Sheet2").Activate
            arrData = Range(Cells(1, 1), Cells(2, 1)).Value
        
            For i = 1 To UBound(arrData)
                Debug.Print arrData(i, 1)
            Next i
        End Sub
        

        【讨论】:

        • 谢谢,我觉得不错。我认为这比选择的开销更低?
        • @Cunning - 我不确定 Select 或 Activate 是否具有较低的开销,但我想差异是如此之小,不值得优化。另外,鉴于 msdn 示例使用了 Activate,我倾向于坚持使用它...
        猜你喜欢
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多