2017-08-21 1 views
0

Ich habe Probleme mit meinem Code. Ich muss neue Blätter erstellen und sie nach dem Namen einer Maschine benennen. Welcher ist der Bereich "B" & (12 * x - 5). Ja, der Bereich ändert sich basierend auf x, was in diesem Beispiel gleich 1 zu 33 ist und innerhalb der richtigen For Anweisung liegt. Mein Code erstellt jedoch eine große Anzahl von Blättern und nicht nur 11, in diesem Beispiel. Sheets("Tool Setup").Range("C18") = 11 in diesem Beispiel. Außerdem beabsichtige ich, diese Blätter entsprechend dem Wert im Bereich "B" & (12 * x - 5) zu benennen.VBA - Hinzufügen von Blättern basierend auf einem Wert und Namen acododingly

Dim Sheetcnt As Integer, Tabs As Integer 
Sheet = ThisWorkbook.Names(Sheets("Reporting").Range("B" & (12 * x - 5))).RefersToRange.Value 
Sheetcnt = Sheets("Tool Setup").Range("C18") 

For Tabs = 1 To Sheetcnt 
    Sheets.Add After:=Sheets(Sheets.Count) 'creates a new worksheet 
    Sheets(Sheets.Count).Name = Sheet 'renames the new worksheet 
Next Tabs 

Wenn jemand kann mir helfen Figur, wie einen Code zu erstellen, der dieses Problem gerecht wird, wäre es sehr geschätzt werden. Ich habe eine Ahnung, dass es mit der Variablen Tabs zu tun hat.

Vielen Dank im Voraus.

+4

Sie x nicht definieren, ich glaube, Sie 'Tabs' verweisen bedeuten – sourceCode

+0

Sie nicht auch die neu hinzugefügte Blatt einen Namen geben, es sei denn, Ihre Absicht, ihnen Namen geben Standard war' Sheet1', 'Sheet2' , usw. – sourceCode

+0

'Dim Sheet as Integer' ist ein schrecklich irreführender Name für eine Variable, die keinen' Worksheet' Objektreferenz enthält. 'SheetCount' vielleicht? Was ist in ''Tool Setup'! C18'? FWIW, was auch immer dort ist, wäre wahrscheinlich besser als ein benannter Bereich, z.B. 'Sheet = ThisWorkbook.Names (" SomeConfigurationValue "). RefersToRange.Value' –

Antwort

2

Basierend auf dem, was Sie zur Verfügung gestellt haben, habe ich den folgenden Code erstellt, der 11 Blätter nach einer ähnlichen Formel wie Ihre benennt. Um zu demonstrieren, dass es funktioniert, habe ich fortlaufende Nummern in die ersten 127 Zeilen von Spalte B des aktiven Blattes gelegt. Dann berechnet der Code, welche Reihe zu greifen ist, unter Verwendung der Formel Range("B" & (12 * i - 5). Diese Formel ergibt die folgende Sequenz: 7 19 31 43 55 67 79 91 103 115 127, und so werden 11 Blätter mit diesen Zahlen gemacht.

Wenn dies nicht das ist, was Sie beabsichtigt haben, können Sie diesen Arbeitscode möglicherweise als Ausgangspunkt für den Start verwenden. Oder, noch besser, bieten Sie mehr Definition für Ihre Frage.

Option Explicit 
Sub sheetNamer() 
    Dim num As Integer, i As Integer, sh As Worksheet 
    num = 11 
    Set sh = ActiveSheet 
    For i = 1 To num 
     Sheets.Add After:=Sheets(Sheets.Count) 
     Sheets(Sheets.Count).Name = sh.Range("B" & (12 * i - 5)) 
    Next i 
End Sub 
+0

Bitte achten Sie darauf, Ihren Code richtig einzurücken, wenn Sie senden :). –

+0

Es ist gut, dass Sie den Code Zeile für Zeile durchgehen. Überprüfen Sie auch die Werte der Schlüsselvariablen, indem Sie den Mauszeiger darüber bewegen, oder wenn das nicht funktioniert, fügen Sie Codezeilen wie "s = num" oder "s = sh.name", etc ... hinzu (wobei s wird als "Dim s as String" deklariert. Wenn die Anweisung "For" übersprungen wird, muss "num" 1 oder weniger sein. Wenn es das Blatt nicht benennt, dann definiere zuerst eine andere Variable "Dim shName as String" und ersetze dann den Code, der das Blatt mit diesen Zeilen benennt "shName = sh.Range (" B "& (12 * i - 5))" gefolgt von "Sheets (Sheets.Count) .Name = shName" & check den Wert von shName –

+0

@Tony Ich versuchte es und seit 'num' wird sich mit anderen Daten ändern. Ich habe versucht sh = Sheets ("Tool Setup") und "num = sh.Range (" C18 "). Value" zu setzen. Da ich vorher 'i' als Variable benutzt habe, habe ich es in' j' geändert. Allerdings werden die Blätter nicht benannt. Es überspringt diese Codezeile. Ich habe auch num Linie mit Set –

Verwandte Themen