VBA, триммеры во всем листе, ошибка переполнения - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть код, который загружает 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 голосов
/ 15 декабря 2018
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 обычно является значением по умолчанию, но я никогда не верю, что неявные вещи работают постоянно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...