Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VBA中获取循环以停止打印 我对VBA很陌生,java和C++多年前就很生疏了,所以大家都很感激。在概述中,我试图让这个程序找到一个数字,并将月份解释为外部工作簿上的工作表编号,然后根据第一个数字返回一个值。我让它这样做,但我不能让循环在第一个空单元格结束。可能是lookFor中的范围或loop语句有问题;我不确定。有什么想法吗?这是密码 Sub Go() Range("B6").Select Do Until IsEmpty(ActiveCell) Dim lookFor As Range Dim srchRange As Range Dim book1 As Workbook Dim book2 As Workbook Dim book2Name As String book2Name = "Cash_Office_Long_Short_Log_FYE18.xlsx" Dim book2NamePath As String book2NamePath = ThisWorkbook.Path & "\" & book2Name Dim refMonth As Integer refMonth = Month(Cells(6, 5)) + 1 Debug.Print "refMonth="; refMonth Set book1 = ThisWorkbook If IsOpen(book2Name) = False Then Workbooks.Open (book2NamePath) Set book2 = Workbooks(book2Name) Set lookFor = book1.Sheets(1).Range("B6:B800") Set srchRange = book2.Sheets(refMonth).Range("A1:B800") lookFor.Offset(0, -1).Value = Application.VLookup(lookFor, srchRange, 2, False) ActiveCell.Offset(1, 0).Select Loop End Sub Function IsOpen(strWkbNm As String) As Boolean On Error Resume Next Dim wBook As Workbook Set wBook = Workbooks(strWkbNm) If wBook Is Nothing Then IsOpen = False Set wBook = Nothing On Error GoTo 0 Else IsOpen = True Set wBook = Nothing On Error GoTo 0 End If End Function_Excel_Vba - Fatal编程技术网

Excel 在VBA中获取循环以停止打印 我对VBA很陌生,java和C++多年前就很生疏了,所以大家都很感激。在概述中,我试图让这个程序找到一个数字,并将月份解释为外部工作簿上的工作表编号,然后根据第一个数字返回一个值。我让它这样做,但我不能让循环在第一个空单元格结束。可能是lookFor中的范围或loop语句有问题;我不确定。有什么想法吗?这是密码 Sub Go() Range("B6").Select Do Until IsEmpty(ActiveCell) Dim lookFor As Range Dim srchRange As Range Dim book1 As Workbook Dim book2 As Workbook Dim book2Name As String book2Name = "Cash_Office_Long_Short_Log_FYE18.xlsx" Dim book2NamePath As String book2NamePath = ThisWorkbook.Path & "\" & book2Name Dim refMonth As Integer refMonth = Month(Cells(6, 5)) + 1 Debug.Print "refMonth="; refMonth Set book1 = ThisWorkbook If IsOpen(book2Name) = False Then Workbooks.Open (book2NamePath) Set book2 = Workbooks(book2Name) Set lookFor = book1.Sheets(1).Range("B6:B800") Set srchRange = book2.Sheets(refMonth).Range("A1:B800") lookFor.Offset(0, -1).Value = Application.VLookup(lookFor, srchRange, 2, False) ActiveCell.Offset(1, 0).Select Loop End Sub Function IsOpen(strWkbNm As String) As Boolean On Error Resume Next Dim wBook As Workbook Set wBook = Workbooks(strWkbNm) If wBook Is Nothing Then IsOpen = False Set wBook = Nothing On Error GoTo 0 Else IsOpen = True Set wBook = Nothing On Error GoTo 0 End If End Function

