错误1004 - 选择范围类的方法失败

时间:2015-08-11 09:53:05

标签: excel vba excel-vba

好的,我知道Select是痛苦的......并且已在这里多次讨论过。但是这里解决的问题都没有帮助我。

我从MS Access运行以下代码,它导出一些数据,我需要在客户端打开导出的工作簿时,活动单元格设置在页面的左上角&#34; Intro&#34;。< / p>

我最近升级到Office 2013,代码停止工作。此代码适用于我以前版本的Office 2007。

错误是:错误1004 - 选择范围类的方法失败。

代码:

Private Sub SelectFrontPage(wbk as Object)
  wbk.Activate  ' maybe this line is not necessary
  wbk.Sheets("Intro").Activate  ' Activate or Select?
  wbk.Sheets("Intro").Range("A1").Select  ' here the debugger stops :(
End Sub

更新:

  1. sheet&#34;简介&#34;是可见的&#34; A1&#34;也是可见的,我 假设使其可选择
  2. 也尝试了Cell(1,1)但结果是 相同的
  3. 也尝试过Range(&#34; A1&#34;)。再次激活,同样的结果
  4. 也试过(wbk as Excel.Workbook),结果是一样的
  5. 我如何打开Excel?

    Dim xls As Object
    Set xls = CreateObject("Excel.Application")
    xls.EnableEvents = False
    xls.DisplayAlerts = False
    dim wbk as Object
    set wbk = xls.Workbooks.Open("mytemplate.xlsm")
    ' ... some data export here
    SelectFrontPage wbk
    wbk.Save
    wbk.Close
    

    另一个更新: 我使用了几个模板,其中一个有英文工作表名称,另一个有本地语言的工作表名称。英语版按预期工作。必须有其他东西才能导致问题......但是问题显然不在于工作表名称,因为激活工作表的行传递正常。

    当我添加行

    xls.Visible = True
    

    打开Excel应用程序后,一切都按预期工作。天哪,这是什么样的巫术?

3 个答案:

答案 0 :(得分:0)

这看起来你需要声明Excel,你将wbk作为对象传递,我尝试传递为工作簿。

> Sub whatever(wb as Excel.Workbook)
>         Dim  ws As Worksheet
>         
>         Set ws = wb.Sheets("Intro")    
>         ws.Activate
>         ws.Cells(1, 1).Select
>     End Sub

编辑: 步骤1: 你可以去有问题的工作簿,选择介绍表选择单元格A1命名范围到IntroHome。

命名范围push ctl + f3;名称管理员将出现;点击新;输入名称。

第2步 试试这段代码

Dim ws As Excel.Worksheet: Set ws = wb.Sheets("Intro")
Dim rng As Range
Set rng = [IntroHome]
ws.Activate
rng.Select

答案 1 :(得分:0)

使用Select方法是错误的方法。在这个和其他编程论坛上已多次提到它。

如果您想将A1单元格作为窗口的左上角,我建议使用Application.GoTo method

xls.Goto Reference:=wbk.Worksheets(1).Range("A1"), _ 
 scroll:=True

注意:我使用Worksheets(1)代替Sheets(1),因为Sheets集合也可以引用Charts。请阅读文档。

我测试了MS Word上面的代码行:

Sub DoWhatever()

Dim xls As Object, wbk As Object

Set xls = CreateObject("Excel.Application")
Set wbk = xls.Workbooks.Add()

xls.GoTo Reference:=wbk.Worksheets(1).Range("A1"), Scroll:=True
wbk.SaveAs "D:\aaa.xlsx"
wbk.Close SaveChanges:=False
xls.Quit

Set wbk = Nothing
Set xls = Nothing
End Sub

代码已执行且没有错误。

顺便说一句:不知道为什么将A1单元格作为MS Excel窗口的左上角仍然如此重要。 ;)

答案 2 :(得分:0)

这是Office 2013更改/错误。你不能。选择或.Activate除非可见。我担心我还没有建议的解决办法,因为我在升级到Office 2013之后才遇到这个问题。

Select是否合适取决于预期的用例。通常情况并非如此。在这种情况下,VK的用户可能希望特定单元在打开工作簿时处于活动状态,这可能是因为他们可以立即开始输入数据等.Excel在保存工作簿时保存当前活动的单元格显然,当你打开那本工作簿时它会持续存在。