2017-05-05 63 views
0

我想寫一個循環遍歷工作簿中的頁面的宏,並且任何包含DR工作表的名稱應該放在工作表Macro和單元格的內容中。VBA選擇特定工作表然後複製特定單元格

Sub FnGetSheetsName() 
    Dim mainworkBook As Workbook 

    Set mainworkBook = ActiveWorkbook 

    For i = 1 To mainworkBook.Sheets.Count 
     If mainworkBook.Sheets.Name.Contains("DR") Then 
      mainworkBook.Sheets("Macro").Range("A" & i) = mainworkBook.Sheets.Name 
      mainworkBook.Sheets("Macro").Range("B" & i) = mainworkBook.Sheets.Range("B17") 
     End If 
    Next i 
End Sub 

它在停止:If mainworkBook.Sheets.Name.Contains("DR")然後

謝謝您的回答! :) 蒂博爾

回答

0

你可以嘗試Like方法:

If mainworkBook.Sheets.Name Like "*DR*" Then,而不是導致問題的某行。

另一種選擇是:

If InStr(1, mainworkBook.Sheets.Name, "DR", vbTextCompare) <> 0 Then

InStr函數將返回該文本已被發現的位置或零,如果它沒有找到。

0

小心,在你的代碼,你寫這樣的:

mainworkBook.Sheets.Name.Contains ... 

或者這樣:

mainworkBook.Sheets.Range("B17") 

然而,mainworkBook.Sheets是一個變量包含所有表單。 爲了測試只是一個表的名稱,你應該寫:

mainworkBook.Sheets(Integer).Name.Contains ...

我不知道「包含」功能,所以我用InStr

For i = 1 To mainworkBook.Sheets.Count 
    If InStr(mainworkBook.Sheets(i).Name, "DR") <> 0 Then 
     mainworkBook.Sheets("Macro").Range("A" & i) = mainworkBook.Sheets(i).Name 
     mainworkBook.Sheets("Macro").Range("B" & i) = mainworkBook.Sheets(i).Range("B17") 
    End If 
Next i 
0

試試這個代碼:

Sub nnh() 
    Dim x As Integer 
    x = 0 

    For Each Sheet In Worksheets 
     If Sheet.Name Like "DB*" Then 
      x = x + 1 
      Sheets("Macro").Range("A" & x) = Sheet.Name 
      Sheets("Macro").Range("B" & x) = Sheets(Sheet.Name).Range("B17") 
     End If 
    Next Sheet 
End Sub 
+0

由於工作簿中的工作表數量是無限的([僅限於可用內存](https://support.office.com/en-us/article/Excel-sp ecifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3))你應該將'x'變暗爲'Long'而不是'Integer'。總是使用'Long'而不是'Interger' **,除非**你需要Interop與一個預期16位int的舊API調用。閱讀更多關於[Integer和Long?](http://stackoverflow.com/a/26409520/3219613)。 –

相關問題