Excel宏-Windows()。激活不获取值
有效的代码如下所示:Excel宏-Windows()。激活不获取值,excel,vba,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) & w
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吗 编辑-更多信息 好的,应用程序如下所示: “导入数据”按钮的完整代码块为:
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
在按钮的单击事件中调用上述子项
作为测试,关闭按钮具有以下代码:
Private Sub cmdCancel_Click()
MsgBox (ddlOpenWorkbooks.Value)
End
End Sub
哪种方法很好:
使现代化
所以我们发现了问题所在
由于这是从一个模块调用的,所以它不知道OpenWorkBooks在哪里,也不知道从哪里提取数据
子部件中的更正代码为:
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
这将允许我给潜艇打电话
谢谢大家 您是否尝试过:
Windows(ddlOpenWorkbooks.Value).Activate
只有在键入值时才需要引号。如果以其他方式传递值,则不需要引号
更新
以下是我所采取的步骤,它们允许我无误地激活所选窗口
我创建了一个Userform,其中有一个名为ddlOpenWorkbooks的组合框和两个按钮。
为了便于说明,我对组合框的行源代码进行了硬编码,但这不应该是这里的问题
“我的第一个”按钮显示一条消息,其中包含从ddlOpenWorkbooks中选择的工作簿名称
这是按钮的代码
Private Sub btnMessage_Click()
MsgBox Me.ddlOpenWorkbooks.Value
End Sub
结果如下
我的第二个按钮使用OpenWorkBooks中的选择并激活该窗口。这是代码
Private Sub btnActivate_Click()
Windows(Me.ddlOpenWorkbooks.Value).Activate
End Sub
结果如下
最后更新:
将ddlOpenWorkbooks.Value传递给另一个非UserForm事件的过程时,需要包含UserForm的名称
这是过程中正确从组合框中获取值所需的行:
Windows(frmOmniDataManipulation.ddlOpenWorkbooks.Value).Activate
如果这是combobox,那么我相信
ddlOpenWorkbooks.List(ddlOpenWorkbooks.ListIndex)
将返回所选的值。
或者,您可以使用
ddlOpenWorkbooks.List(#)
这是个愚蠢的问题,但什么是OpenWorkBooks?这是一个下拉列表。它后面的子项显示了所有打开的工作簿,我在messagebox中对其进行了测试,它显示了与上面完全相同的Contract Drilldown 3.xls。通过下拉列表,您是指添加到VBA用户表单的组合框?是的,就是这样:运行时错误“424”:出现了所需对象:我编辑了更多详细信息。如果您仍然遇到错误,我们需要更多详细信息。在上面添加了更多详细信息。好的,我已将WindowsddlOpenWorkbooks.Value.Activate放入按钮单击事件中,这似乎有效。为什么?我不知道。问题似乎是当我调用Sub时,而不是让它直接从按钮上运行。因此,我90%确定当我在单击事件中调用Sub时会发生错误,因为在我使用messageBox进行测试时会抛出相同的错误。因此我尝试了:WindowsddlOpenWorkbooks.ListddlOpenWorkbooks.ListIndex.Activate,但仍然得到错误:424需要对象为什么放置Windows?来自组合框的值是打开的工作簿的名称。它正在传递到Windows,以便打开的工作簿可以从中复制和粘贴数据。因此,我使用了Windows.ActivatedLopenWorkBooks.Value是否从ComboBox返回所选项目您是否尝试使用工作簿、工作表对象来推送该值?