Excel宏 - Windows()。激活不带值

时间:2014-10-30 16:21:22

标签: excel vba

有效的代码如下:

Windows("Contract Drilldown (3).xls").Activate

当我使用时:

 Windows(Chr(34) & ddlOpenWorkbooks.Value & Chr(34)).Activate

我明白了:

  

运行时错误' 424':需要对象


如果我使用字符串变量传递值,即:

Dim wbn As String
wbn = "Contract Drilldown (3).xls"
Windows(Chr(34) & wbn & Chr(34)).Activate

我明白了:

  

运行时错误' 9':下标超出范围


如果我使用

wbn = ddlOpenWorkbooks.Value
Windows(Chr(34) & wbn & Chr(34)).Activate

我也得到了

  

运行时错误' 424':需要对象


任何人都知道如何在不出错的情况下传入 ddlOpenWorkbooks.Value

编辑 - 更多信息

好的,应用程序看起来像这样: enter image description here

导入数据按钮的完整代码块是:

Public Sub Data_Import()

    Windows(ddlOpenWorkBooks.Value).Activate
    Columns("A:V").Select
    Selection.Copy
    Omni_Data.Activate
    Range("A1").Select
    ActiveSheet.Paste

    Omni_Data.Range("A:Z").Interior.ColorIndex = 0
    Omni_Data.Range("A:Z").Font.Name = "Segoe UI"
    Omni_Data.Range("A:Z").Font.Name = "Segoe UI"
    'Setting Background Colour to white and changing font

End Sub

按钮上的Click Event调用上面的Sub。

作为测试,关闭按钮具有以下代码:

Private Sub cmdCancel_Click()
    MsgBox (ddlOpenWorkbooks.Value)
    End

End Sub

哪种方法正常:

enter image description here

更新

所以我们找到了问题。

由于这是从一个模块调用的,因此它不知道ddlOpenWorkbooks的位置以及从哪里提取数据。

Sub中的更正代码是:

Public Sub Data_Import()

    Windows(frmOmniDataManipulation.ddlOpenWorkbooks.Value).Activate
    Columns("A:V").Select
    Selection.Copy
    Omni_Data.Activate
    Range("A1").Select
    ActiveSheet.Paste

    Omni_Data.Range("A:Z").Interior.ColorIndex = 0
    Omni_Data.Range("A:Z").Font.Name = "Segoe UI"
    Omni_Data.Range("A:Z").Font.Name = "Segoe UI"
    'Setting Background Colour to white and changing font

End Sub

这将允许我调用sub。

全部谢谢!

2 个答案:

答案 0 :(得分:0)

你试过了吗?

Windows(ddlOpenWorkbooks.Value).Activate

只有在输入值时才需要引号。如果您以其他方式传递值,则引号是不必要的。

更新

以下是我采取的步骤,它们允许我激活所选窗口而没有错误。

我使用名为ddlOpenWorkbooks的ComboBox和2个按钮创建了一个Userform。 My UserForm

为了便于说明,我将ComboBox的RowSource硬编码,但这不应该是问题。

我的第一个按钮显示一条消息,其中包含ddlOpenWorkbooks所选工作簿的名称。

以下是按钮的代码

Private Sub btnMessage_Click()
    MsgBox Me.ddlOpenWorkbooks.Value
End Sub

结果如下

Message button result

我的第二个按钮使用ddlOpenWorkbooks中的选项并激活该窗口。这是代码。

Private Sub btnActivate_Click()
    Windows(Me.ddlOpenWorkbooks.Value).Activate
End Sub

这是结果

Activate button results

最终更新:

将ddlOpenWorkbooks.Value传递给另一个不是UserForm事件的过程时,您需要包含UserForm的名称。

这是您在过程中需要从ComboBox正确获取值的行:

Windows(frmOmniDataManipulation.ddlOpenWorkbooks.Value).Activate

答案 1 :(得分:0)

如果这是组合框,那么我相信

ddlOpenWorkbooks.List(ddlOpenWorkbooks.ListIndex) 

将返回所选值。 或者,您可以使用

传入索引值
ddlOpenWorkbooks.List(#)