Excel 如何使用vba更改代码中的行

Excel 如何使用vba更改代码中的行,excel,vba,Excel,Vba,如何使用vba更改下面代码中的一行 代码 换行 Expiry=DateValue(范围(“A1”)+365) 改为 Expiry=DateValue(范围(“A1”)+30) 非常感谢您的帮助请使用下一个功能: Function ReplaceCodeLine(wb As Workbook, strModule As String, strSearch As String, strReplace As String) As Boolean Dim VBProj As Object, VBCom

如何使用vba更改下面代码中的一行

代码

换行
Expiry=DateValue(范围(“A1”)+365)

改为
Expiry=DateValue(范围(“A1”)+30)


非常感谢您的帮助

请使用下一个功能:

Function ReplaceCodeLine(wb As Workbook, strModule As String, strSearch As String, strReplace As String) As Boolean
 Dim VBProj As Object, VBComp As Object, CodeMod As Object
 Dim startL As Long, endL As Long
 Dim strCLine As String, boolFound As Boolean

    Set VBProj = wb.VBProject
    Set VBComp = VBProj.VBComponents(strModule)
    Set CodeMod = VBComp.CodeModule
    startL = 1
    With CodeMod
        endL = .CountOfLines
        boolFound = .Find(Target:=strSearch, StartLine:=startL, StartColumn:=1, _
              EndLine:=endL, EndColumn:=255, wholeword:=True, MatchCase:=False, _
                                                             patternsearch:=False)

        If boolFound Then
            strCLine = Replace(CodeMod.lines(startL, 1), strSearch, _
                                     strReplace, Compare:=vbTextCompare)
            .ReplaceLine startL, strCLine
            ReplaceCodeLine = True
        Else
            ReplaceCodeLine = False
        End If
    End With
End Function
可以使用下一个子项进行测试:

Sub TestRepCodeLine()
 dim moduleName as string
 moduleName = "MyModule" ' put here your module name
  Debug.Print ReplaceCodeLine(ThisWorkbook, moduleName, "Expiry = DateValue(range(""A1"") + 365)", "Expiry = DateValue(range(""A1"") + 30)")
End Sub
如果找到并替换了代码行,则上述代码将在即时窗口中返回
True

它在具有代码的工作簿上工作(
thiswoolk
)。如果需要其他工作簿,请使用该工作簿


但是,除了学习如何替换代码行外,您确定这确实是必要的吗?

请使用下一个功能:

Function ReplaceCodeLine(wb As Workbook, strModule As String, strSearch As String, strReplace As String) As Boolean
 Dim VBProj As Object, VBComp As Object, CodeMod As Object
 Dim startL As Long, endL As Long
 Dim strCLine As String, boolFound As Boolean

    Set VBProj = wb.VBProject
    Set VBComp = VBProj.VBComponents(strModule)
    Set CodeMod = VBComp.CodeModule
    startL = 1
    With CodeMod
        endL = .CountOfLines
        boolFound = .Find(Target:=strSearch, StartLine:=startL, StartColumn:=1, _
              EndLine:=endL, EndColumn:=255, wholeword:=True, MatchCase:=False, _
                                                             patternsearch:=False)

        If boolFound Then
            strCLine = Replace(CodeMod.lines(startL, 1), strSearch, _
                                     strReplace, Compare:=vbTextCompare)
            .ReplaceLine startL, strCLine
            ReplaceCodeLine = True
        Else
            ReplaceCodeLine = False
        End If
    End With
End Function
可以使用下一个子项进行测试:

Sub TestRepCodeLine()
 dim moduleName as string
 moduleName = "MyModule" ' put here your module name
  Debug.Print ReplaceCodeLine(ThisWorkbook, moduleName, "Expiry = DateValue(range(""A1"") + 365)", "Expiry = DateValue(range(""A1"") + 30)")
End Sub
如果找到并替换了代码行,则上述代码将在即时窗口中返回
True

它在具有代码的工作簿上工作(
thiswoolk
)。如果需要其他工作簿,请使用该工作簿


但是,除了学习如何替换代码行之外,您确定这真的是必要的吗?

在什么情况下您想更改该行?一种方法是将365存储在现有VBA中的变量中。当出现365应该更改为30的情况时,请更改变量的值。我忘了提及,但我对vba完全陌生,尝试通过youtube学习,因此目前为止对这些建议不感兴趣。我希望以编程方式更改代码。我可以手动更改。这里可能有XY问题。应该不需要以编程方式更改VBA代码。你最好解释一下你真正想要达到的目标(要求),而不是询问你提出的解决方案。在什么情况下你想改变这一行?一种方法是将365存储在现有VBA中的变量中。当出现365应该更改为30的情况时,请更改变量的值。我忘了提及,但我对vba完全陌生,尝试通过youtube学习,因此目前为止对这些建议不感兴趣。我希望以编程方式更改代码。我可以手动更改。这里可能有XY问题。应该不需要以编程方式更改VBA代码。你最好解释一下你真正想要达到的目标(要求),而不是询问你提出的解决方案。@Wendi:你的意思是VBA在没有突出显示任何代码行的情况下引发了一个错误,说“未定义错误”?请尝试更新的
子项
。刷新页面(这一页)并复制更新的代码。我的错误是FaneDuru,代码运行得很好。只是我错过了两个代码一起工作。我觉得我很愚蠢。法内杜鲁:照你说的做。再次感谢您。@FaneDuru关于这种应用程序的实用性的回答很好,问题也很好。谢谢分享您关于如何更改模块代码的知识。@Wendi:您的意思是VBA在没有突出显示任何代码行的情况下引发了一个错误,说“未定义错误”?请尝试更新的
子项
。刷新页面(这一页)并复制更新的代码。我的错误是FaneDuru,代码运行得很好。只是我错过了两个代码一起工作。我觉得我很愚蠢。法内杜鲁:照你说的做。再次感谢您。@FaneDuru关于这种应用程序的实用性的回答很好,问题也很好。感谢您分享有关如何更改模块代码的知识。