|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Перенос Excel файла с макросами |
|
VBA - Перенос Excel файла с макросами
|
Ветеран Сообщения: 935 |
Профиль | Отправить PM | Цитировать
Я не спец по программированию, поэтому не могу понять возможно простой вопрос:
Мне нужно перенести на другой комп. 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 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать покажи код (и место ошибки), авось разгадаем
|
Отправлено: 07:33, 03-02-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 935
|
Профиль | Отправить 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 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Откройте модули, встаньте в самый самый верх, и напишите Option Explicit. Затем опишите все те переменные, на которые идет ругань, например:
Цитата SergOst:
Цитата SergOst:
Цитата SergOst:
и так далее. Если тип переменной не знаете, напишите просто Dim a, TekPos и другие переменные. |
|||
------- Отправлено: 01:43, 04-02-2009 | #4 |
Ветеран Сообщения: 935
|
Профиль | Отправить PM | Цитировать Цитата Delirium:
Но теперь подсвечивает уже не оператор присваивания с переменной, а слово "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
|
Профиль | Отправить PM | Цитировать Во вновь созданном листе со скопированными макросами нажмите ALT+F8 - и в появмвшемся окне выберите первый попавшийся (название) и нажмите клавишу изменить. Попадаете в окно проекта VBA с кодом программы. Нажимаете F8 - пошаговое выполнение макроса и смотрите на каком шаге он у вас зависает. Ещё в меню Вид - щелкаете на "окно локальных переменных" - и появляется под окном кода программы - внизу окно локальных переменных - все переменные что задействованы в этом макросе. По началу все могут быть равны "пустому месту", потом по мере пошагового выполнения (F8) - у переменных появляются их текущие значения - это хорошая визуальная подсказка и контроль выполнения программы макроса.
|
Отправлено: 01:01, 05-02-2009 | #6 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать SergOst, а попробуйте переставить офис? Или еще лучше выложите файл xls файл, посмотрим, что там не так.
|
------- Отправлено: 01:27, 05-02-2009 | #7 |
Модератор Сообщения: 16848
|
Профиль | Сайт | Отправить PM | Цитировать SergOst, войдите в VBA на исходном компе, откройте Tools - References и посмотрите, где установлены галочки, какие подключены библиотеки. Подключите такие же на новом. Также в VBA на исходном компе через Object Browser введите имя вашего "проблемного" модуля, функции, программы, и внизу смотрите по ссылкам, к какому классу (dll и пр.) относится ваш "зверь". На новом нужно те же библиотеки подключать.
|
------- Отправлено: 08:28, 05-02-2009 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Перенос файла гибернации на другой раздел | 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 |
|