Excel 在VBA中获取循环以停止打印 我对VBA很陌生,java和C++多年前就很生疏了,所以大家都很感激。在概述中,我试图让这个程序找到一个数字,并将月份解释为外部工作簿上的工作表编号,然后根据第一个数字返回一个值。我让它这样做,但我不能让循环在第一个空单元格结束。可能是lookFor中的范围或loop语句有问题;我不确定。有什么想法吗?这是密码 Sub Go() Range("B6").Select Do Until IsEmpty(ActiveCell) Dim lookFor As Range Dim srchRange As Range Dim book1 As Workbook Dim book2 As Workbook Dim book2Name As String book2Name = "Cash_Office_Long_Short_Log_FYE18.xlsx" Dim book2NamePath As String book2NamePath = ThisWorkbook.Path & "\" & book2Name Dim refMonth As Integer refMonth = Month(Cells(6, 5)) + 1 Debug.Print "refMonth="; refMonth Set book1 = ThisWorkbook If IsOpen(book2Name) = False Then Workbooks.Open (book2NamePath) Set book2 = Workbooks(book2Name) Set lookFor = book1.Sheets(1).Range("B6:B800") Set srchRange = book2.Sheets(refMonth).Range("A1:B800") lookFor.Offset(0, -1).Value = Application.VLookup(lookFor, srchRange, 2, False) ActiveCell.Offset(1, 0).Select Loop End Sub Function IsOpen(strWkbNm As String) As Boolean On Error Resume Next Dim wBook As Workbook Set wBook = Workbooks(strWkbNm) If wBook Is Nothing Then IsOpen = False Set wBook = Nothing On Error GoTo 0 Else IsOpen = True Set wBook = Nothing On Error GoTo 0 End If End Function,excel,vba,Excel,Vba,循环问题是由使用ActiveCell引起的。一旦打开一个新工作簿,活动单元格就会变成该工作簿中的单元格,这导致循环变得非常混乱 有关如何避免这些问题的建议,请参阅 同时,我已经重构了您的代码,以(希望)完成您试图完成的任务: 'Change name of sub - "Go" isn't valid Sub RunMe() Dim controlRow As Long Dim lookFor As Range Dim srchRange As Range Dim

循环问题是由使用
ActiveCell
引起的。一旦打开一个新工作簿,活动单元格就会变成该工作簿中的单元格,这导致循环变得非常混乱

有关如何避免这些问题的建议,请参阅

同时,我已经重构了您的代码,以(希望)完成您试图完成的任务:

'Change name of sub - "Go" isn't valid
Sub RunMe()
    Dim controlRow As Long
    Dim lookFor As Range
    Dim srchRange As Range
    Dim book1 As Workbook
    Dim book2 As Workbook
    Dim book2Name As String
    Dim book2NamePath As String
    Dim refMonth As Integer

    Set book1 = ThisWorkbook
    With book1.Worksheets(1) ' I have assumed that the active sheet was worksheets(1)
        'Set row pointer to start at row 6
        controlRow = 6
        Do Until IsEmpty(.Cells(controlRow, "B"))

            book2Name = "Cash_Office_Long_Short_Log_FYE18.xlsx"
            book2NamePath = ThisWorkbook.Path & "\" & book2Name
            refMonth = Month(.Cells(6, 5)) + 1  'Should this be controlRow rather than 6?

            Debug.Print "refMonth="; refMonth

            If Not IsOpen(book2Name) Then Workbooks.Open book2NamePath
            Set book2 = Workbooks(book2Name)

            Set lookFor = .Cells(controlRow, "B") ' Assumed that you are searching for value on this row
            Set srchRange = book2.Worksheets(refMonth).Range("A1:B800")

            lookFor.Offset(0, -1).Value = Application.VLookup(lookFor.Value, srchRange, 2, False)

            'Point to next row
            controlRow = controlRow + 1
        Loop
    End With

End Sub

Function IsOpen(strWkbNm As String) As Boolean
    On Error Resume Next
    Dim wBook As Workbook
    Set wBook = Workbooks(strWkbNm)
    IsOpen = Not (wBook Is Nothing)
    Set wBook = Nothing
    On Error GoTo 0
End Function

循环问题是由使用
ActiveCell
引起的。一旦打开一个新工作簿,活动单元格就会变成该工作簿中的单元格,这导致循环变得非常混乱

有关如何避免这些问题的建议,请参阅

