错误:无法移动焦点,因为它是不可见的

时间:2013-10-15 05:20:59

标签: excel vba

我有以下代码可以在所有其他情况下工作,除了在一个单独的地方它返回错误“无法移动焦点,因为它是不可见的,不启用,或类型不接受焦点”。表格中的数据仅包含基本数字和单词。我的目标是从一本工作簿中选择一个范围并将其粘贴到另一本工作簿。似乎excel不会识别出细胞中的任何东西,尽管事实上确实如此。有谁知道为什么会这样?提前谢谢。

    Set Users = Application.Workbooks.Open(PathA)
        With Prices
        .Sheets("Sheet").Range("A:AJ").Select
        Selection.Copy
        End With
    'Set Risk = Application.Workbooks.Open(PathX)
        With Risk
        .Sheets("Sheet").Range("A1:AJ1048576").PasteSpecial Paste:=xlPasteAll
        .Save
       ' .Close
        End With
        Users.Close

3 个答案:

答案 0 :(得分:0)

看起来其他人有同样的问题,并且能够在MSDN论坛上解决它

http://social.msdn.microsoft.com/Forums/office/en-US/3263b079-7e4f-452c-8dcc-92c682b8370b/excel-form-cant-move-focus-to-the-control-because-it-is-invisible-not-enabled-or-of-a-type-that?forum=exceldev

也许此修复程序也适用于您的情况。

......好的,在那个页面上,一个人有一个似乎适合他的kludge:

错误是:

无法将焦点移动到控件上,因为它是不可见的,未启用的,或者是不接受焦点的类型。

如何修复

1。选择有问题的对象,例如表格或控制。

2。在属性窗口中,选择对象的名称并重命名,在末尾添加“x”,例如将CPanel重命名为CPanelx。

3。保存表格。

4.现在将CPanelx重命名为CPanel。

5。运行表单。

6。问题解决了。

使用Excel VBA搞砸了,不知道是什么!,但这会让你再次工作。 史蒂夫D。

然后其他人描述了潜在的问题,但他的解决方案涉及使用设计模式,这似乎可能会破坏vba自动化的目的,但主持人似乎更喜欢他的答案,所以这里也是如此

在正常使用中,activeX控件仅用于激活,而不是选择,这是有区别的。如果您想要选择控件(手动或使用代码),请先尝试将Excel置于设计模式。

另请参阅主题“为什么我不能选择表单和ActiveX控件?”在Excel的帮助下(不是VBA的帮助)

Peter Thornton

答案 1 :(得分:0)

“运行时错误'-2147352565(8002000b)':无法将焦点移动到控件上,因为它不可见,未启用或不接受焦点的类型”可以克服,但可以按顺序定义区域你想选择。显然有些人可能在任何情况下都这样做,但是在这个具体的例子中需要克服这个问题。这是一个从一个工作簿复制到另一个工作簿并粘贴其中U是表单excel发现“不可见”的示例。

        Dim U As Workbook
        Dim Us As Worksheet
    Set U = Application.Workbooks.Open(Path)
    Set Us = U.Worksheets("sheet")
    With Us
        .Range("A:AJ").Select
        Selection.Copy
    End With
        U.Close SaveChanges = True
    With DestinationWorkbook
        .Sheets("sheet").Range("A:AJ").PasteSpecial Paste:=xlPasteAll
        .Save
    End With

答案 2 :(得分:0)

只是为了帮助您,直到现在还没有找到答案: 在我的情况下,当我在应用程序窗口最大化时重新定义应用程序窗口时,会出现此消息:

e.g。 Application.width = 100 (on Excel 2003 or 2007)

这种情况下的解决方案是首先将应用程序窗口置于NORMAL状态。

e.g。 ActiveWindow.WindowState = xlNormal