Страница 2 из 2

Re: Переход между книгами при активной UserForm VBA

Добавлено: 11 май 2009, 00:27
vint
Безгранично благодарен за пример ! (теперь на свой код сдыдно смотреть)
Но с сортировкой без использования Select - всё сдаюсь, не выходит каменный цветок.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
да и вот это ка сделать грамотно без селектов

Код: Выделить всё

Worksheets("ТМЦ").Select 'выбираем найденную строку на листе и копируем данные этого ТМЦ
Range("B" & iRow151 & ":" & "F" & iRow151).Select 'выбираем диапазон с "B" по "F"
Selection.Copy
Worksheets(naz).Select 'выбираем временный лист и вставляем в диапазон с "B" по "F"
Application.ActiveWorkbook.Worksheets(naz).Range("B" & iRow154 & ":" & "F" & iRow154).Activate
ActiveSheet.Paste 'вставить в диапазон с "B" по "F"
P.S. зараннее извиняюсь, за программирование взялся совсем недавно поэтому мои коды похожи на примеры из литературы, всякие хитрости и оптимизации кода мало где описываються приходиться лазить в инете и учиться у опытных людей
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Упс извиняюсь вопрос копирования вставки снимаю, тут всё просто , одной строкой без селектов и активаций.
Хелп по поводу сортировку без Вас не справлюсь.!!!!

Re: Переход между книгами при активной UserForm VBA

Добавлено: 11 май 2009, 02:00
EducatedFool

Код: Выделить всё

Sub [B]Сортировка[/B]()
    'сортируем лист "КР" по колонке "C" с ФИО
    With Worksheets("КР")
          [B].UsedRange.Sort Key1:=.UsedRange.Cells(3), Header:=xlGuess[/B]
    End With
End Sub
PS: Лучше явно указать параметр Header - Вы ведь изначально знаете, есть ли строка заголовка на этом листе.
Если её нет - то ставим xlNo, если есть - xlYes, и только если заранее неизвестно - то xlGuess

Re: Переход между книгами при активной UserForm VBA

Добавлено: 11 май 2009, 16:17
vint
ничего не понимаю, Ваш код прекрасно работает а который я делал почти такой же не хочет :confused:

Код: Выделить всё

With Worksheets("ТМЦ")
.UsedRange.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:= _
   xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
End With
вся проблема получаеться вот здесь Key1:=.UsedRange.Cells(3) ???
ну да ладно главное что теперь всё в порядке.
Уважаемый EducatedFool ещё раз благодарю за подробные примеры и пояснения к ним, а также выражаю признательность Naeel Maqsudov за новый для меня способ скрытия листов с информацией от юзера.
Придётся переделать весь код базы используя скрытие листов исключив все Select и Activate и тогда свойство ShowModal можно спокойно ставить FALSE (с чего и начинался топик)
Огромное всем спасибо за помощь.

Re: Переход между книгами при активной UserForm VBA

Добавлено: 11 май 2009, 16:33
EducatedFool
а который я делал почти такой же не хочет
перед Range("C1") надо поставить точку, и всё будет работать...

Range("C1") без точки ссылается на ячейку С1 активного в данный момент листа
.Range("C1") ссылается на ячейку С1 листа Worksheets("ТМЦ")

Re: Переход между книгами при активной UserForm VBA

Добавлено: 11 май 2009, 17:34
vint
вот теперь всё понятно!
огромное спасибо !!!
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Снова прошу Вас помощи !
В связи с тем что теперь работа моего макроса может выполняться и в момент когда активна другая книга (не база) пришлось поменятьь везде ActiveWorkbook на ThisWorkbook с целью явного указания в какой книге работать но столкнулся с очередной непонятной мне проблеме, почему эта конструкция создаёт лист не в книге базы а в той которая активна

Код: Выделить всё

    With ThisWorkbook
    .Worksheets.Add.Name = unnom                               'добавляем новый лист "ТМЦ"
    .Worksheets(CStr(unnom)).Move After:=Sheets(Sheets.Count)  'перемещаем в конец
    .Worksheets(CStr(unnom)).Visible = 2                       'скрываем лист
    End With
да и ещё скрывать нехочет
Думаю что и здесь будет ошибка

Код: Выделить всё

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ThisWorkbook.Worksheets(CStr(unnom51)).Visible = -1 'перед удалением отображаем лист
    ThisWorkbook.Worksheets(CStr(unnom51)).Delete 'преобразовываем числовое имя листа к типу String
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
пока не могу проверить не даёт добраться до него 1-ая ошибка
что не так подскажите пожалуста :confused:
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Вопрос снимаю разобрался !

Код: Выделить всё

Application.ScreenUpdating = False
ThisWorkbook.Worksheets.Add.Name = unnom    'добавляем новый лист "ТМЦ" 'перемещаем в конец
ThisWorkbook.Worksheets(CStr(unnom)).Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Worksheets(CStr(unnom)).Visible = 2                       'скрываем лист
Application.ScreenUpdating = True
надо явно указывать где перемещать новый лист
со вторым кодом всё нормально
и в модуле сортировки диапазона тоже добавить

Код: Выделить всё

ThisWorkbook.
Всем спасибо.