通过变量引用VBA宏workbook.open或workbook.activate

时间:2014-10-16 22:49:58

标签: excel vba excel-vba excel-formula

如何引用我的主要工作簿以及通过此子过程打开的第二个工作簿?我尝试执行workbooks.("client_path").activate,因为我的目标是使用此宏打开一个单独的工作簿,该工作簿分配给变量client_path并协调A列中的每个(1到200)值:A包含所有值我的主要工作簿的K列K:K如果在client_path工作簿上找到了值(再次列A:A),但在我的主工作簿上没有(再次列为K:K) - 我想将唯一值添加到M列M:M主要工作手册。相反的逻辑,我希望在我的主要工作簿上找到但在我的client_path工作簿上找不到的任何值出现在我的主要工作簿的N:N列中。

我正在开发此代码的主要工作簿的名称是title" Client DIRTY watchlist"工作簿client_path的内容每天更新,随着时间的推移无用。

我是否需要创建一个函数来完成此变量工作簿引用?

Sub Client_Dirty_Recon()

Dim Client_path As String
Dim Client_watchlist As Workbook
Dim Client_client_email As Workbook
Set Client_watchlist = ActiveWorkbook
Dim email_range As Range
Dim watchlist_range As Range

Application.ScreenUpdatClient = False  
Client_path = Range("Path")
Workbooks.Open Client_path
Dim recon_list As Range

'For Each n In recon_list:
Dim i As Variant
    For i = 1 To 200

        Set email_range = ActiveWorkbook.ActiveSheet.Range("A" & i)
        Dim b As Variant

            For Each b In email_range

                Set watchlist_range = Sheets("Client DIRTY watchlist").Range("B:B")


                'if b
            Next b

    Next i

End Sub

2 个答案:

答案 0 :(得分:7)

您能早点参考您的工作簿吗?

Dim wb as workbook
Dim wbDirty as workbook

set wb = thisWorkbook
set wbDirty = workbooks.open Client_Path

然后,当您定义范围时,Excel会知道它们属于哪个工作簿。

Dim rngReconcile as range
Dim rngWatch as range

set rngReconcile = wb.Sheets(1).Range("K:K")
set rngWatch = wbDirty.Sheets("Client DIRTY watchlist").Range("B:B")

然后继续循环代码

答案 1 :(得分:2)

dim Wb as workbook

set wb= Workbooks.Open (Client_path).activate

打开,并在一行中激活它,设置一个变量供以后使用(wb)。

请注意,稍后再引用wb将不会再次打开它,而不是再次激活它,它只是引用wb! (除非你告诉他)