VBA Конечное обновление проблем Microsoft Office 2007 до 2010 (VBA 6 до VBA7) и необходимость в документации, помощи, советах.(Достаточно с ключевыми словами) - PullRequest
4 голосов
/ 02 июня 2011

Как типичный пользователь малого бизнеса, когда мой ноутбук сломался, я ДОЛЖЕН перейти на Office 2010 (2007 больше не продается). Теперь у меня есть куча быстрых и грязных VBA, которые идут с моими старыми листами. Никто из них не был шедевром программирования, но они работали и работали с Excel и Office 2007.

Теперь я попытался использовать свои старые вещи в Office 2010, и все это совсем немного пригодно для использования. Два дня я искал в Интернете, пытаясь найти какую-либо документацию для конечного пользователя, но не повезло. Я нашел много блогов, предназначенных для профессиональных программистов, которые надеются создать пуленепробиваемый код для обслуживания от Office 0 до Office2010, от 32 до 64 бит (здесь нет 8 бит?), Но ни в одной из статей не говорилось об основной деятельности. , Конечный пользователь с большим количеством самодельного кодирования, чтобы выжить в день.

Как мне заставить мой старый VBA 2007 работать с 2010?

Нет, мне не нужна его обратная совместимость с чем-либо, достаточно, чтобы он работал с моим новым компьютером и новым программным обеспечением (в моем случае это 64-битная версия, если кому-то интересно). Мне просто нужно знать, почему мой код больше не работает, и что с этим делать. Что я действительно хочу, так это несколько указателей на реальную информацию, если таковая имеется! Конечно, я мог копировать и вставлять каждую часть своего кода в дискуссионные форумы программистов, смеяться над ними, и через несколько недель я мог бы заставить некоторые из них работать, но мне действительно нужна настоящая информация, записанная для основного пользователя VBA. Мне нужно научиться этому.

Так в чем ваша проблема?

Что изменилось?

Отсутствует компонент календаря active-X. Я нашел решение: http://answers.microsoft.com/en-us/office/forum/officeversion_other-customize/missing-calendar-control/03ad5d05-ca3f-4081-9989-e757223ebdde теперь мне просто нужно переделывать каждый календарь во всех моих формах… Спасибо.

Textbox.Text не работал, я нашел и запустил Инспектор совместимости кода Microsoft Excel (CII), и он показал, что у меня есть несколько тысяч из тех элементов Textbox.Text, которые «устарели» - «Потенциально содержит удаленные элементы, объектная модель »- Что?

Все лучше и лучше, то же самое программное обеспечение Microsoft заявило: «ТИП: УСТАРЕВАНИЕ ПУНКТ: [xls] SmartTagRecognizer.FullName URL: http://go.microsoft.com/?linkid=9719761 КОД: MyFullName = ThisWorkbook.FullName »» Никаких объяснений ... (Кстати, единственный способ остановить Инспектора и увидеть результаты был CRT-ALT-DEL -Stop ...)

Я посетил ссылки, данные инспектором, там никакой помощи.

Я запускал Инспектора несколько раз, и он каждый раз давал разные результаты. Теперь это интересно.

Я слышу вашу проблему, теперь покажите мне вашу проблему

С чего начать. Вот один. У меня есть форма, где пользователь может назначить новую «встречу», при сохранении VBA создает фрагмент кода и новую форму в форме календаря (и в Outlook, но здесь дело не в этом). Когда пользователь возвращается и нажимает эту форму - кнопка - Кнопка запускает фрагмент кода, который был создан. вот код:

Private Sub myMacro2001_Click()
    Dim meetingId As Integer
    meetingId = 2001
    Load formHours
    Call formHours.selectMeeting(meetingId)
    formHours.Show vbModeless
End Sub

Предполагается, и было сделано еще в 2007 году, открыть форму формы Часы с информацией, сохраненной для этого совещания 2001 (meetingId)

И код в форме Часов начинается как:

Sub selectMeeting (ByRef IdNo As Integer) ’Bring in the meeting ID
Meeting = IdNo
    ….

Не очень элегантно, но это сработало. Больше не делает этого.

Если вы поможете мне с этим делом, я ценю, но было бы еще лучше, если бы вы сообщили мне, где я должен был найти ответ. Что изменилось? Работал раньше, больше нет. Что делать?

(PS. Я знаю, что мой код дрянной, но он работал… И я просто хотел бы узнать, что изменилось, и как мне нужно изменить.

Ps.Ps Да, я знаю, что должен спросить Microsoft, но вы знаете, как это ...)

