在Excel 2013中添加插入列失败,错误438

我将不胜感激帮助解决这个问题与VBA插入一个列到工作表。 工作表是从数据库生成的。 我需要在工作表中插入不属于数据库一部分的数据。 该项目从工作表中获取数据并将其写入一系列Word表单。 从macros启用工作表中的模块运行时,代码工作正常。 当我使用加载项(.xlam)中的代码时,它不插入列,错误438被Err.Number捕获。 当我把模块放在一个单独的工作簿中并运行它时,列被插入,但错误仍然被捕获。 我已经尝试了很多关于debugging和修复我的代码在加载项中正确运行的build议。 这个插件是用一个有效的证书签署的,它应该允许它在我们的networking上运行。 我开始使用.EntireColumn.Insert但切换到Selection.Insert看到它会工作。 两个版本都无法插入列。 我还更改了代码以创build对目标工作表的特定引用,而不是依赖于ActiveWorkbookActivesheet

编辑:工作表不受保护。

我正在使用Excel的VBA添加在控制中的 @Rory方法。 我试过了@ErikEidt 对Excel的独立代码的回答,以使用Excel快速访问工具栏上的button来运行加载项。
我仍然收到错误消息,但代码执行,列插入成功。

这是我的代码的相关摘录。

 Option Explicit Sub FormfromExcell() 'Note:Requires Reference to Microsoft Word and Excel(15.0 for 2013)Object Library set in Tools>References 'DECLARE AND SET VARIABLES ' Excel Objects Dim WBA As Workbook 'The Active workbook Dim WBAname As String Dim wksht As Worksheet 'Excel Worksheet Dim shtName As String Dim myLastRow As Long Dim myLastCol As Long ' Initialize the Excel Objects Set WBA = ActiveWorkbook 'The workbook that calls the Add-In WBAname = ActiveWorkbook.Name shtName = WBA.Worksheets("Dynamic Risk Report").Name Set wksht = WBA.Worksheets("Dynamic Risk Report") 'Set wksht = Workbooks("WBAname").Worksheets("shtName") Application.StatusBar = "Checking for Status and Action Columns" ' Check for presence of non-database columns (Action and Status) and insert them if not there. If wksht.Cells(1, "D") = "Action" Then GoTo Checkforstatus 'wksht.Range("D1").EntireColumn.Insert wksht.Columns("D:D").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove If Err.Number <> 0 Then MsgBox "Error" & Err.Number wksht.Cells(1, "D").Value = "Action" Checkforstatus: 'Rest of code 

如果你可以消除select,只是做一个直接插入,将工作?

你也尝试定义你自己的常量,以防外接程序无法访问 – 即使这对我没有意义,看到你从Excel运行这个

 Const xlToRight = -4161 Const xlFormatFromLeftOrAbove = 0 Dim rge As Range 

replace这个:

 wksht.Columns("D:D").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 

有了这个

 Set rge = wksht.Columns("D:D") rge.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove