2017-06-19 14 views
0

Ich versuche, ein Makro zu schreiben, das eine String-Variable als Eingabe verwendet, wobei die String-Variable auf einen benannten Bereich verweist.Referenzieren benannter Bereiche in Bereichsfunktion (Excel - VBA)

Zeit, was ich habe ist:

Sub SubItems() 

Dim M As String 
    M = "=R[-1]C" 
    'where M refers to row above, currently it is Manufacturers 

Dim g As Range 

Set g = Range(" & M & ") 

ActiveCell.Value = g(2) 
'For Example 

End Sub 

Das Problem mit dem Set g = Range ("& M &") Syntax

ich das Eingabeargument für die Range-Funktion sein will, was M ist, und nicht der buchstäbliche Buchstabe M. Ähnlich wie in C würden Sie printf ('% s', M) zum Beispiel tun.

Edit:

Derzeit, wie ich das Excel-Sheet-Setup haben, ist, dass Sie eine Hauptsache aus einem Dropdown-Menü auswählen. Dann möchte ich die Zelle unterhalb des Hauptelements auswählen und die Zeilen automatisch mit Unterelementen füllen. Die Unterelemente werden in einem benannten Bereich gespeichert, der nach dem Hauptelement benannt ist.

Daher möchte ich mein Makro automatisch die Zeile darüber lesen (Main Item) daher habe ich M = "= R [-1] C". Dann möchte ich das in die Bereichsfunktion eingeben und das ist das Problem, mit dem ich derzeit konfrontiert bin.

Ich hoffe, dies klärt mein Problem klarer.

+1

Meinst du nur 'Set g = Range (M)'? Oder 'Setzen Sie g = Range (" "& M" "" ")"? – BruceWayne

+0

@ SherifR Ihre Erklärung hilft nicht, was möchten Sie tun? Sie haben 2 Strings, einer ist der Name des benannten Bereichs und einer ist der Wert davon? – Ibo

+0

Was machst du eigentlich hier? Denn auf den ersten Blick sieht es so aus, als würden Sie versuchen, ein einfaches Problem schwerer zu machen, als es sein müsste. Werfen Sie einen Blick darauf: https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – SandPiper

Antwort

0

String Literale sind in doppelte Anführungszeichen eingeschlossen ist, so dass Sie im Wesentlichen einen benannten Bereich namens & M & verweist.

Wenn Sie eine Zeichenfolge Variable verwenden, denken Sie daran, dass ihr Wert auch in Anführungszeichen eingeschlossen ist. So sollte es nur Range(M) oder Range("=R[-1]C") sein, die beiden sind gleich.

Hinweis: = R [-1] C ist ein sehr seltsamer Name, bist du sicher, dass du das meintest? Stellen Sie sicher, dass Sie den Unterschied zwischen einem benannten Bereich und dem Bereich verstehen (er sieht wie eine Formel aus)! Vielleicht eine Beschreibung von was = R [-1] C ist und ich kann dir mehr helfen?

+0

suchst Wählen Sie einen Hauptartikel aus einem Dropdown-Menü. Dann möchte ich die Zelle unterhalb des Hauptelements auswählen und die Zeilen automatisch mit Unterelementen füllen. Die Unterelemente werden in einem benannten Bereich gespeichert, der nach dem Hauptelement benannt ist. Daher möchte ich mein Makro automatisch die Zeile darüber lesen (Main Item) daher habe ich M = "= R [-1] C". Dann möchte ich das in die Bereichsfunktion eingeben und das ist das Problem, mit dem ich derzeit konfrontiert bin. Ich hoffe, das hilft. –

0

Das Problem ist, dass Ihre Variable M eine relative Referenz beschreibt, und ich glaube nicht, dass Sie eine relative Referenz auf ein Range-Objekt in der Weise anwenden können, die Sie beschreiben. Vielleicht möchten Sie Ihr Problem aus einem anderen Blickwinkel angreifen? Zum Beispiel:

Sie könnten Ihre Methode verwenden, sondern eine absolute Referenz, z.

M = "A5" 
Debug.Print Range(M).Value 

Oder alternativ können Sie eine relative Referenz unter Verwendung von Code angeben, wie:

debug.print activecell.Offset(-1,0).Value 
+0

Das könnte das Problem sein. Vielen Dank! Ich werde einfach einen Select Case einrichten, um mit den verschiedenen Hauptelementen umzugehen, anstatt relative Referenzen zu verwenden. –

0

Was ich bisher verstanden haben - Sie einen benannten Bereich haben, genannt M und Sie wollen es ein zuweisen VBA-Bereich. Wenn dies der Fall ist, ist dies der Code, um es zu erreichen:

Sub TestMe() 

    Dim g As Range 
    Set g = ActiveSheet.[M] 
    Debug.Print g.Address 

End Sub 
Verwandte Themen