Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2009, 10:00   #1
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию Слепил макрос, как его запустить?

Записал макрос, по импорту данных из файла TXT и последующей сортировки данных. Впринципе все работает. Но работает только если макрос этот на листе Х расположен. Как сделать так, что бы кнопка которая расположена на другом листе запускала этот макрос на исполнение на листе Х?

Private Sub CommandButton18_Click()
ThisFile = "C:\input\L.txt"
WrteInvenoty = 100
Worksheets("Х").Cells.Clear
FileNumber = FreeFile
Open ThisFile For Input As #FileNumber
Ctr = 0
Do
Line Input #FileNumber, Data
Ctr = Ctr + 1
Worksheets("Х").Cells(Ctr, 1).Value = Data
Loop While EOF(1) = False
Close #FileNumber
'Worksheets("Х").Select
ActiveWorkbook.Worksheets("Х").Sele ct
Cells(1, 1).Resize(Ctr, 1).TextToColumns _
Destination:=Worksheets("Х").Range( "A1"), _
DataType:=xlDelimited, Comma:=True, FieldInfo:=Array( _
Array(1, xlGeneralFormat), Array(2, xlGeneralFormat), _
Array(3, xlGeneralFormat), Array(4, xlGeneralFormat))
ActiveWorkbook.Worksheets("Х").Sort .SortFields.Clear
ActiveWorkbook.Worksheets("Х").Sort .SortFields.Add Key:=Range("D2:D500") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Х").Sort
.SetRange Range("A1:J500")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Worksheets("Лист1").Select

End Sub
zander вне форума Ответить с цитированием
Старый 12.02.2009, 10:12   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Код:
call Sheets("имя_листа_с_макросом").Имя_макроса
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 12.02.2009, 10:14   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Убери из строки Private Sub CommandButton18_Click()
ключевое слово Private,
а потом с другого листа запускай примерно так:
Код:
Private Sub ИмяКнопки_Click()
    Лист1.CommandButton18_Click
End Sub
Цитата:
Сообщение от viter.alex Посмотреть сообщение
Код:
call Sheets("имя_листа_с_макросом").Имя_макроса
При наличии слова Private этот вариант не сработает.

Последний раз редактировалось EducatedFool; 12.02.2009 в 10:18.
EducatedFool вне форума Ответить с цитированием
Старый 12.02.2009, 10:17   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Все верно.
Нужно создать макрос с этим кодом. Например, Sub Sortirovka() и разместить его в программном модуле. После этого, его можно запускать откуда угодно:
Код:
Private Sub CommandButton18_Click()
    Sortirovka
End Sub
P.S. Ваш код я не разбирал (т.к.Вас устраивает). Но советую первой строкой запретить обновление экрана (Application.ScreenUpdating = False).
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 12.02.2009, 10:31   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В Вашем макросе можно заменить код
Код:
    ThisFile = "C:\input\L.txt"
    Worksheets("Х").Cells.Clear
    FileNumber = FreeFile
    Open ThisFile For Input As #FileNumber
    Ctr = 0
    Do
        Line Input #FileNumber, Data
        Ctr = Ctr + 1
        Worksheets("Х").Cells(Ctr, 1).Value = Data
    Loop While EOF(1) = False
    Close #FileNumber
    'Worksheets("Х").Select
    ActiveWorkbook.Worksheets("Х").Select
    Cells(1, 1).Resize(Ctr, 1).TextToColumns _
            Destination:=Worksheets("Х").Range("A1"), _
            DataType:=xlDelimited, Comma:=True, FieldInfo:=Array( _
            Array(1, xlGeneralFormat), Array(2, xlGeneralFormat), _
            Array(3, xlGeneralFormat), Array(4, xlGeneralFormat))
на что-то вроде этого:
Код:
    Application.ScreenUpdating = True: ThisFile = "C:\input\L.txt"
    Workbooks.OpenText Filename:=ThisFile, DataType:=xlDelimited, Comma:=True
    ActiveSheet.Cells.Copy ThisWorkbook.Worksheets("Х").[a1]
    ActiveWorkbook.Close False
Пожалуй, будет работать побыстрее...
EducatedFool вне форума Ответить с цитированием
Старый 12.02.2009, 13:04   #6
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Да работает, но сортирвки нет. А мне нужно в формате от Я до А
zander вне форума Ответить с цитированием
Старый 12.02.2009, 13:09   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Чем "играть в футбол", прикрепите файл (фрагмент) и подробно опишите, что нужно. Все вопросы будут быстро сняты.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 12.02.2009, 19:51   #8
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Спасибо! Разобрался самостоятельно
zander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как запустить макрос из ячейки? Maxx Microsoft Office Excel 8 15.04.2009 15:47
Как сделать макрос в WORD и описать его алгоритм ещё prikolist Microsoft Office Word 2 21.11.2008 13:19
как запустить программу? GothicMet Помощь студентам 3 04.10.2008 18:07
Как запустить макрос при изменении другой книги Excel? Град Microsoft Office Excel 12 10.06.2008 10:01
Как запустить приложение, дождаться его исполнения и только потом выполнять код? il76 Win Api 6 19.07.2007 14:00