2017-08-01 33 views
0

首先感謝大家,您一直以來都非常支持使用我非常幼稚的VBA代碼來塑造我。隨着我的進步,我遇到了新的問題。使用VBA查找內容:=在表格中檢索值

我的挑戰是我正在使用此代碼在所有打開的工作簿中查找值。如果找到了,剩下的代碼就會執行。我希望我的最終用戶能夠輕易改變所發現的價值,而不必深入代碼。所以,我添加了一張名爲Data SpecsThisWorkbook。我希望當我的代碼開始發現某些東西時,它應該查找單元格A2中此表中的值。

Sheets("Add File Here").Select 
If IsEmpty(Range("A1")) Then 
    Worksheets("Master Mapper").Activate 

    Dim answer003 As Integer 
    answer003 = MsgBox("Please check the Data Sheet. No value found in first row! Do you wish to find Cvent003 file in open workbooks and start process?", vbYesNo + vbQuestion, "Review & Proceed") 
    If answer003 = vbYes Then 
'Starts here 
     Dim wSheet As Worksheet 
     Dim wBook As Workbook 
     Dim rFound As Range 
     Dim bFound As Boolean 
     Dim lngLastRow2 As Long 
     Dim Cvent003Val As Long 
     Cvent003Val = ThisWorkbook.Sheets("Data Specs").Cells("A2").Value 
     On Error Resume Next 
     For Each wBook In Application.Workbooks 
      For Each wSheet In wBook.Worksheets 
       Set rFound = Nothing 
       Set rFound = wSheet.Range("D1:D2").Find(What:=Cvent003Val, SearchFormat:=True, After:=wSheet.Range("D1"), _ 
       LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _ 
       SearchDirection:=xlPrevious, MatchCase:=True) 

'rFound.Cells.Select 
       If Not rFound Is Nothing Then 
        bFound = True 
        Application.Goto rFound, True 
'Rows(1, 2).EntireRow.Hidden = True 
        lngLastRow2 = Cells(Cells.Rows.Count, "B").End(xlUp).Row 
        Range("A1:G" & lngLastRow2).Copy 
        ThisWorkbook.Worksheets("Add File Here").Activate 
        Range("A1").Select 
        ActiveSheet.Paste 
        Application.CutCopyMode = False 
        Exit For 
       End If 

       Next wSheet 
       If bFound = True Then Exit For 
       Next wBook 

       If rFound Is Nothing Then 
        MsgBox "No open file for Cvent003 Meetings Found. Make sure the most recent Cvent003 Excel WB is open!", vbCritical + vbOKOnly 
        Exit Sub 
       End If 
+7

你的問題是什麼?我在你的問題中看不到問題。 –

+0

'Set rFound = wSheet.Range(「D1:D2」)。Find(What:= ThisWorkbook.Sheets(「Data Specs」)。Range(「A2」),SearchFormat:= True,After:= wSheet.Range 「D1」),_ LookIn:= xlValues,LookAt:= xlPart,SearchOrder:= xlByRows,_ SearchDirection:= xlPrevious,MatchCase:= True)' 這是我正在使用的代碼,在單元格中查找查找值。現在,我希望以類似的方式更改'After'!對不起,我想我不是很清楚,但我希望你們都像我一樣幫助我。 @EganWolf –

+0

任何幫助將不勝感激!謝謝 –

回答

0

這應該爲你工作:

After:=wSheet.Range(ThisWorkbook.Sheets("Data Specs").Range("B2").Value) 

你需要一個Range對象傳遞給After參數。這就是爲什麼來自單元格B2的值必須用作Range方法的參數。

編輯:

嘗試設置此範圍內的變量,然後用它在After

Set afterRange = wSheet.Range(ThisWorkbook.Sheets("Data Specs").Range("B2").Value) 

而且在Find方法:

After:=afterRange 

你甚至可以嘗試分配var = ThisWorkbook.Sheets("Data Specs").Range("B2").Value到一個變量和使用它在Set afterRange = wSheet.Range(var)

編輯2:

我剛剛爲您完成了兩個工作簿,一個用於代碼和一個搜索值。一切都爲我工作得很好。我用這個代碼:

Sub test() 
Set wsheet = Workbooks("test2").Sheets("Sheet1") 
Set rfound = wsheet.Range("D1:D2").Find(What:=ThisWorkbook.Sheets("Data Specs").Range("A2"), SearchFormat:=True, _ 
       After:=wsheet.Range(ThisWorkbook.Sheets("Data Specs").Range("B2")), _ 
       LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _ 
       SearchDirection:=xlPrevious, MatchCase:=True) 

rfound.Select 
End Sub 

而這裏的結果:result

代碼從master.xslm運行和數據功能處於主簿。搜索值位於Sheet1的test2中。您可以在即時窗口中看到該值已正確找到。

+0

謝謝你回到我身邊。我試過這個,但是它跳到了'MsgBox' - 沒有找到;不知怎的,不考慮單元格中定義的「範圍」。 :( @EganWolf –

+0

我檢查了它,它爲我工作,所以可以這樣做。也許我搞砸了一些表名?它是否工作,如果你使用'wSheet.Range(「D2 「)?? –

+0

您也可以在調試時在立即窗口中鍵入'?ThisWorkbook.Sheets(」Data Specs「)。Range(」B2「)。Value',以檢查值是否被正確識別 –