Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Перенос Excel файла с макросами

Ответить
Настройки темы
VBA - Перенос Excel файла с макросами

Аватара для SergOst

Ветеран


Сообщения: 935
Благодарности: 50

Профиль | Отправить PM | Цитировать


Изменения
Автор: SergOst
Дата: 02-02-2009
Я не спец по программированию, поэтому не могу понять возможно простой вопрос:

Мне нужно перенести на другой комп. Excel-файл с макросами, содержащимися почти на каждом листе.
Версия Excel та же, установлена в полном варианте.(2002 года)
Eдва щелкаешь по клетке листа скопированного на другой комп. файла, как появляется ошибка Visual Basic с переключением на код: Compile Error: Can't find project or library событие Worksheet.SelectionChange
Желтая стрелка указывает на Private Sub Worksheet_SelectionChange(ByVal Target As Range) и выделяется первый же после этого заголовка очевидно правильный оператор присваивания.
И так на всех листах, где есть макросы. На листах без макросов ошибок не выскакивает.
Уровень безопасности по макросам ставил на низкий - это не помогает, никаких запросов паролей не возникает.


На исходном компьютере никаких ошибок не выскакивает. Там просто можно редактировать клетки, код VBA выполняется как ему положено.

Как разгадать, какой библиотеки или проекта файлу не хватает на новом месте?
Где Excel хранит присоединенные в макросах библиотеки? В файле или в какой-то из своих установочных папок?

Отправлено: 17:13, 02-02-2009

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


покажи код (и место ошибки), авось разгадаем

Отправлено: 07:33, 03-02-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для SergOst

Ветеран


Сообщения: 935
Благодарности: 50

Профиль | Отправить PM | Цитировать


Цитата pva:
покажи код (и место ошибки), авось разгадаем »
Имхо, от кода не зависит (по крайней мере я не понимаю, если бы в коде было что-то не то, то на исходном компе тоже бы не работало, не может же что-то в коде теряться при простом копировании файла?):

Например, лист vvod (данных) - высвечивается код(по событию Worksheet SelectionChange):
----------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'считаем кол-во ТК
a = 0
For i = 1 To 70
If Worksheets("Base").Cells(i, 7) = "" Then Exit For
a = a + 1
Next i
VsegoTK = a + 1


' вырезаем из основания номер и дату заказа, название ТК
a = 1
S = Trim(Worksheets("Ввод данных").Range("A8"))
For i = 1 To Len(S) - 1
If Mid(S, a, 2) = " " Then S = Left(S, a) + Mid(S, a + 2, Len(S) - a) Else a = a + 1
Next i

и т.д.
----------------------------------------------
желтая стрелка указывает на Private Sub ... и подсвечено "a =" в первом операторе.

Или лист Sopr (Сопроводительный лист) - высвечивается код(по событию Worksheet SelectionChange):
--------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

TekPos = 15 'текущая позиция таблицы
KolEkzempl = 3 'кол-во экземпляров каждого паллета
TekPal = 1 'текущий паллет

'считаем кол-во паллет и коробок
VsegoPal = 1
VsegoKor = 0
For i = 9 To 200
If Worksheets("Упаковочный лист для склада").Cells(i, 1) = "" Then Exit For
VsegoKor = VsegoKor + 1
If Worksheets("Упаковочный лист для склада").Cells(i, 6) > VsegoPal Then VsegoPal = Worksheets("Упаковочный лист для склада").Cells(i, 6)
Next i


With Worksheets("Сопроводительный лист").Cells
.ClearContents
.Borders.LineStyle = 0
.Font.Name = "Arial"
.Font.Size = 10
End With

For p = 1 To VsegoPal 'цикл рисования каждого паллета

