0

私は何週間もこの問題を解決しようとしてきました。ユーザーフォームを持つテンプレートがあります。このユーザー フォームは、当月のレポートと前の月のレポートを選択し、当月のレポートで vlookup を実行します。列 B で vlookup を実行します。問題は、コードが vlookup を実行して停止しないことです。列 C の空白セルにヒットしたらすぐに停止する必要があります。コードは次のとおりです。私はここで助けが必要です。ありがとうございました!

Private Sub CommandButton1_Click()
    Dim str1 As String
    Dim str2 As String
    Dim i As Integer

    Application.ScreenUpdating = False

    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            str1 = ListBox1.List(i)
        End If
    Next i

    For i = 0 To ListBox2.ListCount - 1
        If ListBox2.Selected(i) = True Then
            str2 = ListBox2.List(i)
        End If
    Next i

    Workbooks(str1).Activate
    Sheets(1).Activate
    Range("B1").Select
    i = 0
    Do Until ActiveCell.Offset(i, 0).Value = "Category"
        i = i + 1
    Loop
    Range("B1").Offset(i, 0).Select
    With Range(ActiveCell.Offset(1), Cells(ActiveSheet.UsedRange.Rows.Count, 2))
        .Formula = "=VLOOKUP(C" & ActiveCell.Offset(1).Row & ",'[" & str2 & "]Sheet1'!$A$4:$B$200,2,FALSE)"
    End With

    Application.ScreenUpdating = True
End Sub
4

1 に答える 1

0

多分...

Private Sub CommandButton1_Click()

    Dim lMacroSec As MsoAutomationSecurity
    Dim lCalc As XlCalculation
    Dim i As Long
    Dim j As Long

    With Application
        lMacroSec = .AutomationSecurity
        lCalc = .Calculation
        .AutomationSecurity = lMacroSec
        .Calculation = xlCalculationManual
        .DisplayAlerts = False
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            For j = 0 To ListBox2.ListCount - 1
                If ListBox2.Selected(j) = True Then
                    With Workbooks(ListBox1.List(i)).Sheets(1)
                        With .Columns("B").Find("Category").Offset(1)
                            With .Parent.Range(.Cells, .Offset(-1, 1).End(xlDown).Offset(, -1))
                                .Formula = "=VLOOKUP(C" & .Row & ",'[" & ListBox2.List(j) & "]Sheet1'!$A$4:$B$200,2,FALSE)"
                                .Calculate
                            End With
                        End With
                    End With
                End If
            Next j
        End If
    Next i

    With Application
        .AutomationSecurity = lMacroSec
        .Calculation = lCalc
        .DisplayAlerts = True
        .EnableEvents = True
        .ScreenUpdating = True
    End With

End Sub
于 2013-09-11T19:44:22.567 に答える