2013-05-13 41 views
-1

我有3個文件複雜如果VBA的pro's

什麼,我需要做的(這必須與VBA做擅長因爲it's一個更大的宏的一部分)是看A列中文檔A和文檔B中匹配的每個實例列AI如果需要檢查兩個文檔的列B中的值是否爲「rf」,則需要檢查工作簿A的列C中的值是否爲>列C.

如果這一切都是真的,我想將工作簿A列A的值發佈到同一單元格地址中的工作簿C列C中。

我有下面的代碼,但它是在第一交叉循環,上面寫着「法‘相交’對象返回錯誤信息「_global失敗。任何想法,爲什麼發生這種情況?

Public Sub RFErrorProof() 

Dim input1 As String 
Dim input2 As String 
Dim rCell As Range 
Dim rFound As Range 
Dim rNext As Range 

Input3 = "ReportCompare.xls" 
input1 = Workbooks(Input3).Worksheets("Sheet4").Range("A4").Value 
input2 = Workbooks(Input3).Worksheets("Sheet4").Range("A3").Value 

'Loop through column A in doc A 
    For Each rCell In Intersect(Workbooks(input2).Worksheets("LocalesMallContratos").UsedRange.Columns(2), Workbooks(input1).Worksheets("LocalesMallContratos").UsedRange.Columns(2)).Cells 
    'Skip cells where column B is not RF 
    If rCell.Offset(0, 3).Value = "RF" Then 

     'See if that exists in doc B 
     Set rFound = Nothing 
     Set rFound = Workbooks(input1).Columns(2).Find(rCell.Value, , xlValues, xlWhole) 

     'If it's in doc B 
     If Not rFound Is Nothing Then 

      'If column B doc B is RF and doc A is greater than doc B, then write it 
      If rFound.Offset(0, 3).Value = "RF" Then 
       If rCell.Offset(0, 14).Value > rFound.Offset(0, 14).Value Then 
        Set rNext = Workbooks(Input3).Cells(Workbooks(Input3).Sheets("sheet1").Rows.Count, 1).End(xlUp).Offset(1, 0) 
        rNext.Value = rCell.Value 
       End If 
      Else 
       'If column B doc B is not RF, write it 
       Set rNext = Workbooks(Input3).Cells(Workbooks(Input3).Sheets("sheet1").Rows.Count, 1).End(xlUp).Offset(1, 0) 
       rNext.Value = rCell.Value 
      End If 
     End If 
    End If 
Next rCell 


End Sub 
+1

如果你要downvote我請解釋爲什麼這樣我就可以改變什麼,我做錯了 – 2013-05-13 12:08:37

+1

我懷疑那是因爲你沒有做你自己的任何工作。爲人寫代碼不是在這裏完成,而是幫助他們。特別是當你的問題似乎已經以類似的方式完成之後,他會有足夠的空間。 – glh 2013-05-13 12:50:56

+0

@glh謝謝你,這是有道理的...我省略了我的代碼,因爲它給了我錯誤,但我會盡快發佈(我現在正在工作,所以可能需要一些時間) – 2013-05-13 13:02:06

回答

0

我99%肯定這可以通過一種巨大的方式來簡化,但我只是完全按照你的邏輯進行了處理,並提出了這個公式(我沒有必要爲此使用VBA)

只需將此公式複製到工作表C中,單元格A1並將其複製/粘貼:

=IF(A!A1=B!A1,IF(A!B1="RF",IF(B!B1<>"RF",A!A1,IF(A!C1>B!C1,A!A1,"")),""),"") 

希望這個竅門!

+0

@Dick Kusleika我剛剛編輯我的初始文章與您的代碼的派生版本和錯誤,我一直在......任何想法如何解決它?謝謝 – 2013-05-14 12:38:43

+0

您在我的文章上發表了您的評論 - @Dick不會看到它... – 2013-05-14 13:02:33

0

總是在您的數據副本上測試代碼。首先進行備份。

Public Sub MakeDocuC() 

    Dim rCell As Range 
    Dim rFound As Range 
    Dim rNext As Range 

    'Loop through column A in doc A 
    For Each rCell In Intersect(docuA.UsedRange, docuA.Columns(1)).Cells 
     'Skip cells where column B is not RF 
     If rCell.Offset(0, 1).Value = "RF" Then 

      'See if that exists in doc B 
      Set rFound = Nothing 
      Set rFound = docuB.Columns(1).Find(rCell.Value, , xlValues, xlWhole) 

      'If it's in doc B 
      If Not rFound Is Nothing Then 

       'If column B doc B is RF and doc A is greater than doc B, then write it 
       If rFound.Offset(0, 1).Value = "RF" Then 
        If rCell.Offset(0, 2).Value > rFound.Offset(0, 2).Value Then 
         Set rNext = docuC.Cells(docuC.Rows.Count, 1).End(xlUp).Offset(1, 0) 
         rNext.Value = rCell.Value 
        End If 
       Else 
        'If column B doc B is not RF, write it 
        Set rNext = docuC.Cells(docuC.Rows.Count, 1).End(xlUp).Offset(1, 0) 
        rNext.Value = rCell.Value 
       End If 
      End If 
     End If 
    Next rCell 

End Sub 
+0

我剛剛編輯了我的原始文章,並附上了代碼的修改版本,但我收到了上面詳述的錯誤...任何想法? – 2013-05-14 17:42:20

+0

@ ja72我輸入你所做的代碼編輯,並得到object'_global'failed'消息關於每個rcell循環(在input2 =之後的一個循環)的方法'intersect'...任何想法該怎麼做? – 2013-05-15 17:16:45

+0

您不能拍攝不在不同紙張上的相交範圍。您可以在交集中使用工作簿(input2)和工作簿(input1),但這些工作簿必須位於不同工作簿的不同工作表上。我的相交與A列交叉使用範圍 - 列A是1百萬個單元格,所以我將它限制爲您使用的許多行 - 都使用docuA。 – 2013-05-20 20:52:14