For t = 1 To KolEkzempl
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 11, 1), Cells(TekPos - 1, 6)).Font.Bold = True
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 11, 1), Cells(TekPos - 3, 6)).Font.Size = 12
Worksheets("Сопроводительный лист").Cells(TekPos - 14, 1) = "Приложение №2 к 'Требованиям к комплектации и документации при осуществлении поставок на"
Worksheets("Сопроводительный лист").Cells(TekPos - 13, 1) = "все собственные и наемные РЦ " & Worksheets("Base").Cells(2, 21) & " всех групп товаров'"
Worksheets("Сопроводительный лист").Cells(TekPos - 11, 2) = "ИНФОРМАЦИОННЫЙ ЛИСТ ПАЛЛЕТА №"
Worksheets("Сопроводительный лист").Cells(TekPos - 11, 5) = TekPal
Worksheets("Сопроводительный лист").Cells(TekPos - 9, 1) = "Поставщик №:"
Worksheets("Сопроводительный лист").Cells(TekPos - 9, 3) = Worksheets("Base").Cells(1, 22)
Worksheets("Сопроводительный лист").Cells(TekPos - 8, 1) = "Наименование поставщика:"
Worksheets("Сопроводительный лист").Cells(TekPos - 8, 3) = Worksheets("Base").Cells(1, 21)
Worksheets("Сопроводительный лист").Cells(TekPos - 7, 1) = "Заказ №:"
If Worksheets("Ввод данных").Range("K11") = "" Then Worksheets("Сопроводительный лист").Cells(TekPos - 7, 3) = Worksheets("Ввод данных").Range("J11") Else Worksheets("Сопроводительный лист").Cells(TekPos - 7, 3) = Worksheets("Ввод данных").Range("K11")
Worksheets("Сопроводительный лист").Cells(TekPos - 6, 1) = "№ магазина " & Worksheets("Base").Cells(2, 21) & " (№ РЦ):"
Worksheets("Сопроводительный лист").Cells(TekPos - 6, 3) = Worksheets(1).Range("J9")
Worksheets("Сопроводительный лист").Cells(TekPos - 6, 4) = "(" & Worksheets(1).Range("J8") & ")"
Worksheets("Сопроводительный лист").Cells(TekPos - 5, 1) = "Плановая дата поставки:"
If Worksheets("Ввод данных").Range("K12") = "" Then Worksheets("Сопроводительный лист").Cells(TekPos - 5, 3) = Worksheets("Ввод данных").Range("J12") Else Worksheets("Сопроводительный лист").Cells(TekPos - 5, 3) = Worksheets("Ввод данных").Range("K12")
Worksheets("Сопроводительный лист").Cells(TekPos - 2, 1) = "SAP"
Worksheets("Сопроводительный лист").Cells(TekPos - 1, 1) = "№ товара"
Worksheets("Сопроводительный лист").Cells(TekPos - 2, 2) = "Наименование товара"
Worksheets("Сопроводительный лист").Cells(TekPos - 2, 3) = "кол-во кор."
Worksheets("Сопроводительный лист").Cells(TekPos - 2, 4) = "кол-во шт."
Worksheets("Сопроводительный лист").Cells(TekPos - 1, 4) = "в кор."
Worksheets("Сопроводительный лист").Cells(TekPos - 2, 5) = "общее"
Worksheets("Сопроводительный лист").Cells(TekPos - 1, 5) = "кол-во шт."
Worksheets("Сопроводительный лист").Cells(TekPos - 2, 6) = "окончание"
Worksheets("Сопроводительный лист").Cells(TekPos - 1, 6) = "срока годн."
Worksheets("Сопроводительный лист").Range(Cells(TekPos, 1), Cells(TekPos + 36, 6)).Borders.LineStyle = 1
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 2, 1), Cells(TekPos - 2, 6)).Borders(xlEdgeTop).LineStyle = 1
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 2, 1), Cells(TekPos - 1, 1)).Borders(xlEdgeLeft).LineStyle = 1
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 2, 2), Cells(TekPos - 1, 2)).Borders(xlEdgeLeft).LineStyle = 1
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 2, 3), Cells(TekPos - 1, 3)).Borders(xlEdgeLeft).LineStyle = 1
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 2, 4), Cells(TekPos - 1, 4)).Borders(xlEdgeLeft).LineStyle = 1
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 2, 5), Cells(TekPos - 1, 5)).Borders(xlEdgeLeft).LineStyle = 1
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 2, 6), Cells(TekPos - 1, 6)).Borders(xlEdgeLeft).LineStyle = 1
Worksheets("Сопроводительный лист").Range(Cells(TekPos - 2, 6), Cells(TekPos - 1, 6)).Borders(xlEdgeRight).LineStyle = 1