Followup

После некоторого любезного совета от Барроука и других мне удалось исправить некоторые проблемы. Изменение Text.Text на Text.Value создало кучу новых проблем, некоторые из текстовых значений использовались в формулах, и теперь мне нужно было их изменить Val (FooTextBox.Value)

Что действительно удивительно, так это то, что 2010 год кажетсяочень медленно! Я побежал 2007 и 2010 бок о бок в офисе, и 2007 выиграл руки вниз. Один из моих работников уже выставил счет клиенту, используя 2007 год, когда 2010 все еще открывался! Забавно, но с 2007 года он работал на двухъядерном процессоре AMD Athlon X2 с ограниченной памятью, а 2010 год был на моем новом ноутбуке с Core i7-740QM, 6 ГБ, оба на win7-64. Я просматривал сеть и не нашел никаких жалоб на то, что VBA7 в Office 2010 намного медленнее, чем VBA6 в Office2007. Я не знаю, является ли это только моей проблемой, но мои сотрудники проголосовали за единодушное мнение ...

Ответы [ 3 ]

1 голос
/ 02 июня 2011

Для всех ваших TextBox экземпляров измените .Text на .Value

Проблема SmartTagRecognizer может показаться ложноположительной, поэтому никаких действий там не требуется


В случае ошибки с формой вы можете попытаться создать форму следующим образом:

Private Sub myMacro2001_Click()

Dim meetingId As Integer
Dim fmHours As formHours

meetingId = 2001
Set fmHours = New formHours

fmhours.selectMeeting meetingId
fmHours.Show vbModeless

End Sub

Кроме того, вы можете изменить Sub selectMeeting на Public Sub selectMeeting


Документация о реальных различиях в VBA между Office 2007 и Office 2010 выглядит немного скудной. На этой странице конкретно упоминается, что 32-разрядные элементы управления ActiveX (как пользовательские, так и встроенные) будут не работать в 64-разрядной версии Office 2010. Следовательно, это может бытькорень вашей проблемы.

Здесь также есть цитата из Microsoft здесь :

Будет ли 64-разрядная версия продукта Office 2010доступно?

Да, будут доступны обновления для 64-разрядной версии Office 2010. Однако мы настоятельно рекомендуем большинству пользователей устанавливать 32-разрядную версию Office 2010 как в 32-разрядных, так и в 64-разрядных операционных системах, поскольку в настоящее время многие распространенные надстройки для Office не будут работать в 64-разрядной версии. 64-разрядная версия-битная установка продуктов Microsoft Office 2010 будет доступна для пользователей, которые обычно используют очень большие документы или набор данных и нуждаются в программах Excel 2010 для доступа к более чем 2 ГБ памяти.Возможны технические проблемы с 64-разрядной версией, и для установки 64-разрядной версии продукта Office 2010 пользователи должны иметь на своем ПК поддерживаемую 64-разрядную операционную систему.

(мой акцент)

Если можете, попробуйте вместо этого установить 32-разрядную версию Office 2010

0 голосов
/ 21 апреля 2016

Подняв эту точку из @barrowc:

На этой странице специально упоминается, что 32-разрядные элементы управления ActiveX (как пользовательские, так и встроенные) не будут работать в 64-разрядной версии Office2010.

У меня есть частичное решение этого вопроса - замена кнопок ActiveX фигурами, встраивающими изображения, - и некоторые ответы, которые вам нужны для этого, могут быть в ответе, который я дал о подделке кнопкиclick 'поведение

Это большая работа, и вы регрессируете от кода, управляемого событиями, к менее способным объектам и устаревшему дизайну «макроса назначения».Но вы можете, по крайней мере, сохранить визуальное удобство использования вашего рабочего листа.

0 голосов
/ 09 декабря 2012

У меня тоже проблемы ... десятилетиями я использовал это для создания строки символов "=" для визуального разрыва в тексте и т. Д ...

STRING$(80,"=")

Теперь люди говорят мне, что код не работает в Excel 2010.

Какая замена вышеперечисленному? Я имею в виду ... Я мог бы сделать это ...

For X = 1 to 80
print "=";
next x
print

но это настоящий шаг назад.

Существует одно потенциальное исправление ... это изменение его на ссылку на VBA, как это ...

VBA.STRING$(80,"=")

Похоже, он все еще работает в 2007 году.

...