VBA,整张表格中的单元格修剪,溢出错误

时间:2018-12-14 20:52:50

标签: excel vba excel-vba

我有加载2个工作簿并将其复制到主工作簿的代码。但是,当我尝试修剪粘贴的工作表中的所有单元格时(太去除空格),我得到了overflow error

有人知道在整张纸上修剪多余的空白时为什么会发生此溢出错误吗?具体来说,我在这部分Target = Target.Value中遇到了错误。

Sub Load()
    LoadDailyWorkbook
    LoadLastWeeksWorkbook
End Sub

Sub LoadDailyWorkbook()
    Const A1BJ200 As String = "A1:BJ200"
    Const A1L3 As String = "A1:L3"
    Dim masterWB As Workbook
    Dim dailyWB As Workbook
    'Set Current Workbook as Master
    Set masterWB = Application.ThisWorkbook
    'Set some Workbook as the one you are copying from
    Set dailyWB = getWorkbook(Sheets("Control Manager").Range("O2"))

    If Not dailyWB Is Nothing Then
        With dailyWB
            'Copy the Range from dailyWB and Paste it into the MasterWB
            .Worksheets("Summary1").Range(A1BJ200).Copy masterWB.Worksheets("Summary").Range("A1")
            TrimRange masterWB.Worksheets("Summary").Range(A1BJ200)
            'repeat for next Sheet
            .Worksheets("risk1").Range(A1BJ200).Copy masterWB.Worksheets("risk").Range("A1")
            TrimRange masterWB.Worksheets("risk").Range(A1BJ200)

            'repeat for CS sheet
            .Worksheets("CS today").Range(A1L3).Copy masterWB.Worksheets("CS").Range("A1").Rows("1:1")
            TrimRange masterWB.Worksheets("CS").Range(A1L3)
            .Close SaveChanges:=False
        End With

    End If
End Sub

Sub LoadLastWeeksWorkbook()
    Const A1BJ200 As String = "A1:BJ200"
    Dim masterWB As Workbook
    Dim lastweekWB As Workbook

    'Set Current Workbook as Master
    Set masterWB = Application.ThisWorkbook

    ''''''''''''Get Last Week Data''''''''''''''''''''''
    Set lastweekWB = getWorkbook(Workbooks.Open(Sheets("Control Manager").Range("O3")))
    If Not lastweekWB Is Nothing Then
        With lastweekWB
            'repeat for next risk Sheet
            .Worksheets("risk2").Range(A1BJ200).Copy masterWB.Worksheets("risk_lastweek").Range("A1")
            TrimRange masterWB.Worksheets("risk_lastweek").Range(A1BJ200)

            TrimRange masterWB.Columns("A:BB")
            .Close SaveChanges:=False
        End With
    End If
End Sub

Function getWorkbook(FullName As String) As Workbook
    If Len(Dir(FullName)) = 0 Then
        MsgBox FullName & " not found found", vbCritical, "File Not Found"
    Else
        Set getWorkbook = Workbooks.Open(FullName)
    End If
End Function

Sub TrimRange(Target As Range)
    Dim results As Variant
    Set Target = Intersect(Target.Parent.UsedRange, Target)
    If Target Is Nothing Then
        Exit Sub
    ElseIf Target.Count = 1 Then
        Target.Value = Trim(Target.Value)
        Exit Sub
    Else
        Target = Target.Value

        Dim r As Long, c As Long
        For r = 1 To UBound(results)
            For c = 1 To UBound(results, 2)
                results(r, c) = Trim(results(r, c))
            Next
        Next
        Target.Value = results
    End If
    Target.Columns.EntireColumn.AutoFit
End Sub

1 个答案:

答案 0 :(得分:1)

Sub TrimRange(Target As Range)
    Dim results As Variant

但是,您尚未在使用results之前对其进行设置。

    For r = 1 To UBound(results)

因此,您正在呼叫UBound,因为它不存在。

此外,当我将公式更改为值时,我使用的是Target.Value = Target.Value而不是Target = Target.Value。我知道.Value通常是默认值,但我从来不相信隐式内容始终有效。