VBA изменяет Excel 2002-> Excel 2007

Идея Dan не вполне работает:

#!/usr/bin/env python
class flushfile(file):
    def __init__(self, f):
        self.f = f
    def write(self, x):
        self.f.write(x)
        self.f.flush()

import sys
sys.stdout = flushfile(sys.stdout)

print "foo"

результат:

Traceback (most recent call last):
  File "./passpersist.py", line 12, in <module>
    print "foo"
ValueError: I/O operation on closed file

я полагаю, что проблема состоит в том, что это наследовалось классу файла, который на самом деле не необходим. Согласно документам для sys.stdout:

stdout и stderr needn’t быть встроенными объектами файла: любой объект приемлем, пока он имеет запись () метод, который берет аргумент строки.

настолько изменяющийся

class flushfile(file):

к [1 110]

class flushfile(object):

заставляет его работать просто великолепно.

5
задан a_m0d 21 July 2009 в 06:35
поделиться

2 ответа

  1. Откройте Excel 2007 и войдите в редактор VBA (Alt + F11)
  2. Откройте Справка (F1)
  3. Щелкните Что нового
  4. ] Щелкните Изменения объектной модели с момента выхода Microsoft Office XP (2002)

Вуаля!

Этот список является достаточно полным и интерактивным, поэтому я не буду воспроизводить его здесь. Но он также имеет изменения по сравнению с версиями 97, 2000 и 2003.

4
ответ дан 15 December 2019 в 01:08
поделиться

Вот некоторые из изменений, которые я заметил на данный момент:

Shape.ThreeD.RotationX = 90

стал

Shape.ThreeD.RotationY = -90

(т.е. X и Ось Y поменялась местами для трехмерного вращения автофигур, а положительное / отрицательное направления вдоль этой оси противоположны).

Excel больше не соблюдает директиву

Shape.ThreeD.ExtrusionColorType = msoExtrusionColorAutomatic

(она просто дает черную экструзию, по крайней мере, в моих тестах).

Трехмерные формы теперь должны иметь явно заданное направление освещения, например

Shape.ThreeD.PresetLightingDirection = msoLightingRight

, тогда как раньше в этом не было необходимости.

Это лишь некоторые из вещей, которые я открыл на данный момент. Я уверен, что их гораздо больше - я буду добавлять их по мере их нахождения (я постараюсь включить в этот ответ вещи, касающиеся автофигур, и сгруппировать другие изменения / проблемы в отдельные ответы, чтобы упростить просмотр).

Если у вас есть код, который использует

Application.ScreenUpdating = False

для ускорения, вы должны явно вызвать

Application.ScreenUpdating = True

перед отображением MsgBox или InputBox, если вы хотите, чтобы изменения отображались на экране (тогда как 2002 всегда будет обновите экран перед отображением любого диалогового окна).

0
ответ дан 15 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: