Excel 将工作簿之间的范围粘贴为偏移量

Excel 将工作簿之间的范围粘贴为偏移量,excel,vba,Excel,Vba,我遇到的问题是,我在将一个已知范围从一个工作簿复制到另一个工作簿时画了一个空白,但在最后一行之后——但作为偏移量(3,0)。这是完整的代码,您可以忽略其中的前3/4。。。。从我设置范围的地方开始。我认为设置范围并从那里做一行偏移,但显然我做得不对 这是给我一个错误的行:设置rngFinalRange。。。我知道这是错的,但我被卡住了。思想?谢谢大家! Option Explicit Sub TEST() Dim auditfolder As String

我遇到的问题是,我在将一个已知范围从一个工作簿复制到另一个工作簿时画了一个空白,但在最后一行之后——但作为偏移量(3,0)。这是完整的代码,您可以忽略其中的前3/4。。。。从我设置范围的地方开始。我认为设置范围并从那里做一行偏移,但显然我做得不对

这是给我一个错误的行:设置rngFinalRange。。。我知道这是错的,但我被卡住了。思想?谢谢大家!

    Option Explicit
    Sub TEST()


        Dim auditfolder As String
        Dim dumpfile As String
        Dim FSO As Object
        Dim fldstart As Object
        Dim wbkAudit As Workbook
        Dim wbkdump As Workbook
        Dim rngDumpCols As Range
        Dim rngDumpFullRange As Range
        Dim strAuditName As String
        Dim strDumpName As String
        Dim fl As Object
        Dim rngAuditFileRows As Range
        Dim rngAuditCols As Range
        Dim rngFinalRange As Range
        Dim rngauditrows As Range
        Dim lastrow as range


        Set FSO = CreateObject("scripting.FileSystemObject")

        With Application.FileDialog(msoFileDialogFolderPicker)
                .InitialFileName = "\\networkpath"
                .AllowMultiSelect = False
        If .Show <> -1 Then
                MsgBox "No file selected. Exiting."
        Exit Sub
        Else
                auditfolder = .SelectedItems(1)
        Set fldstart = FSO.getfolder(auditfolder)
        End If
        End With

        For Each fl In fldstart.Files
                If Right(fl.name, 3) = "xls" Then
                    If InStr(fl.name, "5ESS") Then
                         strAuditName = fl.name
                    ElseIf InStr(fl.name, "SelectDataDump") Then
                         strDumpName = fl.name
                    Else
                      MsgBox "Missing either the audit or selectdatadump file"
                    End If
                ElseIf Right(fl.name, 4) = "xlsx" Then
                    If InStr(fl.name, "5ESS") Then
                         strAuditName = fl.name
                    ElseIf InStr(fl.name, "SelectDataDump") Then
                        strDumpName = fl.name
                    Else
                      MsgBox "Missing either the audit or selectdatadump file"
                    End If
                End If
        Next fl

        Application.ScreenUpdating = False

        Set wbkdump = Workbooks.Open(strDumpName)
        Set rngDumpCols = wbkdump.Sheets(1).Cells.Find(what:="*", After:=wbkdump.Sheets(1).Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
                          xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
        Set rngDumpFullRange = wbkdump.Sheets(1).Range("A1", rngDumpCols.Address)

        Set wbkAudit = Workbooks.Open(strAuditName)
        Set rngAuditCols = wbkAudit.Sheets(1).Cells.Find(what:="*", After:=wbkAudit.Sheets(1).Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
                           xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
        Set rngauditrows = wbkAudit.Sheets(1).Range("A1", rngAuditCols.Offset(0, -4).Address)
lastrow = wbkAudit.Sheets(1).Cells(65536, rngAuditCols.Column).End(xlUp).Row
        Set rngFinalRange = wbkAudit.Sheets(1).Range(lastrow.Offset(3, 0).Row)
                    rngFinalRange.Value = rngDumpFullRange.Value

        wbkAudit.Sheets(1).Columns.AutoFit
        wbkAudit.save

        MsgBox "Processing Complete!"


    End Sub
选项显式
子测试()
将文件夹设置为字符串
将转储文件设置为字符串
作为对象的Dim FSO
作为对象的Dim fldstart
将wbkAudit设置为工作簿
将wbkdump设置为工作簿
变暗rngDumpCols作为范围
变暗rngDumpFullRange作为范围
Dim strAuditName作为字符串
Dim strDumpName作为字符串
作为对象的Dim fl
Dim rngAuditFileRows作为范围
Dim rngAuditCols作为范围
变暗rngFinalRange作为范围
将行作为范围进行调整
将最后一行变暗为范围
设置FSO=CreateObject(“scripting.FileSystemObject”)
使用Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName=“\\networkpath”
.AllowMultiSelect=False
如果.Show-1那么
MsgBox“未选择任何文件。正在退出。”
出口接头
其他的
auditfolder=.SelectedItems(1)
设置fldstart=FSO.getfolder(auditfolder)
如果结束
以
对于fldstart.文件中的每个fl
如果正确(fl.name,3)=“xls”,则
如果仪表(fl.name,“5ESS”),则
strAuditName=fl.name
ElseIf InStr(fl.name,“SelectDataDump”)然后
strDumpName=fl.name
其他的
MsgBox“缺少审核或selectdatadump文件”
如果结束
ElseIf Right(fl.name,4)=“xlsx”然后
如果仪表(fl.name,“5ESS”),则
strAuditName=fl.name
ElseIf InStr(fl.name,“SelectDataDump”)然后
strDumpName=fl.name
其他的
MsgBox“缺少审核或selectdatadump文件”
如果结束
如果结束
下一层
Application.ScreenUpdating=False
设置wbkdump=Workbooks.Open(strDumpName)
设置rngDumpCols=wbkdump.Sheets(1).Cells.Find(what:=“*”,After:=wbkdump.Sheets(1).Cells(1,1),LookIn:=xlFormulas,LookAt:=_
xlPart,SearchOrder:=xlByColumns,SearchDirection:=xlPrevious,MatchCase:=False)
设置rngDumpFullRange=wbkdump.Sheets(1).Range(“A1”,rngDumpCols.Address)
设置wbkAudit=工作簿。打开(strAuditName)
设置rngAuditCols=wbkAudit.Sheets(1).Cells.Find(what:=“*”,After:=wbkAudit.Sheets(1).Cells(1,1),LookIn:=xlFormulas,LookAt:=_
xlPart,SearchOrder:=xlByColumns,SearchDirection:=xlPrevious,MatchCase:=False)
设置rngauditrows=wbkAudit.Sheets(1).范围(“A1”,rngAuditCols.Offset(0,-4).地址)
lastrow=wbkAudit.Sheets(1).单元格(65536,rngAuditCols.Column).结束(xlUp).行
设置rngFinalRange=wbkAudit.Sheets(1).Range(lastrow.Offset(3,0).Row)
rngFinalRange.Value=rngDumpFullRange.Value
wbkAudit.Sheets(1).Columns.AutoFit
wbkAudit.save
MsgBox“处理完成!”
端接头

lastrow
在代码中声明为
范围
对象,但您正试图将其设置为
值:

试着改变这个

lastrow = wbkAudit.Sheets(1).Cells(65536, rngAuditCols.Column).End(xlUp).Row
Set rngFinalRange = wbkAudit.Sheets(1).Range(lastrow.Offset(3, 0).Row)
…为了这个

Set lastrow = wbkAudit.Sheets(1).Cells(65536, rngAuditCols.Column).End(xlUp)
Set rngFinalRange = wbkAudit.Sheets(1).Range(lastrow.Offset(3, 0).Address)

我试过这个,但结果很疯狂。不过,我确实取得了一些进展。这段代码只给我一个单元格值,但它从正确的位置开始:Range(“A”&lastrow).Offset(3,0).value=rngDumpFullRange.value问题是它没有粘贴整个rngDumpFullRange,即A1:O204。想法?lastrow=125,所以它在A125中给了我正确的值,但就是这样。好的,所以你有
范围(lastrow.Offset(3,0).Address)
但是你真的需要
范围(lastrow.Offset(3,0).Address,lastrow.Offset(rngDumpFullRange.Rows.Count+3,rngDumpFullRange.Columns.Count))
。有道理?我没有像你这样的工作表,所以我无法测试。