2016-06-03 8 views
0
Sub updateCells() 

‚Blätter durchlaufen in der aktuellen Auswahl mehrerer Zellen in einer Spalte in einer Liste gespeichert, um die Blattnamen zu aktualisieren, indemAktivierung eines Blattes, dessen Name Ergebnis einer variablen

Set sheetList = Selection 

For i = 1 To sheetList.Count 
Workbooks("myfile.xlsm").Sheets(sheetlist(i)).Activate 
'[perform some update operations] 
Next i 

End Sub 

‘ dies gibt Ein Fehler in der .activate-Zeile, der etwas mit der Sheetlist zu tun hat (i) wird nicht erkannt, da ich den Sheet-Code (i) auf den tatsächlichen Namen eines Sheets "mySheet" ändere. Was mache ich falsch? Irgendwelche Vorschläge geschätzt.

+1

'i' steht für einen Zähler, wie in 1-3 (Blätter von links nach rechts 1-3) Versuchen Sie,' sheetlist (i) .Name' anstelle von 'sheetlist (i)' zu verwenden, vorausgesetzt, dass Sie Die Verwendung von "der tatsächliche Name eines Arbeitsblatts", "funktioniert" wie erwartet und nicht in der Lage, den Rest Ihres Codes zu sehen. – gravity

+0

Gibt 'Debug.Print TypeName (sheetList (i)) '' String' zurück? –

+0

wie Try this ~ Sub Test() Für i = 1 bis ActiveWorkbook.Sheets.Count Debug.Print Sheets.Count ‚ Next [einige Update-Operationen durchführen] i End Sub ~ – skkakkar

Antwort

0

Hier, sheetlist ist ein Bereich, sheetlist(i) wird eine Zelle dieses Bereichs geben.

  • .Text
  • .Wert
  • .Value2

So Ihr Code: Um den Wert der Zelle erhalten werden Sie eine der folgenden Aktionen verwenden müssen Änderungen an:

Sub updateCells() 
    'iterate through sheets to update using the sheet names stored in a list in the current selection of several cells in a column 

    Set sheetlist = Selection 

    For i = 1 To sheetlist.Count 
     Workbooks("myfile.xlsm").Sheets(sheetlist(i).Value).Activate 
     '[perform some update operations] 
    Next i 

End Sub 

Ich verwende Value Eigenschaft der Zelle in dem obigen Code.

Sie können sich auch Sub schreiben wie:

Sub updateCells() 
    Set sheetlist = Selection 

    For Each cell In sheetlist 
     ThisWorkbook.Sheets(cell.Value).Activate 
     '[perform some update operations] 
    Next 
End Sub 
0

Selection gibt ein Range Objekt.

Der richtige Weg, um einzelne Teile davon zu referenzieren mithilfe der Range.Item Eigenschaft wäre, etwa so:

Workbooks("myfile.xlsm").Sheets(sheetlist.Item(i).Value).Activate 
+0

Vielen Dank so zu alle, die einen Vorschlag gemacht haben. Ich bin dankbar für den Rat. Es stellt sich heraus, dass eine andere Lösung darin besteht, meinen Code nur geringfügig zu ändern, um die Rückgabe eines Strings mit cstr() wie folgt zu erzwingen: Arbeitsmappen ("mybook.xlsm"). Sheets (CStr (sheetList (i))). Wie immer, viele Möglichkeiten, die Katze in VBA zu häuten. – RMF

0

Ihnen so sehr für alle danken, die einen Vorschlag zur Verfügung gestellt. Ich bin dankbar für den Rat. Es stellt sich heraus eine andere Lösung ist mein Code zu ändern, nur leicht die Rückgabe eines Strings mit cstr zu erzwingen() wie folgt:

Workbooks("mybook.xlsm").Sheets(CStr(sheetList(i))).Activate 

Wie immer viele Möglichkeiten, um die Katze in VBA häuten.

Verwandte Themen