同时,我已经重构了您的代码,以(希望)完成您试图完成的任务:

'Change name of sub - "Go" isn't valid
Sub RunMe()
    Dim controlRow As Long
    Dim lookFor As Range
    Dim srchRange As Range
    Dim book1 As Workbook
    Dim book2 As Workbook
    Dim book2Name As String
    Dim book2NamePath As String
    Dim refMonth As Integer

    Set book1 = ThisWorkbook
    With book1.Worksheets(1) ' I have assumed that the active sheet was worksheets(1)
        'Set row pointer to start at row 6
        controlRow = 6
        Do Until IsEmpty(.Cells(controlRow, "B"))

            book2Name = "Cash_Office_Long_Short_Log_FYE18.xlsx"
            book2NamePath = ThisWorkbook.Path & "\" & book2Name
            refMonth = Month(.Cells(6, 5)) + 1  'Should this be controlRow rather than 6?

            Debug.Print "refMonth="; refMonth

            If Not IsOpen(book2Name) Then Workbooks.Open book2NamePath
            Set book2 = Workbooks(book2Name)

            Set lookFor = .Cells(controlRow, "B") ' Assumed that you are searching for value on this row
            Set srchRange = book2.Worksheets(refMonth).Range("A1:B800")

            lookFor.Offset(0, -1).Value = Application.VLookup(lookFor.Value, srchRange, 2, False)

            'Point to next row
            controlRow = controlRow + 1
        Loop
    End With

End Sub

Function IsOpen(strWkbNm As String) As Boolean
    On Error Resume Next
    Dim wBook As Workbook
    Set wBook = Workbooks(strWkbNm)
    IsOpen = Not (wBook Is Nothing)
    Set wBook = Nothing
    On Error GoTo 0
End Function

您的问题是由使用
ActiveCell
引起的,它可能位于
Cash\u Office\u Long\u Short\u Log\u FYE18.xlsx
中的活动工作表中。但是,如果搜索项的范围为795个单元格,则尝试执行
VLookup
时也会遇到问题,这会导致类型不匹配错误。您实际上只是在原始工作表的B6、B7、B8等中搜索单元格吗?活动单元格可能位于该工作表中,但在我运行的测试实例中,它始终位于book1或Thisworkbook中。我只是在book2的book1中搜索B列中单元格的值。所以你的代码永远不会打开第二个工作簿?当你开始阅读时,它总是打开的?是的,因为第二本工作簿和第一本书一样是研究的起点。老实说,我不确定如何编写命令使其打开第二个工作簿。如果代码运行时第二个工作簿未打开,则代码将打开它,并且“活动”该工作簿中的工作表变为
ActiveSheet
,而
ActiveCell
则位于该工作表上,而不再位于开始运行宏时所在的工作表上。因此
ActiveCell.Offset(1,0).Select
是在第二个工作簿中选择一个单元格。您的问题是由于使用
ActiveCell
而引起的,该单元格可能位于
现金办公室\u Long\u Short\u Log\u FYE18.xlsx中的活动工作表中。但是,如果搜索项的范围为795个单元格,则尝试执行
VLookup
时也会遇到问题,这会导致类型不匹配错误。您实际上只是在原始工作表的B6、B7、B8等中搜索单元格吗?活动单元格可能位于该工作表中,但在我运行的测试实例中,它始终位于book1或Thisworkbook中。我只是在book2的book1中搜索B列中单元格的值。所以你的代码永远不会打开第二个工作簿?当你开始阅读时,它总是打开的?是的,因为第二本工作簿和第一本书一样是研究的起点。老实说,我不确定如何编写命令使其打开第二个工作簿。如果代码运行时第二个工作簿未打开,则代码将打开它,并且“活动”该工作簿中的工作表变为
ActiveSheet
,而
ActiveCell
则位于该工作表上,而不再位于开始运行宏时所在的工作表上。所以
ActiveCell.Offset(1,0).Select正在第二个工作簿中选择一个单元格。