2017-01-25 39 views
2

不能顯示爲什麼我的代碼不顯示輸出。新的VBA程序員只知道基礎知識,所以任何幫助都會有所幫助。如果和DoUntil VBA代碼不會顯示輸出

我想要的是讓Excel開始檢查特定文本1的特定列,然後開始複製並粘貼這些值直到達到text2。之後,我希望它以相同的方式檢查下一個第五列。 如果你可以建議修改我的代碼。 沒有在列中放置for循環,我的代碼看起來像這樣。

Private Sub CommandButton7_Click() 
    Dim x As Long, y As Long 
    Dim a As Long 

    y = 1 'starts with the first column 
    x = 1 'first row 
    a = 70 'this is the row where i want the data to be posted 

    If Cells(x, y).Value = "text1" Then 'check first for specific text 
     Do Until Cells(x, y).Value = "text2" 'stop here 
      Cells(a, y).Value = Cells(x, y).Value 'copy that data to new row 
      Cells(a, y + 1).Value = Cells(x, y + 1).Value 'and the column adjacent to it 
      x = x + 1 
      a = a + 1 
     Loop 
    Else 
     x = x + 1 'if not on that row then check the next row  
    End If 
End Sub 
+2

如果第一行有「text1」,則您的代碼可以正常工作。如果沒有,它只會將1加到'x'上,而不會做其他事情。您可以添加一個循環來再次檢查'如果Cells(x,y).Value =「text1」'或添加'GoTo'語句。如果你想檢查你的代碼是如何工作的,你可以按F8。它將逐行運行您的代碼,結果將立即在工作表中看到。 –

+0

THANKYOU如此!添加後,我的其他和它的工作! @EganWolf –

回答

1

真的很難看到這裏出了什麼問題,因爲你的代碼應該做你想做的。

唯一可能導致結果的其他事情是當你有不同的case時,因爲VBA會將帶有大寫字母的字符串視爲不同的字符,所以根本不會進入循環。我假設text1只是這個問題的一個示例字符串。

因此,比較小寫字符串將確保如果您有任何大寫字符,他們將被正確比較,使用LCase函數應該有所幫助。

的完整代碼,

Private Sub CommandButton7_Click() 

Dim x As Long, y As Long 
Dim a As Long 

    y = 1 'starts with the first column 

    x = 1 'first row 
    a = 70 'this is the row where i want the data to be posted 
      If LCase(Cells(x, y).Value) = LCase("text1") Then 'check first for specific text 
      Do Until LCase(Cells(x, y).Value) = LCase("text2") 'stop here 
       Cells(a, y).Value = Cells(x, y).Value 'copy that data to new row 
       Cells(a, y + 1).Value = Cells(x, y + 1).Value 'and the column adjacent to it 
       x = x + 1 
       a = a + 1 
      Loop 
      Else: x = x + 1 'if not on that row then check the next row 

     End If 
End Sub 
+0

謝謝,但伊根是對的。在檢查第一個之後,它會停止。在我的else之後添加了一個GoTo,它完美地工作 –

0

一種很難看到大的圖片,但我想我產生你想要的結果:

Sub FindText() 


Dim textFound As Range 
Dim x As Long, y As Long 
Dim a As Long 
y = 1 'starts with the first column 

x = 0 'first row 
a = 70 'this is the row where i want the data to be posted 

Set textFound = ActiveSheet.Columns(y).Cells.Find("Text1") 

Do Until textFound.Offset(x, 0).Value = "Text2" 

    Cells(a + x, y).Value = textFound.Offset(x, 0).Value 
    Cells(a + x, y + 1).Value = textFound.Offset(x, 1).Value 
    x = x + 1 
Loop 


End Sub 

此代碼是遠遠不夠完善,但應該工作在大多數情況。

相關問題