2017-10-05 96 views
0

我是初學者。我一直試圖教自己的VBA和研究這個問題兩個星期,包括在這個論壇上回顧所有相關的答案。我放棄!Excel表VBA:嘗試根據列值選擇行

我想循環遍歷一個表的行,根據行的單元格之一(命名一個特定的列)的內容來選擇一個表格行。我想使用表列的名稱。但是我的「If ... Then」聲明有些問題。每次嘗試都會遇到錯誤。現在我收到一個編譯錯誤「Expected Then or Go To」,值突出顯示前的時間段。但我有一種感覺,如果我修正了這個錯誤,那麼會有另一個錯誤。除了試圖自己學習這些之外,我還犯了什麼錯誤? ;>)

在此先感謝!

Sub CommandButton1_Click() 
    Dim tbl As ListObject 
    Dim x As Long 
    Set tbl = ActiveSheet.ListObjects("Table1") 
     For x = 1 To tbl.Range.Rows.Count 
      If (Range("Table1[Status]")).Value = "Completed" 
       'I can't seem to find the right statement to put between If and .Value! 
       Rows(x).Select 
      End If 
    Next x 
End Sub 
+1

更改'If(Range(「Table1 [Status]」))。Value =「Completed」'to If(Range(「Table1 [Status]」))。Value =「Completed」then'。這將解決這個問題,下一個概念就是在識別行之後你想要做的事情。當前.select將被下一個替代.select – Zerk

回答

0

變化If (Range("Table1[Status]")).Value = "Completed"變爲If (Range("Table1[Status]").Value) = "Completed" Then。您的.Value只需放在括號內。我也強烈建議查看用於VBA的Rubberduck加載項。它有一個自動壓頭,所以你的代碼總是按順序排列。

Sub CommandButton1_Click() 
    Dim tbl As ListObject 
    Dim x As Long 
    Dim myRange As Range 

    Set tbl = ActiveSheet.ListObjects("Table1") 
    For x = 1 To tbl.Range.Rows.Count 
     If tbl.DataBodyRange(x, Range("Table1[Status]").Column) = "Completed" Then 
      If myRange Is Nothing Then 
       Set myRange = tbl.ListRows(x).Range 
      Else 
       Set myRange = Union(myRange, tbl.ListRows(x).Range) 
      End If 
     End If 
    Next x 
    myRange.Select 
End Sub 
+0

感謝Berticus,但現在我得到錯誤13,類型不匹配...突出顯示If Then語句。有什麼建議麼? –

+0

@ B.Willdered我的壞。這就是我沒有測試代碼的原因。看看我的編輯,讓我知道,如果這對你有用。 – BerticusMaximus

+0

你好Berticus,我很抱歉讓你煩惱。我非常感謝你的幫助。首先,好的部分:這個實際上運行並選擇一些東西!你比我在兩週內得到了更多!但是,1)它只選擇一行2)它不選擇一個值爲「Completed」的行,3)它選擇整個工作表的行,而不是表格中的行。有什麼機會可以幫忙? –