首页 文章

excel vba插入列运行时错误1004

提问于
浏览
1

这是我在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 回答

  • 1

    每当我遇到这样的问题时,我总是将代码隔离到最简单的形式 . 一旦我在该级别上工作,我将其添加回完整的应用程序,通常可以弄清楚我做错了什么 .

    我_____838128_已经包含了一些 Debug.Print 语句来帮助我验证发生了什么 . 调试消息将显示在“立即”窗口中 . 显然,您也可以逐步执行代码并检查变量 .

    要使其工作,请创建一个工作簿并将其另存为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
    

    运行代码后,您可以检查目标工作表 . 您应该看到我们写入第I列的文本现在位于第J列 .

  • 0

    当我将变量命名更改为:

    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工作簿中确实存在'Sheetname'吗?

相关问题