从 Excel-VBA 中的范围获取工作簿名称和工作表名称

Chr*_*ian 3 excel vba range

我现在有一些代码提示用户选择一个范围(1 个区域、1 列、几行)。这是提示用户这样做的代码:

MsgBox "Select a continuous range of cells where numeric values should be appended."

Set Rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8) 'Type Values, 8 - Range object
Run Code Online (Sandbox Code Playgroud)

但是,如何从上面的选择中获取工作簿名称和工作表名称?

我需要这个:

  1. 目标 wb 的工作簿名称- 我已经实现了这一点,但使用 cmd:ThisWorkbook(在提示用户执行任何操作之前)
  2. 目标 ws 的工作表名称- 最好也从上面的代码中读取它,其中提示用户“Set Rng /---/”

  3. 源 wb 的工作簿名称- 读取目标 ws 后,我想通过打开对话框提示用户选择源工作簿,其中我将提示用户选择一个附加范围(源范围) - 它将输入到3和4。

  4. 源 ws 的工作表名称-参见 3

另外,我希望有绝对的 ws 名称“Sheet1”等,而不是它的名称(例如 Kalle Anka)。

非常感谢!

编辑:我知道在输入对话框显示中是否选择了另一个 ws 或 wb,而不是从启动宏的位置,即“[Cognos Orders and Deliveries.xlsx]Truck Orders”!$F$11:$F$18。但是,如果我将“设置为范围”变暗 - 有什么方法可以检索该信息吗?如果它是一个字符串,你也许可以用 !然后] 分别获取 ws 和 wb ?现在如何使用范围?

EDIT2:根据下面的答案,我尝试了以下结果/问题:

Sub AppendCognosData()

Dim Rng As Range

Dim AppendWb As Workbook
Dim AppendWs As Worksheet
Dim AppendWb2 As Workbook

'Create a reference to Wb where to append data
Set AppendWb = ThisWorkbook

MsgBox "Select a continuous range of cells (in a column) where numeric values should be appended."

Set Rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8) 'Type Values, 8 - Range object

AppendWs = Rng.Parent.Name
AppendWb2 = Rng.Parent.Paranet.Name
Run Code Online (Sandbox Code Playgroud)

在最后两行我得到错误。

  • 运行错误“91”?它表示尚未指定 objectvariable 或 With-blocvariabel

Vit*_*ata 5

要引用带有字符串变量的工作表,语法如下:

set wks = Worksheets("NameOfWorksheet") 工作表 MSDN

要引用带有字符串变量的工作簿:

set wkb = Workbooks("NameOfWorkbook") MSDN 工作手册

现在的问题是如何从选择中"NameOfWorksheet"获取字符串。"NameOfWorkbook"这是一些最小的例子:

Public Sub TestMe()

    Dim wks As Worksheet
    Dim wkb As Workbook
    Dim rng As Range
    Set rng = Selection

    Debug.Print rng.Parent.Name            'Name of the worksheet
    Debug.Print rng.Parent.Parent.Name     'Name of the workbook
    Debug.Print rng.Parent.CodeName        'Code Name of the worksheet

    Set wks = Worksheets(rng.Parent.Name)
    Debug.Print wks.Name

    Set wkb = Workbooks(rng.Parent.Parent.Name)
    Debug.Print wkb.Name

End Sub
Run Code Online (Sandbox Code Playgroud)

  • Rng.Parent.Name 等返回一个字符串,而不是工作表或工作簿对象(并且您需要设置一个对象)。`设置 AppendWs = Rng.Parent`或 `设置 AppendWs = 工作表(Rng.Parent.name)` (2认同)