VBA - Selection.Formula не возвращает все

Скажем, у меня есть очень длинная формула в одной из моих ячеек в Excel:

= If (sum (d3: d6)> 1, "A-b-c-d-e-f-g-j-j-k-l-m-n-p-q-r-s-t-u-й-x-z 01", if (sum (d3: d6)> 1, "A-b-c-e-g-h-j-k-n-m-n-p-p-d-r-s-й-й-z-----------------------------------------------ни--не-j--------- -V-W-X-Y-Z 03", IF(SUM(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 04", IF(SUM(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 05", IF(SUM(D3:D6)> 1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 06", IF(SUM(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 07", IF(SUM(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 08", IF(SUM(D3 : D6)> 1, "A-B-C-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-x-Y-Z 09", if (Sum (D3: D6)> 1, A-B-C-E-F-H-H-I-J-K-L-M-N-P--S------- (СУММ(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 12", ЕСЛИ(СУММ(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-V-M-N-O-P-Q-R-S-W-T-XU- Y-Z 13", IF(SUM(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 14","нет" ))))))))))))))))

Теперь, когда я вызываю следующую подпрограмму VBA

Private Sub Get_Formula()
    MsgBox Selection.Formula
End Sub

то я получаю не полную формулу, а только

= If (sum (d3: d6)> 1, "A-b-c-d-e-f-g-j-j-k-l-m-n-p-q-r-s-t-u-й-x-z 01", if (sum (d3: d6)> 1, "A-b-c-e-g-h-j-k-n-m-n-p-p-d-r-s-й-й-z-----------------------------------------------ни--не-j--------- -V-W-X-Y-Z 03", IF(SUM(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 04", IF(SUM(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 05", IF(SUM(D3:D6)> 1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 06", IF(SUM(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 07", IF(SUM(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 08", IF(SUM(D3 : D6)> 1, "A-B-C-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-x-Y-Z 09", if (Sum (D3: D6)> 1, A-B-C-E-F-H-H-I-J-K-L-M-N-P--S------- (СУММ(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 12", ЕСЛИ(СУММ(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-V-M-N-O-P-Q-R-S-W-T-XU- YZ 13", ЕСЛИ(СУММ(D3:D6)>1,"A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V

Как я могу получить полную формулу?


person Phil-ZXX    schedule 14.05.2015    source источник
comment
stackoverflow.com/questions/19306859/ Хотя это немного избыточно, вы все равно не сможете что-то с этим сделать.   -  person Davesexcel    schedule 15.05.2015
comment
1024 символа, я бы предположил, что это предел длины сообщения в окне сообщений. Я бы хотел уменьшить формулу. Меня это немного смущает, поскольку критерии одинаковы для каждого, если это означает, что всегда будет либо A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z 13, либо нет. Даже тогда у вас может быть IF для обработки префикса (A-Z) или пробела, поскольку он является статическим, а если для обработки суффикса 01–13 или No, это будет НАМНОГО короче.   -  person Dan Donoghue    schedule 15.05.2015
comment
Как насчет того, чтобы показать НАСТОЯЩУЮ формулу, чтобы мы могли помочь вам уменьшить ее? Кстати, эта усеченная формула имеет длину ровно 1024 символа. Когда вы видите такие числа, как 255, 1024, 16384 и т. д.), вы должны признать их ключом к внутреннему ограничению.   -  person    schedule 15.05.2015


Ответы (2)


Параметр "prompt" функции MsgBox имеет максимальную длину приблизительно 1024 символа, в зависимости от ширины используемых символов. (https://i.stack.imgur.com/QB6fe.png)

Вы можете получить всю формулу, напечатав ее в непосредственном окне Visual Basic с помощью этого кода:

Sub Get_Formula()
    Rem Opens Immediate Window and Clears it
    SendKeys "^g^a{DEL}": Stop

    With ActiveCell
        Debug.Print vbLf; vbLf; String(131, "*")
        Debug.Print "Formula in Wbk\Wsh\Cell: "; .Parent.Parent.Name; " \ "; .Parent.Name; " \ "; .Address(0, 0)
        Debug.Print ActiveCell.Formula
        Debug.Print vbLf; String(131, "*"); vbLf
    End With
    SendKeys "^g^{HOME}" ': Stop
End Sub

Кроме того, я вижу некоторые несоответствия в формуле, но я предполагаю, что это просто фиктивная формула, используемая для объяснения проблемы с функцией MsgBox. Эти длинные формулы трудно читать, могу ли я предложить использовать клавиши Alt+Enter вместе, чтобы начать новую строку в той же ячейке, тем самым разбив вашу формулу на несколько строк (см. рисунок ниже)

введите здесь описание изображения

person EEM    schedule 14.05.2015

Я поместил вашу довольно большую формулу в A1 Затем в A2 через A15 я вставил:

=MID(A$1,76*(ROW()-2)+1,75)

и я запустил этот макрос:

Sub dural2()
  With Range("A1")
    .Formula = "'" & .Formula
  End With

  ActiveSheet.ListBoxes.Add(332.25, 62.25, 242.25, 120).Select
    s = Selection.Name
    ActiveSheet.Shapes(s).Select
    With Selection
        .ListFillRange = "A2:A15"
        .LinkedCell = "$Z$1"
        .MultiSelect = xlNone
        .Display3DShading = True
    End With
End Sub

и получил этот несколько уродливый результат:

введите здесь описание изображения

Я не предлагаю это как практическое решение. Просто демонстрация того, что ListBox с полосой прокрутки может отображать достаточно символов.

person Gary's Student    schedule 14.05.2015