我很感激帮助解决这个令人烦恼的问题,将列插入到带有VBA的工作表中。工作表是从数据库生成的。我需要在工作表中插入一列不属于数据库的数据。该项目从工作表中获取数据并将其写入一系列Word表单。从启用宏的工作表中的模块运行时,代码工作正常。当我在加载项(.xlam)中使用代码时,它不会插入列,Err.Number
会捕获错误438。当我将模块放在单独的工作簿中并运行它时,插入列但仍然捕获错误。我已经尝试了很多调试和修复代码的建议,以便在加载项中正常运行。 add in使用有效证书签名,该证书允许它在我们的网络上运行。
我开始使用.EntireColumn.Insert
,但切换到Selection.Insert
以查看可行的内容。两个版本都无法插入列。我还更改了代码以创建对目标工作表的特定引用,而不是依赖于ActiveWorkbook
或Activesheet
。
编辑:工作表不受保护。
我在Excel VBA Add In Control使用@Rory方法。
我尝试了@ ErikEidt对Standalone code for Excel的回答,使用Excel快速访问工具栏上的按钮来运行加载项。
我仍然收到错误消息但代码exectues并且列成功插入。
以下是我的代码的相关摘录。
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
答案 0 :(得分:1)
如果您可以取消选择并只是直接插入,那会起作用吗?
另外,您尝试定义自己的常量,以防万一加载项无法访问 - 即使这对我没有意义,看到您从Excel中运行此操作< / p>
Const xlToRight = -4161
Const xlFormatFromLeftOrAbove = 0
Dim rge As Range
替换它:
wksht.Columns("D:D").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
有了这个
Set rge = wksht.Columns("D:D")
rge.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove