2017-02-01 3 views
12

Может кто-нибудь пролить свет на это. В MS Word VBA у меня есть тривиальный Sub, который дает довольно неожиданные результаты. [Edit: этот вопрос был воспроизведен на нескольких различных установок MS Word, но до сих пор только Win10]VBA Debug Печать, создающая неожиданный и, казалось бы, случайный выход

репрографии Среды:

  • Win10, Word 2010 (32-разрядная версия) PC
  • Win10, Word 2010 (32-битный) ВМ-Лазурный
  • Win10, Слово 2016 (32-битный) ПК
  • Win10, Word 2010 (64-битный) ВМ-Лазурный
  • Win10, Слово 2016 365 @VincentG
  • Win10, Word 2007 (32 бит) @Ambie
  • Win10 (64), Word XP @ThunderFrame
  • Win10 (64), Excel XP @ThunderFrame
  • Win8.1 (64), Word 2013 @miroxlav (первая репродукция вне Win10)
  • Win8.1 (64), офис 2016 (32) @GSerg
  • Win10 (64), Word 2007 (x86) @PartricK
  • Win10 (64), Excel 2007 (x86) @PartricK

Но не воспроизводится в:

  • Win7 (64), Word 2007 (32-разрядная версия) VM Azure
  • Win7 (64), Word 2010 (32?) @JohnColeman
  • Win7 (64), Word 2007 (32) @ Slai
  • Win7 (64), Word 2003 (32) @GSerg
  • WinXP (32), Word 2010 (32) @GSerg
  • Win7 (64), офис 2010 (32)

Действия по воспроизведению: Открыть новый документ Word Open IDE (Alt + F11) Введите этот код

Option Explicit 

Sub test() 
Dim i As Integer 
For i = 1 To 100 
Debug.Print vbCr 
Next 
End Sub 

Выполнить тест Sub.

Мой выход изменяется каждый раз, когда цикл запуска:

]Œ[p^"î;{Ñ[ 

]Œ[p^"î;{Ñ[ 

\ÒZžUÖè;qÑZ 

или

ÿÿ 

þþ@øø”¶(3 

ÿÿ 

или

>O 

>O 

>O 

или

p 

G P‚j Ž¶&[email protected] 

p 

Первоначально я думал, что могу распознать какой-то контент из моего документа, но теперь получаю аналогичные результаты для чистого документа, в котором ничего не открывается в Word.

Это было довольно обескураживаю, пока я не воспроизвел в других установках Word, теперь это скорее отвлечение &.

Есть идеи о том, что происходит?

+0

BTW: Эффект кажется более выраженным, чем больше циклов, хотя это может быть просто мое воображение. – SlowLearner

+1

Интересно. Я не могу реплицировать (с Word 2010 на 64-разрядную Windows 7). –

+0

@JohnColeman Я ревную, какая у вас окружающая среда? (wow, что было быстро) – SlowLearner

ответ

2

Не ответ, но вот р-код дамп слово документ в формате .doc:

Похоже vbCr не испорченного

_VBA_PROJECT parsing done. 
------------------------------------------------------------------------------- 
Module streams: 
Macros/VBA/ThisDocument - 932 bytes 
Macros/VBA/Module1 - 1478 bytes 
Line #0: 
     Option (Explicit) 
Line #1: 
Line #2: 
     FuncDefn (Sub test()) 
Line #3: 
     Dim 
     VarDefn i (As Integer) 
Line #4: 
     StartForVariable 
     Ld i 
     EndForVariable 
     LitDI2 0x0001 
     LitDI2 0x0064 
     For 
Line #5: 
     Debug 
     PrintObj 
     Ld vbCr 
     PrintItemNL 
Line #6: 
     StartForVariable 
     Next 
Line #7: 
     EndSub 
+0

У меня есть чему поучиться ... – SlowLearner

+0

Я знаю, что это «не ответ», но это ответ, который показал мне самые новые вещи - спасибо. – SlowLearner

2

@Comintern, и я уже давно размышляли что Immediate Window на самом деле является трубой или трубопроводом для stdIn/stdOut.

Если мы будем работать на этой основе, то этот ответ имеет некоторые идеи:

https://stackoverflow.com/a/25843879/5757159

Текстовый поток представляет собой упорядоченную последовательность символов состоит в строки, каждая строка, состоящая из нуля или более символов плюс завершающий символ новой строки.

Символы могут быть добавлены, изменены или удалены на входе и выходе, чтобы соответствовать различным соглашениям для представления текста в среде хоста.

Таким образом, кажется, что для Windows 10, может быть получить что-то неправильно, когда он обрабатывает потоки?

Чтобы обойти эту проблему, чтобы гарантировать, что Debug.Print заявления никогда не заканчиваются в vbCr, Chr(10) или Chr$(10)

+0

Я посмотрю, сделал еще несколько тестов: 'Debug.Print vbCr &" "' is clean 'Debug.Print vbCr & Chr $ (10)' is clean 'Debug.Print Chr $ (10) 'is clean ' Debug.Print vbCr & "" 'грязный ' Debug.Print vbCr & vbNullString' грязный 'Debug.Print Chr (13)' грязный – SlowLearner

+0

'Debug.Print vbCr & Chr (0) 'кажется чистым. – ThunderFrame

+0

'Debug.Print Chr (0) & vbCr' clean' Debug.Print Chr (0) 'clean – SlowLearner

Смежные вопросы