Vba 从滚动列表自动更新路径

Vba 从滚动列表自动更新路径,vba,excel,Vba,Excel,我正在尝试根据酒店名称滚动列表自动编辑excel工作表的链接 到目前为止,我已经设法创建了一个自动路径(见附图),但我没有设法在单元格(“A1”)(滚动列表)被修改后立即更新链接 这就是我对宏的想法: 记住前面的路 在单元格“A1”更改后,将其替换为新路径 更新 见我的草稿如下: Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = Range(A1)

我正在尝试根据酒店名称滚动列表自动编辑excel工作表的链接

到目前为止,我已经设法创建了一个自动路径(见附图),但我没有设法在单元格(“A1”)(滚动列表)被修改后立即更新链接

这就是我对宏的想法:

  • 记住前面的路
  • 在单元格“A1”更改后,将其替换为新路径
  • 更新
  • 见我的草稿如下:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
        Set KeyCells = Range(A1)
    
         If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
        Run Macro_2
        End If
    End Sub
    
    Sub Macro_2()
    
       Range("F2").Copy
        Range("F1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        ChDir Dir(Range("F2").Value)
        ActiveWorkbook.ChangeLink Name:=Dir(Range("F1").Value) _
            , NewName:=Dir(Range("F2").Value) _
            , Type:=xlExcelLinks
    
    End Sub
    
    错误:找不到路径


    提前感谢您的帮助

    F1和F2中的值不是路径。路径必须在文件名之前结束,当然不能在该文件中包含工作表,也不能在该工作表中包含单元格地址。

    这是您的代码重写(不必要的代码已删除)

    请阅读代码中的注释

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        If Application.Intersect(Range("A1"), Target) Is Nothing Then Exit Sub
    
        Range("F2").Copy
        Range("F1").PasteSpecial _
            Paste:=xlPasteValues, _
            Operation:=xlNone, _
            SkipBlanks:=False, _
            Transpose:=False
    
        ' this value is in F1 and in F2  ( it is NOT a valid filename )
        ' C:\Users\h5307-rm\Desktop\Casablanca\hotels\Casablanca\Ibis El Jadida\Budget\[Budget.xlsx]Sheet1'$A$1
    
        ' F2 contains an invalid path name ... ChDir command will fail
        ChDir Dir(Range("F2").Value)
    
        ' F1 and F2 contain invalid path names, this command will fail
        ActiveWorkbook.ChangeLink _
            Name:=Dir(Range("F1").Value), _
            NewName:=Dir(Range("F2").Value), _
            Type:=xlExcelLinks
    
    End Sub
    

    您在代码的哪一行得到错误?我希望
    运行宏2
    会导致错误。省略“Run”。您可能会说
    callmacro_2
    ,但“Call”是多余的
    Application.Intersect(keycell,Range(Target.Address))
    不应导致错误,但它是复杂的<代码>目标已经是一个范围。因此,
    Application.Intersect(keycell,Target)
    将执行相同的任务。
    ChDir
    Dir
    是两个不同的命令。我建议测试
    Dir(Range(“F2”).Value)
    返回的内容。您的意思可能类似于
    ChDir Range(“F2”)。Value
    并在下一条指令中继续使用
    Dir
    函数。正确使用
    Dir
    是检查路径是否存在,如果不存在则不继续使用该路径。错误出现在宏_2()上,它无法识别ChDir Dir(范围(“F2”)。值也无法识别ChDir范围(“F2”)。值。请注意,单元格F2包含以下内容:=“C:\Users\h5307 rm\Desktop\Casablanca\hotels\”和VLOOKUP($1,设置!$2:$3,2,假)&“\”&Sheet1!A1&“\Budget[Budget.xlsx]Sheet1'!$1“如果要在运行工作表更改事件宏的同一工作表上添加/修改/删除值,请使用application.enableevents=false暂时挂起事件,否则工作表更改将尝试自行运行。请记住使用application.enableevents=true重新启用事件(通常通过错误控制)退出工作表前,更改。
    范围(A1)
    错误。至少应为
    范围(“A1”)
    但实际上,您声明和设置一个范围对象只是为了使用原始字符串地址创建另一个范围对象。这似乎是在挖一个洞,以便您可以再次填充它。非常感谢。我应该如何编写路径+文件名以获得有效的路径?与您在F2中创建无效路径的方式相同,但忽略了不好的部分。您已经知道了知道正确的路径应该是什么(您正在处理的文件在您的计算机上)