excel vba插入列运行时错误1004
这是我在StackExchange上的第一篇文章! 我一直在使用StackExchange的答案,但现在我真的有一个问题。
我正在尝试使用vba在excel中添加一个列。 这是程序是更大的子function的一部分,我创build了一个新的工作簿,并从一个不同的工作簿复制一系列工作表。
Workbooks.Add Set TTB = ActiveWorkbook 'add a bunch of sheets here 'sheetName = specific_sheet Set ttb_sheet = TTB.Sheets(sheetName) ttb_sheet.Columns("I:I").Insert Shift:=xlToRight
有了这个我得到1004的运行时错误:'插入方法的范围类失败'
我试着按照StackOverflow的一系列问题…
通过VBAselect范围类失败的方法
VBA错误1004 – 范围级别的select方法失败
看来解决scheme是先select表格,然后select范围。 我已经尝试过,没有运气。 任何人有任何见解?
这是我的主要子代码
Sub create_TTB_workbook(TTB_name_) 'create TTB workbook Dim wsHelper As New WorksheetHelper Dim final_TTB As Workbook Dim ttb_sheet As Worksheet ttb_wb = ActiveWorkbook.name Workbooks(ttb_wb).Activate PCB_tab = 0 ST_COMP_tab = 0 For Each WS In Worksheets If WS.name = "PCB_PIN_REPORT" Then PCB_tab = 1 End If If WS.name = "ST_PIN_REPORT" Then ST_COMP_tab = 1 End If Next WS Workbooks.Add Set TTB = ActiveWorkbook new_ttb_wb = TTB.name Debug.Print (new_ttb_wb) If PCB_tab = 1 Then wsHelper.copySheet ttb_wb, "PCB_PIN_REPORT", new_ttb_wb, "PCB_PIN_REPORT" End If If ST_COMP_tab = 1 Then wsHelper.copySheet ttb_wb, "ST_PIN_REPORT", new_ttb_wb, "ST_PIN_REPORT" End If wsHelper.copySheet ttb_wb, TTB_name_, new_ttb_wb, TTB_name_ ' TRIED A BUNCH OF METHODS here... 'Workbooks(ttb_wb).Sheets(TTB_name_).Cells.copy 'Sheets.Add.name = TTB_name_ 'ActiveSheet.paste 'Sheets(TTB_name_).Activate 'Columns("I:I").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'Worksheets(TTB_name_).Range("I1").EntireColumn.Insert 'Columns("I:I").Select 'Columns("I:I").Insert Shift:=xlToRight Set ttb_sheet = Sheets(TTB_name_) ttb_sheet.Columns("I:I").Insert Shift:=xlToRight Columns("K").copy Destination:=Range("I1") Range("I6") = "header name" End Sub
每当遇到像这样的问题时,我总是将代码隔离为最简单的forms。 一旦我得到它在这个级别的工作,我把它加回到完整的应用程序,通常可以弄清楚我做错了什么。
我已经写了一个简单的你正在做的事情。 请注意,我已经包含了一些Debug.Print
语句来帮助我validation正在发生的事情。 debugging消息将出现在您的立即窗口中。 显然,你也可以逐步完成代码,并随时检查variables。
为了使这个工作,创build一个工作簿,并将其保存为DestinationWorkbook.xlsx。 然后打开另一个工作簿并插入下面的代码。
Sub InsertColumnInDestinationWorksheet() Dim sourceWb As Workbook Dim targetWb As Workbook Dim sourceWs As Worksheet Dim targetWs As Worksheet Set sourceWb = ThisWorkbook Debug.Print sourceWb.Name Set targetWb = Workbooks("DestinationWorkbook.xlsx") Debug.Print targetWb.Name Set sourceWs = sourceWb.Sheets("Sheet1") Debug.Print sourceWs.Name Set targetWs = targetWb.Sheets("Sheet1") Debug.Print targetWs.Name targetWs.Range("I1").Value2 = "Moving right along..." targetWs.Columns("I:I").Insert shift:=xlToRight End Sub
运行代码后,您可以检查目标工作表。 您应该看到我们写入第一列的文本现在在第J列
当我更改variables命名为:
Sub testingg() Dim ttb_sheet As Worksheet Set ttb_sheet = Sheets(1) ttb_sheet.Columns("I:I").Insert Shift:=xlToRight End Sub
所以我认为在设置第3行的ttb_sheet的时候,你参考工作簿的方式存在一个问题。请注意,你添加了一个工作簿,但是实际上并没有“激活”它。 你确定“工作表名称”实际上存在于TTB工作簿中吗?