2016-08-09 5 views
0

In Excel habe ich eine Spalte wie folgt, als Teil einer Arbeitsmappe Vorlage:Zugriff auf dynamische benannte Bereiche in VBA

Date  Asset Return 
1/3/2005 0.003582399 
1/4/2005 -0.01908258 
1/5/2005 0.002080625 
1/6/2005 0.005699497 
1/7/2005 -0.008040505 
1/10/2005 -0.00339116 
1/11/2005 -0.009715187 
1/12/2005 0.002371855 
1/13/2005 -0.00580783 
1/14/2005 0.001058481 
1/18/2005 0.015483842 
1/19/2005 -0.014690715 
1/20/2005 -0.015714799 
1/21/2005 -0.010796326 

ich Excel als Benutzeroberfläche bin mit. Ein Benutzer wird Daten in Excel eingeben, und dann wird es von einem anderen Programm (Matlab) eingelesen, das Berechnungen durchführt.

Um dies zu tun, verwende ich einen VBA-Befehl es in Matlab zu senden und direkt auf den Bereich beziehen oder durch den Bereich der Benennung:

MLPutMatrix "VARIABLE_NAME", Range("B8:B2954") 

oder

MLPutMatrix "VARIABLE_NAME", Range("NamedRange") 

Mein Problem ist, dass ich Ich weiß nicht, wie groß der Bereich im Voraus sein wird, da die Anzahl der Zeilen unterschiedlich ist, je nachdem, welche Daten der Benutzer in den Excel-Bereich eingibt.

Ich habe versucht, einen benannten Bereich zu schaffen, die unter Verwendung dieser Formel auf die letzte nicht leere Zeile bezieht:

Sheet1!$B$8:INDEX(Sheet1!$B:$B,COUNTA(Sheet1!$B:$B)+8) 

jedoch offensichtlich benannte Bereiche, die definiert sind, mit einer Formel nicht auftauchen im Namen Box und kann nicht in VBA-Skripten verwendet werden, so dass dies nicht funktioniert. Ich muss manuell einen Namen erstellen, damit er im Namensfeld angezeigt wird und mit VBA darauf zugreifen kann, aber natürlich kann ich das nicht, wenn ich meine Bereichsabmessungen nicht im Voraus kenne.

Also mein Problem ist: Ich muss einen Weg finden, in der Lage zu sein, auf einen Dynamikbereich entweder nach Name oder nach seiner Größe zu verweisen, und dann in VBA zu verweisen, damit ich es an Matlab senden kann Verwenden Sie den Befehl "MLPutMatrix".

+1

hallo, Sie haben kein Problem mit Hilfe von Tabellen in Excel? das gibt Ihnen automatisch einen benannten dynamischen Bereich. pls sehen Sie dieses Video: https://www.youtube.com/watch?v=uLJEMnIT0zM es erklärt, wie man einen dynamischen Bereichsnamen benutzt. ich hoffe es hilft! – Hadi

Antwort

1
With Worksheets("mydata") '<--| change "mydata" with your actual sheet name 
    MLPutMatrix "VARIABLE_NAME", .Range("B2", .Cells(.Rows.Count, "B").End(xlUp)) '<--| change "B2" to your actual first cell and "B" to your actual column data index 
End With 
+0

Vielen Dank, das hat perfekt funktioniert. – beeba

+0

sind Sie willkommen – user3598756

1

Es ist nicht wahr, dass Formel definierte benannte Bereiche können nicht in VBA verwendet werden. Wenn Sie dabei ein Problem haben, könnte es ein Problem mit Ihrer Formel geben.

Ein typischer Weg, um den Bereich zu verweisen wäre so etwas wie:

=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),2) 
Verwandte Themen