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

时间:2018-06-25 08:13:50

标签: excel vba 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

但是如何从上述选择中获得工作簿名称和工作表名称?

我需要这个:

  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 deliveryies.xlsx]卡车订单”!$ 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

在最后两行中,我收到错误消息。

  • 运行错误nr'91'?它说对象变量或With-blocvariabel 未指定

1 个答案:

答案 0 :(得分:2)

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

set wks = Worksheets("NameOfWorksheet") Worksheets MSDN

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

set wkb = Workbooks("NameOfWorkbook") Workbook 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