Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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 将函数转换为子进程--卡住_Excel_Vba - Fatal编程技术网

Excel 将函数转换为子进程--卡住

Excel 将函数转换为子进程--卡住,excel,vba,Excel,Vba,列“p”(“P6:P3000”)包含一个值,例如“员工\合同\状态\结束”。我正在尝试将单元格中的“Closed”(也可以是“Open”)部分拉到列“Q”中,或者只是用分隔符(“"”)后面的最后一个文本替换现有列“P”值。。。“员工\合同\状态\关闭”->“关闭”或“打开”。这将创建以下步骤: 创建新列Q 在列标题中插入新值 执行“P”中的函数以替换值或转储到“Q”列(“Q6:Q3000”) 下面是我到目前为止拥有的-->代码,用于创建列并调用函数代码以提取最后一个分隔符后的最后一个文本。。。这

列“p”(“P6:P3000”)包含一个值,例如“员工\合同\状态\结束”。我正在尝试将单元格中的“Closed”(也可以是“Open”)部分拉到列“Q”中,或者只是用分隔符(“"”)后面的最后一个文本替换现有列“P”值。。。“员工\合同\状态\关闭”->“关闭”或“打开”。这将创建以下步骤:

  • 创建新列Q
  • 在列标题中插入新值
  • 执行“P”中的函数以替换值或转储到“Q”列(“Q6:Q3000”)
  • 下面是我到目前为止拥有的-->代码,用于创建列并调用函数代码以提取最后一个分隔符后的最后一个文本。。。这是自动化过程的一部分,因此目标不是触摸或操纵任何 单元格值。我知道可能有一个子流程来执行此操作,但我无法理解它,一直在挠头。这是我第一次在论坛上,如果有人能提供一个固定的代码,但也能解释它背后的语法,那就太好了,因为我对VBA很有经验,但从来没有遇到过这个过程。谢谢^_^

  • &二,。创建新列并更改标题名称:

    Sub ContractStatus_Change()
        Application.ScreenUpdating = False
        Workbooks("DIV_EIB_Tool.xlsm").Worksheets("EIBMaintainEmployeeContractsW31").Range("Q5") _
            .EntireColumn.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
        Worksheets("EIBMaintainEmployeeContractsW31").Range("Q5").Value = "Contract Status"
        Worksheets("EIBMaintainEmployeeContractsW31").Range("Q6:Q3000").NumberFormat = "General"
        Application.ScreenUpdating = True
    End Sub
    
  • 我的功能是从公开值中提取最后一个文本:

    Function RightWord(r As Range) As Variant
        Dim s As String
        s = Trim(r.Value)
        RightWord = Mid(s, InStrRev(s, "_") + 1)
    End Function
    
  • 我还没有遇到错误,只是不知道如何把它拼凑在一起,假设我可以通过一个子过程来运行它,但我有一个巨大的大脑屁。

    试试这段代码

    Sub Test()
    Dim a, i&
    
    With Worksheets("EIBMaintainEmployeeContractsW31")
        .Columns("Q").Insert
        a = .Range("P6:P" & .Cells(Rows.Count, "P").End(xlUp).Row).Resize(, 2).Value
    
        For i = LBound(a) To UBound(a)
            If InStr(a(i, 1), "_") Then
                a(i, 2) = Split(a(i, 1), "_")(UBound(Split(a(i, 1), "_")))
            End If
        Next i
    
        With .Range("Q5")
            .Value = "Contract Status"
            .Offset(1, -1).Resize(UBound(a, 1), UBound(a, 2)).Value = a
        End With
    End With
    End Sub
    
    我是通过处理工作表
    EIBMaintainEmployeeContractsW31
    开始代码的,因此在
    with
    End with
    之间,您会注意到一些行以点开头,表示此工作表。然后在列Q之前插入一列,并将所需范围(P6到P&最后一行)存储到数组中(数组速度更快) 然后循环数组,该数组包含两列(一列用于原始数据,另一列用于所需输出)。使用
    InSstr
    函数确保下划线存在,如果存在,则根据下划线将分割输出的最后一部分存储到第二列中。 最后将数组填充到工作表中。
    希望这个解释能对你有所帮助。

    你可能是摇滚明星,谢谢。你能顺便解释一下这个逻辑吗?@AntyA不客气。我在这篇文章中添加了一些解释。