【问题标题】:Change from absolute to relative workbook reference in Excel VBA在 Excel VBA 中从绝对工作簿引用更改为相对工作簿引用
【发布时间】:2011-07-18 18:06:24
【问题描述】:

我编写了一个 Excel VBA 宏,它编译位于特定文件夹中的各种电子表格中的所有信息,并将它们编译到一个“主”Excel 工作簿中。

目前在我的计算机上使用它时工作正常,但我想调整代码,以便我可以将“主”电子表格和包含单个电子表格(要编译的电子表格)的文件夹放在网络驱动器上,以便任何人都可以使用它。

我对 VBA 和一般编码还很陌生,所以我有一种强烈的感觉,可能有一个简单的解决方案可以解决我的问题。

我已经附加了当前运行绝对引用的宏。

'Summary:    Open all Excel files in a specific folder and merge data
'            into one master sheet (stacked)

Dim fName As String, fPath As String, fPathDone As String, OldDir As String
Dim LR As Long, NR As Long
Dim wbData As Workbook, wbkNew As Workbook

'Setup
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False

Set wbkNew = ThisWorkbook
wbkNew.Activate
Sheets("Master").Activate

If MsgBox("Import new data to this report?", vbYesNo) = vbNo Then Exit Sub

If MsgBox("Clear the old data first?", vbYesNo) = vbYes Then
    Cells.Clear
    NR = 1
Else
    NR = Range("A" & Rows.Count).End(xlUp).Row + 1
End If


fPath = "C:\Folder-that-Excel-workbooks-are-located-in"
On Error Resume Next
    MkDir fPathDone
On Error GoTo 0
OldDir = CurDir
ChDir fPath
fName = Dir("*.xlsx")


Do While Len(fName) > 0
    If fName <> wbkNew.Name Then

        Set wbData = Workbooks.Open(fName)



        LR = Range("C" & Rows.Count).End(xlUp).Row
        If NR = 1 Then
            Range("C5:F" & LR).EntireRow.Copy _
                wbkNew.Sheets("Master").Range("A" & NR)
        Else
            Range("C5:F" & LR).EntireRow.Copy _
                wbkNew.Sheets("Master").Range("A" & NR)
        End If

        wbData.Close False

        NR = Range("C" & Rows.Count).End(xlUp).Row + 1

        fName = Dir
    End If
Loop

ErrorExit:
ActiveSheet.Columns.AutoFit
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True
ChDir OldDir  

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    一个快速而肮脏的解决方案是将工作簿文件夹的路径放在主工作簿的某个位置。

    将其他工作簿放在可供共享 Excel 工作表的所有计算机使用的网络共享上。使用这样的 UNC 路径:

    \\ComputerName\SharedFolder\Resource
    

    然后您可以在代码中将 fPath 设置为单元格值。

    更好的方法是将路径放入与主工作簿相同的文件夹中的设置文件中,并在运行宏时读取路径:

    Dim tmpArray() As String
    Dim s As String
    Dim strPath as String
    Open ThisWorkbook.Path & "\settings.ini" For Input As #1
        Do While Not EOF(1)
            Line Input #1, s
            If VBA.Left(s, 11) = "excelfolder" Then
                tmpArray = Split(s, "=")
                strPath = tmpArray(1)
            End If
        Loop
    Close #1
    

    您的 ini 文件如下所示:

    excelfolder=\\ComputerName\SharedFolder\Resource
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 2010-11-15
      • 2018-03-22
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多