首页 > 解决方案 > 将按钮操作到工作表仅适用于调试模式

问题描述

我尝试向新创建的工作簿添加一个按钮并在按钮上设置文本。

当我调试代码(F8)时,它工作正常。但是当我运行代码时,似乎工作簿在代码位于按钮代码处之前没有打开,它返回运行时错误 438。

这是代码:

' more code is above here...
Dim wbI As Workbook, wbO As Workbook
Dim wsI As Worksheet, wsO As Worksheet


Set wbI = ThisWorkbook
Set wsI = wbI.Sheets("Inläsningsfil")
Set wbO = Workbooks.Add

With wbO
    Set wsO = wbO.Sheets("Blad1")
    wbI.Activate
    LR = Sheets("Inläsningsfil").Cells(Sheets("Inläsningsfil").Rows.Count, "A").End(xlUp).Row
    wsI.Range("A1:H" & LR).copy

    wsO.Range("A1").PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
wsO.Range("A1").AutoFilter
wsO.Columns("A:I").EntireColumn.AutoFit

' here is the issue
wsO.Buttons.Add(975, 0, 229, 30).Select ' works
DoEvents 
Selection.Characters.text = "Plocka fram tomma Utl.yta" ' no error here but it's not carried out
Selection.OnAction = ThisWorkbook.Name & "!FilterUtlYta" ' here it errors on 438, but if I debug then press F8 it works fine
With Selection.Characters(Start:=1, Length:=25).Font
    .Name = "Arial"
    .FontStyle = "Fet"
    .Size = 16
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Underline = xlUnderlineStyleNone
    .ColorIndex = xlAutomatic
End With
With Selection
    .Placement = xlFreeFloating
    .PrintObject = False
End With

我知道选择不是一个好方法,但即使我给形状命名并使用该名称访问它也不起作用。

selection.name = "btn"
wsO.Shapes.Range(Array("btn")).Characters.text = "Plocka fram tomma Utl.yta"

仍然会产生错误,但让工作簿打开然后按 F8 可以解决问题。
为什么我会在此工作簿上遇到此问题,我该怎么做才能解决它?我在不同的工作簿中使用相同的代码,它工作正常。

标签: excelvba

解决方案


推荐阅读