具有引用范围的Excel,VBA,.ClearContents,错误1004

时间:2016-07-28 15:52:37

标签: excel vba

我试图在.offset引用的范围内使用.clearcontents,我遇到了麻烦

我知道这是有效的

Sub clear1_1()

Workbooks("xyz").Sheets("abc").range("A2:A3").ClearContents

End Sub

但如果我尝试这不是

Sub clear2()

Dim region As range
Set region = range("S509:AD618")
Workbooks("xyz").Worksheets("abc").range(region).ClearContents

end sub

我从其他帖子中了解到,它与对象defyining有关,但我不知道我在哪里弄错了,我需要写什么。

最终的宏从一个工作簿运行,并且在其他未激活的工作簿中应该是.clearcontents。

我的代码看起来像这样

sub Macro()

..... ton of code
Dim filename as string
dim sheetname as string
dim address3, address4 as string

filename = "xyz"
sheetname = "abc"  ' both variables that are loaded in other part

address3 and address4 loaded in other part


'here is where i get the error
sheets(sheetname).Range(Range(address3).Offset(0, 12).Address & ":" & Range(address4).Offset(-1, 23)).ClearContents


end sub

我可以用.value =""绕过它。 但是我想学习。感谢您提前做出任何回复。

编辑1 嗨斯科特,没有成功。发布我的代码的更大部分

If mapanchorsuccess = True And map1success = True And map2success = True Then
    If Workbooks(Filename).Sheets(startws).Range(address1).Offset(10, 13).HasFormula = True Then
                With Workbooks(wbm).Sheets("Report") 'report
                    .Range("A" & reportrow).Value = runnumber
                    .Range("B" & reportrow).Value = Filename
                    .Range("C" & reportrow).Value = Workbooks(Filename).Sheets(startws).Name
                    .Hyperlinks.Add anchor:=.Range("D" & reportrow), Address:=FilePath & Filename, SubAddress:=Workbooks(Filename).Sheets(startws).Name & "!A1"
                    .Range("E" & reportrow).Value = "Error"
                    .Range("F" & reportrow).Value = "rolling probably done already in this sheet"
                    reportrow = reportrow + 1
                End With

    Else
        With Workbooks(Filename).Sheets(startws)
            .Range(Range(address1).Offset(0, 12).Address & ":" & Range(address2).Offset(0, 14).Address).Copy _
            Range(Range(address1).Address & ":" & Range(address2).Offset(0, 2).Address)
                Application.CutCopyMode = False

            .Range(Range(address1).Offset(0, 16).Address & ":" & Range(address2).Offset(0, 16).Address).Copy _
            Range(Range(address1).Offset(0, 3).Address & ":" & Range(address2).Offset(0, 23).Address)
                Application.CutCopyMode = False

                    With Workbooks(wbm).Sheets("Report") 'report
                        .Range("A" & reportrow).Value = runnumber
                        .Range("B" & reportrow).Value = Filename
                        .Range("C" & reportrow).Value = Workbooks(Filename).Sheets(startws).Name
                        .Hyperlinks.Add anchor:=.Range("D" & reportrow), Address:=FilePath & Filename, SubAddress:=Workbooks(Filename).Sheets(startws).Name & "!A1"
                        .Range("E" & reportrow).Value = "Completed"
                        .Range("F" & reportrow).Value = "region1 rolled forward"
                        reportrow = reportrow + 1
                    End With


            .Range(Range(address3).Offset(0, 12).Address & ":" & Range(address4).Offset(-1, 23).Address).Copy _
            Range(Range(address3).Address & ":" & Range(address4).Offset(-1, 11).Address)

            '///// here the error 1004 occurs
            .Range(Range(address3).Offset(0, 12).Address & ":" & Range(address4).Offset(-1, 23).address).clearcontent
        End With
    End If
End If

1 个答案:

答案 0 :(得分:0)

需要使用变量设置工作簿和工作表。

然后在使用它时,因为它本身就是一个范围,只需参考它。

Sub clear2()

Dim region As range
Set region = Workbooks("xyz").Worksheets("abc")range("S509:AD618")
region.ClearContents

end sub

关于你的下一个代码;这是一个不同的问题。需要将()内的范围分配给正确的工作表父级,否则它将使用活动工作表。

最简单的是使用With块:

With sheets(sheetname)
    .Range(.Range(address3).Offset(0, 12), .Range(address4).Offset(-1, 23)).ClearContents
End With