b = 0 'позиция в сопроводительном листе
c = 9 'позиция в упаковочном листе
d = 1 'кол-во коробок в позиции
For i = 1 To VsegoKor
dd = 0
If Worksheets("Упаковочный лист для склада").Cells(c, 6) <> TekPal Then c = c + 1
If Worksheets("Упаковочный лист для склада").Cells(c, 6) = TekPal Then
For ii = c To c + VsegoKor - b + 1
If Worksheets("Упаковочный лист для склада").Cells(c, 2) <> Worksheets("Упаковочный лист для склада").Cells(c + 1, 2) Then Exit For
If Worksheets("Упаковочный лист для склада").Cells(c + 1, 6) <> TekPal Then Exit For
If Worksheets("Упаковочный лист для склада").Cells(c, 3) <> Worksheets("Упаковочный лист для склада").Cells(c + 1, 3) Then dd = 1
d = d + 1
c = c + 1
Next ii
a = 0
For ii = 1 To 80
a = a + 1
If Worksheets("Base").Cells(ii, 5) = Worksheets("Упаковочный лист для склада").Cells(c, 2) Then Exit For
Next ii
If dd = 1 Then
Worksheets("Сопроводительный лист").Cells(TekPos + b, 1) = Worksheets("Base").Cells(a, 1) 'штрих-код
Worksheets("Сопроводительный лист").Cells(TekPos + b + 1, 1) = Worksheets("Base").Cells(a, 1) 'штрих-код
Worksheets("Сопроводительный лист").Cells(TekPos + b, 2) = Worksheets("Base").Cells(a, 4) 'артикул
Worksheets("Сопроводительный лист").Cells(TekPos + b + 1, 2) = Worksheets("Base").Cells(a, 4) 'артикул
Worksheets("Сопроводительный лист").Cells(TekPos + b, 3) = d - 1 'кол-во кор
Worksheets("Сопроводительный лист").Cells(TekPos + b + 1, 3) = 1 'кол-во кор
Worksheets("Сопроводительный лист").Cells(TekPos + b, 4) = Worksheets("Упаковочный лист для склада").Cells(c - 1, 3) 'кол-во шт. в кор
Worksheets("Сопроводительный лист").Cells(TekPos + b + 1, 4) = Worksheets("Упаковочный лист для склада").Cells(c, 3) 'кол-во шт. в кор
Worksheets("Сопроводительный лист").Cells(TekPos + b, 5) = Worksheets("Сопроводительный лист").Cells(TekPos + b, 3) * Worksheets("Сопроводительный лист").Cells(TekPos + b, 4) 'общ. кол-во
Worksheets("Сопроводительный лист").Cells(TekPos + b + 1, 5) = Worksheets("Сопроводительный лист").Cells(TekPos + b + 1, 3) * Worksheets("Сопроводительный лист").Cells(TekPos + b + 1, 4) 'общ. кол-во
Worksheets("Сопроводительный лист").Cells(TekPos + b, 6) = "-"
Worksheets("Сопроводительный лист").Cells(TekPos + b + 1, 6) = "-"
b = b + 2
c = c + 1
End If
If dd = 0 Then
Worksheets("Сопроводительный лист").Cells(TekPos + b, 1) = Worksheets("Base").Cells(a, 1) 'штрих-код
Worksheets("Сопроводительный лист").Cells(TekPos + b, 2) = Worksheets("Base").Cells(a, 4) 'артикул
Worksheets("Сопроводительный лист").Cells(TekPos + b, 3) = d
Worksheets("Сопроводительный лист").Cells(TekPos + b, 4) = Worksheets("Упаковочный лист для склада").Cells(c, 3)
Worksheets("Сопроводительный лист").Cells(TekPos + b, 5) = Worksheets("Сопроводительный лист").Cells(TekPos + b, 3) * Worksheets("Сопроводительный лист").Cells(TekPos + b, 4)
Worksheets("Сопроводительный лист").Cells(TekPos + b, 6) = "-"
b = b + 1
c = c + 1
End If
End If
d = 1
Next i

TekPos = TekPos + 51
Next t
TekPal = TekPal + 1
Next p



End Sub

----------------------------------
Опять желтая стрелка указывает на Private Sub ... и подсвечено "TekPos =" в первом операторе.

Последний раз редактировалось SergOst, 03-02-2009 в 20:31.


