2013-06-12 46 views
0

我試圖運行一個宏,它可以在一組工作簿中使用複選框更正鏈接單元格的名稱。在文件夾中的多個工作簿上運行宏時,該效果僅適用於包含宏的工作簿

有很多(大約100)工作簿需要在一個文件中調整。

因此我通過這些文件,循環運行的重新分配,但是,它永遠只適用於我寫的宏文件:

Sub CheckBoxesControl() 

On Error Resume Next 
    Dim path As String 
    Dim file As String 
    Dim wkbk As Workbook 
    Dim i As Long 


    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    path = "C:\file\path\" 
    file = Dir(path) 

    Do While Not file = "" 
     Workbooks.Open (path & file) 
     Set wkbk = ActiveWorkbook 

    For i = 1 To 400 
     ActiveWorkbook.Sheet4.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AA" & i 
     ActiveWorkbook.Sheet21.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AB" & i 
     Activekbook.Sheet22.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AC" & i 

    Next i 

    wkbk.Save 
    wkbk.Close 
    file = Dir 
    Loop 

End Sub 

誰能告訴我如何調整它,這樣它適用於每個文件?

宏運行沒有錯誤(事實上文件中的每個文件似乎打開和關閉)。

+1

做** **所有工作簿有一個名爲* Sheet4,Sheet21張,和Sheet22 *? –

+0

是的,每個工作簿都是由一個模板構成的,所有的工作表都是相同的。 – Gideon

+0

[看到這個答案可能是有用的](http://stackoverflow.com/questions/16957334/trying-to-open-the-workbook-in-separate-instance/16959325#16959325) – 2013-06-12 08:36:01

回答

0

不要使用ActiveWorkbook,它可以混淆的問題(與使用ActiveCell /選擇) - 不喜歡這樣寫道:

Do While Not file = "" 
    Set wkbk = Workbooks.Open (path & file) 

For i = 1 To 400 
    wkbk.Sheet4.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AA" & i 
    wkbk .Sheet21.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AB" & i 
    wkbk .Sheet22.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AC" & i 

Next i 

wkbk.Save 
wkbk.Close 
file = Dir 
Loop 
+0

感謝您的建議。這還沒有解決問題,但它似乎仍然在每張表上運行,但是當我查看LinkedCells是否被重新分配時,沒有任何影響。 (如果我只是在每張表中運行這個宏,偶爾會發生這種宏觀工作,所以它的結構很好) – Gideon

+0

嘗試修改'「ChkBoxOutput!AA」&i'語句以包含工作簿名稱 - 也許它會將所有內容鏈接到「ThisWorkbook」中的「ChkBoxOutput!AA」。第一條語句如下所示:'wkbk.Sheet4.CheckBoxes(「Check Box」&i).LinkedCell =「[」&wkbk.Name&「] ChkBoxOutput!AA」&i' – MattCrum

相關問題