如何将地址转换回 VBA 中的范围?

How do I convert an address back to a range in VBA?

我有一个输入框,要求用户输入 select 一个单元格,并将其存储为一个范围。 然后,此范围将转换为地址(字符串),因此不会同时保存 !worksheet。

For 循环将循环遍历工作表,但是,我需要将起始单元格(范围)引用到 运行 宏 - 问题是,我无法再引用起始单元格,因为这个现在是字符串,而不是范围。

我需要在 For 循环中将地址(字符串)重新转换回一个范围。

Set myCell = Application.InputBox( _
    prompt:="Select a cell", Type:=8)
    
celladdress = myCell.Address()
    
NoSheets = Sheets.Count

For x = 2 To NoSheets

'covert address back to range

'Identify blend data
NumRows = Range(myCell, myCell.Offset(1, 0).End(xlDown)).Rows.Count
NumColumns = Range(myCell, myCell.Offset(0, 1).End(xlToRight)).Columns.Count

Set StartRange = Range(myCell, myCell.Offset(NumRows - 1, NumColumns - 1))
StartRange.Copy

myCell.address(,true) 为您提供范围的完整外部地址。

myCell.Parent.Name 给你工作表的名称

您想要在该循环中使用 Worksheet 对象引用:

For x = 2 To NoSheets
    Dim currentSheet As Worksheet
    Set currentSheet = thatWorkbook.Worksheets(x)
    ...
Next

一旦有了 sheet,您仍然可以使用 myCellcurrentSheet 上获得 Range,而无需处理单元格地址字符串:

Set currentCell = currentSheet.Cells(myCell.Row, myCell.Column)

避免对 RangeCells 的不合格调用;他们隐含地引用了 ActiveSheet,这通常意味着代码仅适用于 Worksheet.Activate 调用(您通常希望避免必须一起使用 SelectActivate ).