2015-07-08 2 views
5

auszuwählen Ich brauche einfach einen Code zum Auswählen einer Zelle, aber diese Zelle, um Änderungen auszuwählen. Ich habe eine Zelle in der Arbeitsmappe, die identifiziert, welche Zelle es sein sollte. Zelle A1 enthält die Zelle #, die ausgewählt werden sollte.Wie indirekten Verweis zu verwenden, um eine einzelne Zelle oder einen Bereich in VBA

In diesem Beispiel enthält Zelle A1 das Wort "P25", daher möchte ich, dass der folgende Code A1 für die indirekte Zelle ref auf P25 referenziert, wählen Sie daher die Zelle P25 aus.

Ich habe versucht, beide separat Linien:

Sub IndirectCellSelect() 

    Sheet.Range(INDIRECT(A1)).Select 
    Range(INDIRECT(A1)).Select 

End Sub 

ich den Fehler Sub oder Funktion erhalten ist nicht definiert, wenn es um das Wort INDIREKTE

bekommt

Antwort

2

Eine leichte Veränderung für den entsandten Code funktioniert:

Range([indirect("a1")]).Select 

aber ich würde Ihnen raten, entweder von diesen zu versuchen, statt:

Sheet.Range(Sheet.Range("A1").Value).Select 
Range(Range("A1")).Select 

die erste ist expliziter und wird im Produktionscode empfohlen.

+0

Danke! Der erste und der dritte haben funktioniert! Ich werde mit der dritten gehen, da Sie sie stattdessen beraten. – Bryan

+0

Die zweite Formel muss an das von Ihnen verwendete Blatt angepasst werden. Dies wäre 'Sheet1' für das erste Blatt einer neuen Arbeitsmappe. Dies wird in der Praxis oft empfohlen, da dann der Code immer gleich funktioniert und nicht davon abhängt, welches Blatt gerade aktiv ist. –

0

Sie diese eine andere Art und Weise tun, aber wenn Sie eine native Excel-Tabellenfunktion in Ihrem VBA-Code verwenden möchten, müssen Sie dies wie dies tun (beachten Sie, dass ich auch eingestellt, wie Sie A1 Referenz):

Application.WorksheetFunction.Indirect(Sheets(1).Range("A1")) 

Edit Entschuldigung - ich hatte dies nicht testen. Es scheint, dass die indirekte Funktion in diesem Kontext nicht verfügbar ist. Stattdessen versuchen, etwas wie folgt aus:

Dim rng as Range 
Set rng = sheets(1).Range("A1") 

sheets(1).Range(rng.text).Select 
+0

Leider ist mir nicht vertraut, wie man eine Funktion richtig verwendet. Ich habe ein paar Versuche ausprobiert und nur die Unterschiede zwischen der Verwendung einer Funktion gelesen, konnte sie aber nicht implementieren. Ich bekomme nur Fehler "Objekt unterstützt diese Eigenschaft oder Methode nicht" Ist Sheets (1) auch wichtig, wenn der Blattname anders ist oder ist das einfach 1 = aktiv? – Bryan

+1

Siehe meine Änderungen - dies funktioniert für die meisten Funktionen, aber es scheint, dass "Indirekt" auf diese Weise nicht unterstützt wird. macht Sinn, denn das ist IMO sowieso verwirrender. –

+0

Ahh groß, ja, das scheint sicherer zu sein, da ich in der Vergangenheit auf dieses Problem gestoßen bin. Hast du eine Chance, dass du etwas über diesen Beitrag weißt? Niemand hat geantwortet und es war seit 1 Monat auf ... http://stackoverflow.com/questions/30764616/downloaded-new-versions-of-files-need-to-pened-and-saved-to- work-automatic-r – Bryan

0
Worksheets("list").Sort.SortFields.Add Key:=Range(INDIRECT("I16" & "3" & ":" & "I16" & "5002")) _ 
     , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With Worksheets("list").Sort 
     .SetRange Range("B2:K5002") 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
+1

Willkommen bei Stack Overflow! Sie können Ihre Antwort klären, indem Sie eine ausführlichere Erklärung zusammen mit dem Codebeispiel hinzufügen. – jkdev