这是我在StackExchange上的第一篇文章!我一直在使用StackExchange寻求答案,但现在我真的有了一个问题 .
我正在尝试使用vba在Excel中添加列 . 这是一个更大的子函数的一部分,我创建了一个新的工作簿,并从不同的工作簿中复制了一系列工作表 .
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:'Range类的插入方法失败'
我尝试了关于StackOverflow的一系列问题......
Select method of Range class failed via VBA
VBA error 1004 - select method of range class failed
似乎解决方案是先选择工作表,然后选择范围 . 我试过这个,没有运气 . 有人有任何见解吗?
这是我的主要子代码..
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
2 回答
每当我遇到这样的问题时,我总是将代码隔离到最简单的形式 . 一旦我在该级别上工作,我将其添加回完整的应用程序,通常可以弄清楚我做错了什么 .
我_____838128_已经包含了一些
Debug.Print
语句来帮助我验证发生了什么 . 调试消息将显示在“立即”窗口中 . 显然,您也可以逐步执行代码并检查变量 .要使其工作,请创建一个工作簿并将其另存为DestinationWorkbook.xlsx . 然后打开另一个工作簿并在下面插入代码 .
运行代码后,您可以检查目标工作表 . 您应该看到我们写入第I列的文本现在位于第J列 .
当我将变量命名更改为:
因此,我认为在第3行设置ttb_sheet时引用工作簿的方式存在问题 . 请注意,您添加了一个工作簿,但实际上并不是“激活”它 . 你确定TTB工作簿中确实存在'Sheetname'吗?