Отправлено: 20:18, 03-02-2009 | #3


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Откройте модули, встаньте в самый самый верх, и напишите Option Explicit. Затем опишите все те переменные, на которые идет ругань, например:
Цитата SergOst:
и подсвечено "a =" в первом операторе. »
Цитата SergOst:
a = 0 »
Напишите Dim a as Integer
Цитата SergOst:
и подсвечено "TekPos =" в первом операторе. »
Dim TekPos as Integer

и так далее. Если тип переменной не знаете, напишите просто Dim a, TekPos и другие переменные.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 01:43, 04-02-2009 | #4


Аватара для SergOst

Ветеран


Сообщения: 935
Благодарности: 50

Профиль | Отправить PM | Цитировать


Цитата Delirium:
Откройте модули, встаньте в самый самый верх, и напишите Option Explicit. Затем опишите все те переменные, на которые идет ругань, например: »
Все сделал в первом модуле, как сказали.
Но теперь подсвечивает уже не оператор присваивания с переменной, а слово "Trim" в первом модуле(оно там есть в приведенном мной фрагменте кода) с теми же словами ошибки, т.е. встроенную бейсиковскую функцию усечения.
Что теперь делать?
Может где-то настройки есть и про описание переменных и про встроенные функции?
Галочка в Require Variable Declaration тем не менее была снята в MSVisualBasic-Tools-Options
Постановка/снятие галочки в Auto Syntax Check тоже не влияет.

Интересно, что если в коде начинаешь набирать a=Len(.. то высвечивает подсказку Len(Expression),
т.е. функцию Len знает, а если набираешь s=Trim(.. или s=Mid(.. то подсказку не дает, т.е. эти функции почему-то не знает??

Последний раз редактировалось SergOst, 04-02-2009 в 15:57.


Отправлено: 15:35, 04-02-2009 | #5


Старожил


Сообщения: 369
Благодарности: 49

Профиль | Отправить PM | Цитировать


Во вновь созданном листе со скопированными макросами нажмите ALT+F8 - и в появмвшемся окне выберите первый попавшийся (название) и нажмите клавишу изменить. Попадаете в окно проекта VBA с кодом программы. Нажимаете F8 - пошаговое выполнение макроса и смотрите на каком шаге он у вас зависает. Ещё в меню Вид - щелкаете на "окно локальных переменных" - и появляется под окном кода программы - внизу окно локальных переменных - все переменные что задействованы в этом макросе. По началу все могут быть равны "пустому месту", потом по мере пошагового выполнения (F8) - у переменных появляются их текущие значения - это хорошая визуальная подсказка и контроль выполнения программы макроса.

Отправлено: 01:01, 05-02-2009 | #6


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


SergOst, а попробуйте переставить офис? Или еще лучше выложите файл xls файл, посмотрим, что там не так.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 01:27, 05-02-2009 | #7


Модератор


Moderator


Сообщения: 16826
Благодарности: 3244

Профиль | Сайт | Отправить PM | Цитировать


SergOst, войдите в VBA на исходном компе, откройте Tools - References и посмотрите, где установлены галочки, какие подключены библиотеки. Подключите такие же на новом. Также в VBA на исходном компе через Object Browser введите имя вашего "проблемного" модуля, функции, программы, и внизу смотрите по ссылкам, к какому классу (dll и пр.) относится ваш "зверь". На новом нужно те же библиотеки подключать.

-------
При заполнении сведений о конфигурации компьютера не забудь поставить флажок: отображать - "Да"
-------------------------------------------------------------------------------------------
Ассоциация VirusNet - помощь и обучение борьбе с вирусами. Некоторые вопросы загрузки в моем блоге


Отправлено: 08:28, 05-02-2009 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Перенос Excel файла с макросами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Перенос файла гибернации на другой раздел yurikoles Microsoft Windows 7 11 04-05-2020 11:25
Flash - СОФТ для Восстановления файла в EXCEL с флешки D.A.P Накопители (SSD, HDD, USB Flash) 3 01-04-2009 16:30
Отображение файла EXCEL на странице. Moon Mag Вебмастеру 8 04-07-2007 18:27
восстановление excel-файла, затертого другим файлом с тем же именем XPurple Хочу все знать 4 03-01-2006 13:47
перенос графика из excel в word Naug Программирование и базы данных 1 24-09-2004 12:00




 
Переход