VBA низ към формула

Здравейте, създадох бърза функция, която оценява низ

Function Evalue(ByVal str As String)
Application.Volatile
Evalue = Evaluate([str])
End Function

Имам масив с всички формули, които използвам като низ. В зависимост от случая използвам INDEX/MATCH, за да избера добрата формула, след това Evalue, за да я оценя.

Ако формулата на низа е в 1 блок като SUM(A1:A20), тя работи перфектно, но ако е в няколко блока като

SUM(A1:A20)-SUM(B1:B20) връща грешка #NAME, ако поставя низа в масива между ' ' или " ", връща грешка #VALUE.


person user2118020    schedule 02.12.2013    source източник
comment
Какво ще кажете за (SUM(A1:A20)-SUM(B1:B20))?   -  person    schedule 02.12.2013
comment
Все още #NAME грешка...   -  person user2118020    schedule 02.12.2013
comment
А, вярно. вероятно отнема [] от str при извикване на Evaluate. Проверява се сега...   -  person    schedule 02.12.2013
comment
Dod it Still #NAME Error... много лошо за мен   -  person user2118020    schedule 02.12.2013
comment
Това в модул ли е или в работен лист? Ако функцията е в модул, тя няма да знае към кой лист се отнасяте. бих опитал Evaluate("=SUM(Sheet1!A1:A20)-SUM(Sheet1!B1:B20)")   -  person John Alexiou    schedule 02.12.2013
comment
Не, това е в работен лист   -  person user2118020    schedule 02.12.2013
comment
@ja72 Забележка: Поставих същата функция в модул и я извиках добре от лист, без да посочвам в кой лист A1 и т.н. (с 1 корекция)   -  person    schedule 02.12.2013


Отговори (1)


** изрезка ** Оригиналният код работи добре, както е написан.

Клетката, която тествах, изглеждаше така:

=Evalue("SUM(A1:A3)-SUM(B1:B3)")

Ето проблема със сигурността:

Очевидно при първия път, когато отворите и запазите работна книга, съхраняването на код в модул е ​​достатъчно, за да стане достъпен за изпълнение от клетките на работния лист. При следващия път обаче, когато отворите същия работен лист (дори ако е активиран за макроси), е много по-трудно нещата да работят отново. Очевидно оригиналният код работи добре, както е написан. Excel обаче подсказва, че съществува и след това съобщава за грешка #NAME, когато се опитате да го използвате. Тук има тема с повече информация:

http://social.msdn.microsoft.com/Forums/en-US/0a79b7d8-178e-4cf5-8bc3-782a58b55a8b/vbaexcel-function-defined-by-user-gives-error-personalxlsb-weird?forum=isvvba

Очевидно изисква инсталиране на "добавка", за да извърши най-простата операция. (Или можете да използвате вашия файл personal.xlsb)

person Community    schedule 02.12.2013
comment
=Evalue("SUM(A1:A3)-SUM(B1:B3)") тази формула с " " дава #VALUE грешка вместо #NAME грешка Ако стартирам =SUM(A1:A3)-SUM(B1:B3) работи добре - person user2118020; 02.12.2013
comment
@user2118020 Изглежда като проблем с разрешенията, вижте редакциите по-горе. - person ; 02.12.2013