Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)

Модерирует : ShIvADeSt

ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 23-04-2007 | Исправлено: JekG, 22:32 10-01-2010
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LerOK777
    Смотря что Вы собираетесь дальше делать с этой ссылкой. Широкие возможности работы с файлами и папками можно реализовать через FileSystemObject.
     
    Добавлено:
    XOPEK HAPKOMAH
    Если требуется выбрать несколько файлов (не открывать), то можно использовать, например код

    Код:
    Sub SelectFiles()
     
        Dim i As Integer, Msg As String
        With Application.FileDialog(msoFileDialogFilePicker)
            .InitialFileName = "C:\"
            .Title = "Select File(s)"
            .Show
            If .SelectedItems.Count = 0 Then Exit Sub
             
            For i = 1 To .SelectedItems.Count
                Msg = Msg & .SelectedItems(i) & vbCrLf
            Next
     
            MsgBox Msg
        End With
     
    End Sub

    В результате выполнения, получим коллекцию Application.SelectedItems, которая включает пути и имена выбранных Вами файлов. В дальнейшем используем ее в общем порядке. Для примера, в коде выводится окно сообщения с выбранными файлами.
    Или я что не так понял?
     
    P.S. Если же имена файлов известны заранее, или находятся, например, на листе книги, то кто Вам не дает создать, например, массив или новую коллекцию из этих имен?

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 14:36 08-07-2008 | Исправлено: SAS888, 15:00 08-07-2008
    XOPEK HAPKOMAH



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888
    О да, это то что надо!

    Всего записей: 24 | Зарегистр. 19-07-2007 | Отправлено: 17:17 08-07-2008
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    отвечаю на вопрос, заданный в другой теме

    Цитата:
    Хотелось бы создать специальную кнопочку на первом(главном)листе-удаление пустых строк.Чтобы после занесения новых данных из EXCEL заявки в EXCEL таблицу,гажать на нее и удалить все пустые ненужные строки.И автоматически сформировалось бы нужное количество остальных листов...  
    но как написать такое макрос?Как он будет считать какие именно пустые ....может,по первым трем столбцам(Ф.И.О.)проверяет их.если пучтсые,то удаляет всю строку...  

    Написать такой макрос не сложно. Но, считать, какие именно пустые (на Ваш взгляд ;-) — решать именно Вам... я, если честно, не понимаю, почему надо пустые строчки удалять - их же 65 тысяч :-))
    и листы создавать - имена какие им давать - по ФИО? или просто "Лист 2", "Лист 3" ... ?
    и последнее - было бы неплохо, если бы выложили пример Вашего XLS файла (лучше запакованного) на какой-нибудь хостинг (rapidshare.com, ifolder.ru, zalil.ru, mytempdir.com), а сюда опубликовали ссылочку на выложенный пример...

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 20:37 08-07-2008
    Nika7

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вот ссылка на файл:
    http://ifolder.ru/7272201
    Конкретно в моем файле имеется 20 готовых строк,а введено всего 19 человек.(Т.е. мы можем ввести и меньшее количество людей,соответственно будет больше лишних пустых строк)Как я понимаю,нужно удалять пустые только в этом пределе.Допустим,что будет проверяться на наличие в ячейках ФИО,если таковые отсутствуют,то эта строка считается пустой и удаляется.
    Листы без названий.Каждый лист соотвествует каждому человеку в списке на первом листе.Вот.
     
    Добавлено:
    Да!Для снятия защиты со страниц пароль-"kk"(на английском)
    ...спасибо.

    Всего записей: 5 | Зарегистр. 08-07-2008 | Отправлено: 23:07 08-07-2008
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nika7
    Удалить пустые строки в оговоренном Вами диапазоне можно, например, выполнив макрос

    Код:
    Sub DelRows()
     
        Dim x As Range, i As Long
        Application.ScreenUpdating = False
        With Sheets("D")
            Set x = .Cells.Find(what:="ИТОГО:", LookAt:=xlWhole)
            For i = x.Row - 2 To 8 Step -1
                If .Cells(i, "B") = "" Then .Rows(i).Delete
            Next
        End With
     
    End Sub

    Отыскиваем последнюю строку Вашей таблицы по ключевому слову "ИТОГО:" (есть оно или нет - не проверяем, т.е. по умолчанию - есть). Затем, снизу вверх (чтобы не нарушать примененный цикл) удаляем строки в которых в столбце ФИО пусто.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 05:59 09-07-2008
    oji



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, помогите, плиз, решить такую задачку:
    Есть список файлов Excel, в каждом из них необходимо найти (во втором столбце) строку "От Имя Контрагента", и справа от неё еще одну такую же, потом из обеих строк вырезать "От ", найти строку, начинающуюся на "Мы, нижеподписавшиеся" (она выше) и заменить её на сборку из 3 констант и имён контрагентов. Пока что получилось следующее "чудо", в котором не могу запустить поиск.
     
     

    Код:
    Sub AktRemake()
    Const str1 = "Мы, нижеподписавшиеся, _______________ "
    Const str2 = " _______________________, с одной стороны, и ________________ "
    Const str3 = " _______________________, с другой стороны, составили настоящий акт."
    Dim contr1 As String
    Dim contr2 As String
    Dim FileList As Variant
    Dim wbCurrent As Workbook
    Dim shCurrent As Worksheet
    Dim i As Integer
     
    On Error GoTo 0
    With Application
        FileList = .GetOpenFilename("Excel Files (*.xls), *.xls", , "Выберите файлы", , True)
        If Not IsArray(FileList) Then End
    End With
     
    For i = LBound(FileList) To UBound(FileList)
        Set wbCurrent = Workbooks.Open(FileList(i), ReadOnly:=False)
         For Each shCurrent In wbCurrent.Worksheets
         
     
         Next
         
        wbCurrent.Save
        wbCurrent.Close
      MsgBox FileList(i)
    Next
     
     
     
    End Sub

    Всего записей: 181 | Зарегистр. 21-09-2004 | Отправлено: 08:42 09-07-2008
    LerOK777

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888, Дело в том, что нужно получить данные из ячеек нескольких документов,желательно не открывая их

    Всего записей: 6 | Зарегистр. 01-07-2008 | Отправлено: 14:29 09-07-2008
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LerOK777
    Если адреса ячеек известны - без проблем.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 14:45 09-07-2008
    nopoxz

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли такое:
     
    из эксела запускаю файл ворда, он открывается, распечатывается и закрывается?
     
    код в эксел на открытие ворда:

    Код:
     
    Sub OpenWordDoc()
        Set wrdApp = CreateObject("Word.Application")
        wrdApp.Visible = True
        Set wrdDoc = wrdApp.Documents.Open("c:\rj.doc")
    End Sub
     

     
    код в ворде на распечатывание и закрытие:

    Код:
     
    Sub pp()
    ActiveDocument.PrintOut
    Dim obj As Word.Application
    Set obj = Word.Application
    obj.Quit
    Set obj = Nothing
    End Sub
     

     
    Вопрос: можно ли как-то объединить это дело?  
     
    Может есть вариант, при котором ексел откроет ворд и запустит макрос "pp"?  
    Или коды макросов обьединить в 1 макрос в экселе без прописывания макроса в ворде? Хотел сделать макрос в ворде на AutoExec, но при этом варианте все открываемые файлы ворда будут распечатываться и закрываться

    Всего записей: 38 | Зарегистр. 02-07-2008 | Отправлено: 16:43 09-07-2008
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nopoxz
    Ну, так объедините и все. Примерно так:

    Код:
    Sub Prn()
     
        Dim wdApp As Object, wdDoc As Object
         
        Set wdApp = CreateObject("Word.Application")
        Set wdDoc = wdApp.Documents.Open("C:\rj.doc")
         
        wdDoc.PrintOut
        wdApp.Quit
     
        Set wdApp = Nothing
        Set wdDoc = Nothing
         
    End Sub

    Т.к. мы открываем, печатаем и закрываем, то wdApp.Visible = True - это лишнее. Зачем?

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 05:37 10-07-2008
    oji



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    продвинулся чуть дальше, но проблема теперь с выбором диапазона. Мне нужно 10 раз расширить его вниз (xlDown), но и в цикле, и 10ью строками, срабатывает только одна команда .Range(Selection, Selection.End(xlDown)).Select, как будто каждый раз сбрасывается в начало.
     

    Код:
    Sub AktRemake()
    Const str1 = "Мы, нижеподписавшиеся, _______________ "
    Const str2 = " _______________________, с одной стороны, и ________________ "
    Const str3 = " _______________________, с другой стороны, составили настоящий акт."
    Dim contr1 As String
    Dim contr2 As String
    Dim FileList As Variant
    Dim wbCurrent As Workbook
    Dim i As Integer, j As Integer
     
    On Error GoTo 0
    With Application
        FileList = .GetOpenFilename("Excel Files (*.xls), *.xls", , "Выберите файлы", , True)
        If Not IsArray(FileList) Then End
    End With
     
    For i = LBound(FileList) To UBound(FileList)
        Set wbCurrent = Workbooks.Open(FileList(i), ReadOnly:=False)
        With wbCurrent.Worksheets(1)
            .Range("A1").Select
            .Range(Selection, Selection.End(xlToRight)).Select
            .Range(Selection, Selection.End(xlDown)).Select
        End With
           
    '    wbCurrent.Save
    '    wbCurrent.Close
    Next
    End Sub

     
    Задача по-прежнему следующая:
    Есть список файлов Excel, в каждом из них необходимо найти (во втором столбце) строку "От Имя Контрагента", и справа от неё еще одну такую же, потом из обеих строк вырезать "От ", найти строку, начинающуюся на "Мы, нижеподписавшиеся" (она выше) и заменить её на сборку из 3 констант и имён контрагентов.
     
    Буду рад любым советам. В VBA совсем зелёный новичок.

    Всего записей: 181 | Зарегистр. 21-09-2004 | Отправлено: 07:18 10-07-2008
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    oji
    1) Что значит "
    Цитата:
    справа от неё
    или
    Цитата:
    она выше

    2) Ищем "от " и дальше что угодно? Т.е. такая строка только раз встречается в Этом столбце?
     
     

    Цитата:
    Мне нужно 10 раз расширить его вниз (xlDown), но и в цикле, и 10ью строками

    Тоже не понятно, чего Вы хотите. Какой диапазон "расширять"?
    Интерпретационные методы .End(xl...) - зависят от того, как заполнены ячейки.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 08:37 10-07-2008 | Исправлено: SAS888, 08:42 10-07-2008
    oji



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Код:
    Sub AktFix()
    Const str1 = "Мы, нижеподписавшиеся, _______________ "
    Const str2 = " _______________________, с одной стороны, и ________________ "
    Const str3 = " _______________________, с другой стороны, составили настоящий акт."
    Dim contr1 As String
    Dim contr2 As String
    Dim FileList As Variant
    Dim wbCurrent As Workbook
    Dim i As Integer, j As Integer
     
    On Error GoTo 0
    With Application
        FileList = .GetOpenFilename("Excel Files (*.xls), *.xls", , "Выберите файлы", , True)
        If Not IsArray(FileList) Then End
    End With
     
    For i = LBound(FileList) To UBound(FileList)
        Set wbCurrent = Workbooks.Open(FileList(i), ReadOnly:=False)
        With wbCurrent.Worksheets(1)
            .Range("A1").Select
            .Cells.Find(What:="От ", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True, _
            SearchFormat:=False).Activate
            contr1 = ActiveCell
            Cells.FindNext(After:=ActiveCell).Activate
            contr2 = ActiveCell
            .Range("A1").Select
            .Range("A1").Select
            .Cells.Find(What:="Мы, ", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True, _
            SearchFormat:=False).Activate
             
            ActiveCell.Value = str1 + contr1 + str2 + contr2 + str3
        End With
        wbCurrent.Save
        wbCurrent.Close
    Next

     
     
    всё, почти дописал. Сделал немного топорно, но работает Остался один вопрос, как строку в стриноговой переменной вида "От Иванов Иван Иванович" поменять на просто "Иванов Иван Иванович"?
     
    SAS888, справа от неё, значит, что есть строка "От Иванов Иван Иванович", а справа от неё, в следующем столбце, есть строка "От Петров Пётр Петрович".
     
    Да, строка "От " встречается только один раз в данном столбце. По крайней мере, в тех документах, что мне доступны.
     
    По поводу заполнения ячеек — в курсе, экспертным путём выяснено, что структура документа требует 10 раз расширить диапазон вниз. Впрочем, это всё уже не нужно, т.к. решено другим, топорным способом.

    Всего записей: 181 | Зарегистр. 21-09-2004 | Отправлено: 09:22 10-07-2008
    m_mario

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, как можно из vba редактировать формулы, созданные в редакторе формул.
    Можно ли это вообще и где об этом можно прочитать.
    Спасибо

    Всего записей: 1 | Зарегистр. 08-07-2008 | Отправлено: 10:17 10-07-2008
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    oji
    Код цикла обработки я бы написал так:

    Код:
    For i = LBound(FileList) To UBound(FileList)
            Set wbCurrent = Workbooks.Open(FileList(i), ReadOnly:=False)
            With wbCurrent.Worksheets(1)
                Set x = .Cells.Find(What:="От ", LookAt:=xlPart)
                Set y = .Cells.Find(What:="Мы, ", LookAt:=xlPart)
                [A1] = str1 & Right(x.Value, Len(x.Value) - 3) & str2 + Right(y.Value, Len(x.Value) - 4) & str3
            End With
            wbCurrent.Save
            wbCurrent.Close
        Next

    В описание типов переменных нужно добавить Строку "Dim x As Range, y As Range"
    Надо вставлять условие, найдено значение или нет - дело Ваше.
     
    Добавлено:
    m_mario
    Если, например, требуется написать формулу в ячейке, то можно так: [A1].Formula = ... Далее, пишем формулу на VBA, используя Application.WorkSheetFunction.
    А если требуется выполнить редактирование существующей в ячейке формулы, то можно, например, в строковую переменную поместить саму формулу : MyFormula = [A1].Formula, выполнить редактирование этой строки и результат внести в ячейку : [A1].Formula = MyFormula.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 10:42 10-07-2008 | Исправлено: SAS888, 10:49 10-07-2008
    oji



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888, спасибо большое.
     
    Всё уже сделал, но выявил баг — если вызываю:
     

    Код:
            wbCurrent.Save  
            wbCurrent.Close

     
    то в сохраняемом файле сбиваются объединения ячеек (просто разбиваются), если же не вызывать их, а сохранять вручную, то всё нормально. кто-нибудь сталкивался с таким?

    Всего записей: 181 | Зарегистр. 21-09-2004 | Отправлено: 11:01 10-07-2008
    CatF

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здаствуйте.
     
    У меня имеется две таблицы на разных листах с фамилиями сотрудников, причем в 1 таблице (на 1 листе) фамилий значительно больше чем во 2 таблице (находящейся на 2 листе). Мне нужен макрос который будет бывирать фамилии сотрудников из 1 таблице, которых нету во 2 и записывать их в 3 таблицу (находящююся на 3 листе). Возможно ли это както реализовать?

    Всего записей: 6 | Зарегистр. 10-07-2008 | Отправлено: 14:08 10-07-2008
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пусть фамилии на листах 1 и 2 находятся в столбце "A". Тогда получить требуемые Вами фамилии на листе 3 можно, выполнив следующий макрос:

    Код:
    Sub Sel()
     
        Dim x As Range, i As Long
        Sheets(3).Cells.ClearContents: Sheets(1).Activate
        With Sheets(3)
            For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
                Set x = Sheets(2).Columns("A").Find(Cells(i, "A"), LookAt:=xlWhole)
                If x Is Nothing Then .Cells(.Cells(Rows.Count, "A").End(xlUp).Row + 1, "A") = Cells(i, "A")
            Next
            .Activate
        End With
             
    End Sub

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 16:40 10-07-2008
    alin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky, Yuk и The okk.
    Больше года назад помогли написать этот код, сильно благодарен им за это, т.к он всё это время работал без перебоев!

    Код:
    strDate = Day(Now()) & "." & Month(Now())
    intHour = Hour(Now()) + 1
     
    Set objExcel = CreateObject("Excel.Application")
     
    objExcel.Workbooks.Open "test.xls"
    With objExcel.ActiveWorkbook
        If .Sheets(1).Name <> strDate Then ' создаем лист если его не существует
            .ActiveSheet.Copy .Sheets(1)
            .Sheets(1).Name = strDate
            ' перенос данных с 24:00 на 0:00
            .Sheets(1).Range("E3:E25").Value = .Sheets(1).Range("AD3:AD25").Value
            .Sheets(1).Range("E27:E31").Value = .Sheets(1).Range("AD27:AD31").Value
            ' очистка области
            .Sheets(1).Range("F3:AD25", "F27:AD31").ClearContents
        End If
         
        With objExcel.ActiveWorkbook.Sheets(1)
            ' в зависимости от часа заполняем нужные области
            .Range(.Cells(3, 6 + intHour), .Cells(18, 6 + intHour)).Value _
                = .Range("AE3:AE18").Value
            .Range(.Cells(22, 6 + intHour), .Cells(25, 6 + intHour)).Value _
                = .Range("AE22:AE25").Value
            .Range(.Cells(27, 6 + intHour), .Cells(31, 6 + intHour)).Value _
                = .Range("AE27:AE31").Value
        End With
         
        .Close True
    End With
     
    Set objExcel = Nothing

    Сейчас рабочая программа изменилась и возникли трудности, с которыми спешу поделится.
    Ссылки которые сейчас копируются берутся не из сторонней программы, а из базы SQL. В следствии чего в EXСEL,  добавлена надстройка, позволяющая получать ссылки из базы.
    Программа (test.vbs с данным кодом) запускается в фоновом режиме и при открытии данные с базы не получаются.
    Пробовал поставить задержку WScript.Sleep не помогло. Выяснилось, что книга открывается, но данные в ссылках не обновляются, т.к надстройка вроде как подключена, но не идёт обновление данных.
    Помогите, каким образом мне можно подправить ситуацию.
    Заранее благодарен!

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 21:35 10-07-2008 | Исправлено: alin, 16:13 16-07-2008
    NaThAlieK

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    здрасти!
    помогите кто может, пожалуйста!  
    вопрос такой: в UserForm есть Spreadsheet, который содержит список частей
    у меня есть код, который находит часть и вносит её количество в столбик,согласно данным которые user внес в InputBox.
    мне нужно чтобы курсор перемещался на ту строчку куда было внесено число.
    вот мой код:
    кодПодробнее...
    заранее спасибо

    Всего записей: 7 | Зарегистр. 07-06-2008 | Отправлено: 23:28 12-07-2008
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)
    ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru