2017-05-05 7 views
0

Ich versuche, ein Makro zu schreiben, das die Seiten innerhalb einer Arbeitsmappe durchläuft, und alles, das DR den Namen des Blattes enthält, sollte auf Blatt Macro und einen Inhalt einer Zelle abgelegt werden. VBA Auswählen bestimmter Blätter dann Copypaste spezifische Zelle

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 

Es hält an: If mainworkBook.Sheets.Name.Contains("DR") Dann

Vielen Dank für Ihre Antworten! :) Tibor

Antwort

0

könnten Sie versuchen, die Like Methode:

If mainworkBook.Sheets.Name Like "*DR*" Then statt die Zeile, die Probleme verursacht.

wäre eine weitere Option:

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

InStr die Position zurück, dass der Text gefunden oder Null ist, wenn sie nicht gefunden wird.

0

Pass auf, in Ihrem Code, du bist das Schreiben:

mainworkBook.Sheets.Name.Contains ... 

Oder diese:

mainworkBook.Sheets.Range("B17") 

Dennoch ist mainworkBook.Sheets eine Variable Das enthält alle Ihre Blätter. Um den Namen nur ein Blatt zu testen, sollten Sie schreiben:

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

Ich wusste nicht, über die „Enthält“ -Funktion, so habe ich 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

versuchen, diese code:

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

Da die Anzahl der Blätter innerhalb einer Arbeitsmappe unbegrenzt ist ([nur durch verfügbaren Speicher begrenzt] (https://support.office.com/en-us/article/Excel-sp ecifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3)) sollten Sie 'x' als' Long' anstelle von 'Integer' verdunkeln. Verwenden Sie immer 'Long' anstelle von' Interger' **, es sei denn ** Sie müssen mit einem alten API-Aufruf interoperieren, der einen 16-Bit-Int erwartet. Lesen Sie mehr über [Integer and Long?] (Http://stackoverflow.com/a/26409520/3219613). –

Verwandte Themen