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

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

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

ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

RUSmafia



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами 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.
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов

  • Всего записей: 556 | Зарегистр. 31-07-2002 | Отправлено: 21:40 14-10-2004 | Исправлено: lucky_Luk, 20:44 13-04-2007
    ifaust

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ок, получилось. перносим эту строку выше. в предыдущем посте код исправил.
    продолжая оттачивать код, возникли следующие вопросы:
    1. что нужно прописать, чтобы окрашивались не просто цифровые ячейки, а только процентные? наверное, что-то здесь исправить:
    If IsNumeric(cell.Value) And Not IsEmpty(cell) Then
     
    2. не удаётся слить три файла из програмного кода VBA, и даже просто запустить батовский файл. перепробывал следующие варианты, но не один не проходит
     
       ' Сохранение HTML-кода в файл  
        dirname = ActiveSheet.Cells(35, 2).Value  
        name = dirname + "\webreport" + ".html"  
       Open name For Output As 1  
       Print #1, strOut  
       Close 1  
         
       'Shell "copy " & path1 & file1 & "+" & path2 & ...  
       Shell "copy " & dirname + "\top" + ".html" & "+" _  
       & dirname + "\webreport" + ".html" & "+" _  
       & dirname + "\bottom" + ".html" & " ireport.html"  
         
       'Shell "copy " & dirname & Top.HTML & "+" _  
       & dirname & webreport.HTML
     
       Shell dirname + "\merge.bat"
       Shell "cmd.exe  C:\merge.bat"

    Всего записей: 16 | Зарегистр. 08-04-2006 | Отправлено: 10:20 09-08-2006
    SERGE_BLIZNUK

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

    Цитата:
     что нужно прописать, чтобы окрашивались не просто цифровые ячейки, а только процентные? наверное, что-то здесь исправить:  
    If IsNumeric(cell.Value) And Not IsEmpty(cell) Then  

    а попробуйте так:
      if cell.NumberFormat = "0.00%" Then ...

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 13:24 09-08-2006
    Yuk



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

    Цитата:
    а попробуйте так:
      if cell.NumberFormat = "0.00%" Then ...

    Или так:
    If InStr(1, cell.NumberFormat, "%", 1) > 0 Then

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:44 09-08-2006
    ifaust

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ещё одна идейка, только не помню, как узнать, если число делится без остатка. Вообщем
    если номер строки чётный/нечётный, то фон ячейки окрашивается в определённый цвет. В HTML это выглядет так:
    <p><span style="background-color: #FFCC99">hello world</span></p>

    Всего записей: 16 | Зарегистр. 08-04-2006 | Отправлено: 18:49 09-08-2006
    Yuk



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

    Цитата:
    не удаётся слить три файла из програмного кода VBA

    У меня получилось так:
    Shell "cmd /c copy C:\TEMP\file1.txt+C:\TEMP\file2.txt+C:\TEMP\file3.txt C:\TEMP\fileall.txt"
     
    У тебя пробелов в названиях файлов/директорий нет?
     
     
     
    Добавлено:

    Цитата:
    как узнать, если число делится без остатка

    If cell.Row Mod 2 = 0 Then

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:53 09-08-2006
    ifaust

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прописал, но все, даже отрицательные процентные результаты, окрашиваются в зелёный цвет.
     
          ' Так можно покрасить ячейки в зависимости от значения
          If IsNumeric(cell.Value) And Not IsEmpty(cell) Then
             
             ' в зеленый
             If InStr(1, cell.NumberFormat, "%", 1) > 0 Then
             strCellText = "<font color=#008000>" & strCellText & "</font>"
     
             ' в красный
             ElseIf InStr(1, cell.NumberFormat, "%", 1) < 0 Then
             strCellText = "<font color=#FF0000>" & strCellText & "</font>"
     
            End If
           End If

    Всего записей: 16 | Зарегистр. 08-04-2006 | Отправлено: 17:34 10-08-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ifaust
    Ты хоть посмотрел описание функции InStr? Она возвращает позицию 1-го найденного символа в строке, в нашем случае "%". Если не найдено, возвращает 0. То есть код If InStr(1, cell.NumberFormat, "%", 1) > 0 Then определяет, ячейка отформатирована как процент или нет. <0 здесь вообще не имеет смысла. Ты хотел проценты? Добавь это условие в свой предыдущий код.
    Ну почему все надо разжевать и в рот положить?

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:22 10-08-2006
    ifaust

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Признаюсь, функция наворочена для меня, чтобы так с ходу в англоязычном хэлпе понять что к чему
     
    Следующий релиз кода:
    инструкция по пременению:
    1. пишем в ячейке B35 путь рабочей папки
    2. кидаем туда файлы top.html и bottom.html с началом и концом кода сайта соответственно
    3. в данном случае будет экспортирован диапазон "B1:E31". исправляем если нужно
    4. выделяем диаграмму для экспорта. если её нет, то и не надо.
     
    Подробнее...
     
    В целях дальнеёшего усовершенствования кода, следующие вопросики:
    1. можно ли с помощию Excel подключиться к серверу по FTP и закачать готовую страничку, график автоматически? если да, скиньте ссылки на источники, исходники.
    2. график определяется как "Диагр.3". но автоматически, этот объект не экспортируется в gif, надо его выделять. отсюда вытекает вопрос... спсб.

    Всего записей: 16 | Зарегистр. 08-04-2006 | Отправлено: 18:54 10-08-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ifaust
    Извиняюсь, что не сдержался. А что в русском экселе VBA хелп на аглийском? Или это английский эксел?
     

    Цитата:
    1. можно ли с помощию Excel подключиться к серверу по FTP и закачать готовую страничку, график автоматически? если да, скиньте ссылки на источники, исходники.

    http://www.bygsoftware.com/Excel/VBA/ftp.htm
    Принцип тот же, что ты используешь для объединения файлов, то есть через Shell. Если имя файла не меняется, можно не городить огород, а создать батник заранее.  
    Ключевой момент:
    Код:
    ftp -s:file.txt
    где file.txt  - файл с ftp командами.
    Но код все таки посмотри.
     
     

    Цитата:
    2. график определяется как "Диагр.3". но автоматически, этот объект не экспортируется в gif, надо его выделять.


    Код:
    For Each ch In ActiveSheet.ChartObjects
        ch.Chart.Export "c:\temp\" & ch.Name & ".gif", "GIF"
    Next

    Не забудь также код, чтобы вставуть график в хтмл.
     

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 20:15 10-08-2006
    SERGE_BLIZNUK

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

    Цитата:
    Извиняюсь, что не сдержался.
    извиняюсь за оффтоп - это вы по поводу  
    If InStr(..) > 0 Then    
    ElseIf InStr( ) < 0 Then ? Стыдно признаться, но я сам ржал и еле сдержался, чтобы не кинуться объяснять...
     
     

    Цитата:
    А что в русском экселе VBA хелп на аглийском

    Да. включая русский Excel 2003/ И насколько я помню - русского никогда не было. Они (разработчики, локализаторы и прочие микрософтовцы) считают (и возможно справедливо), что обычные пользователи не лезут в редактор макросов, а если залезли - будьте добры, читайте на английском..
     
    ну и ещё прооффтоплю.
    только что на натахаус опубликовали книжку: Использование макросов в Excel
    Автор: С. Роман
    Издательство: СПб.: Питер
    Год: 2004
    Страниц: 507 с.: ил.
    Формат: DJVU
    Размер: 8.27 MB
    ISBN: 5-94723-584-6
    Подробнее...

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 06:40 11-08-2006
    alin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Огромное спасибо за Код!!!

    Цитата:
    Что должны делать твои кнопки я не понял.  

    Да, с таким кодом теперь и я не знаю, что с ними делать...
    Низкий поклон за поддержку!

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 01:16 12-08-2006
    ScorpionS



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Копирую в буфер таблицу на html-странице (один столбец - цифры).
    Когда вставляю в Excel текст из буфера (Правка -> Вставить), то цифры распознается нормально и имеют вид 186 588.00, т.е. их формат такой # ##0.00. А когда я создаю элемент управления (кнопку) и записываю ему простой код

    Код:
    Range("A4").Select
    ActiveSheet.Paste

    то эти же цифры вставляются как текст и имеют почему-то вид 186 588.000 и рядом появляется инфо-кнопка с предложенимя: Число сохранено как текст, Преобразовать в число, и т.д. Подскажите, может вместо ActiveSheet.Paste надо как-то по другому записать, чтобы Excel распозавал число как число?

    Всего записей: 141 | Зарегистр. 24-02-2003 | Отправлено: 18:26 12-08-2006 | Исправлено: ScorpionS, 18:27 12-08-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ScorpionS
    пример html страницы можно?

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:47 12-08-2006
    ScorpionS



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Дружище, с удовольствием, но туда доступ по закрытой подписке. Думаю, ты туда попасть наврядли сможешь. Я отправил сохраненную страничку тебе по почте.  

    Всего записей: 141 | Зарегистр. 24-02-2003 | Отправлено: 19:16 12-08-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ScorpionS
    У меня и обычной вставкой не получается.
    Предлагаю вставить в макрос:
    Код:
    For Each c In ActiveSheet.UsedRange
    If IsNumeric(Replace(c.Value, " ", "")) Then
        c.Value = Replace(c.Value, " ", "")
    End If
    Next

    В If блок также можно вставить изменение формата

    Код:
    c.NumberFormat = "some format"


    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 19:48 12-08-2006
    ScorpionS



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

    Всего записей: 141 | Зарегистр. 24-02-2003 | Отправлено: 20:16 12-08-2006
    urodec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня такой вопрос - как программно задать ширину столбца в см?

    Всего записей: 711 | Зарегистр. 17-01-2003 | Отправлено: 11:55 16-08-2006
    RedPromo



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

    Цитата:
     
    Worksheets("Лист1").Columns("A:A").ColumnWidth = 18.00
    или
    Columns("A:A").ColumnWidth = 18.00
     


    Всего записей: 558 | Зарегистр. 05-04-2006 | Отправлено: 13:51 16-08-2006
    urodec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RedPromo
    Вы уверены, что это в СМ? Мне нужно именно в см
     
    Добавлено:
    Нашел...
    http://support.microsoft.com/default.aspx?scid=kb;en-us;Q213422
    Не всего лишь-то ))

    Цитата:
    Sub ColumnWidthInCentimeters()
     
        Dim cm As Single, points As Integer, savewidth As Integer
        Dim lowerwidth As Integer, upwidth As Integer, curwidth As Integer
        Dim Count As Integer
     
        ' Turn screen updating off.
        Application.ScreenUpdating = False
        ' Ask for the width in inches wanted.
        cm = Application.InputBox("Enter Column Width in Centimeters", _
            "Column Width (cm)", Type:=1)
        ' If cancel button for the input box was pressed, exit procedure.
        If cm = False Then Exit Sub
        ' Convert the inches entered to points.
        points = Application.CentimetersToPoints(cm)
        ' Save the current column width setting.
        savewidth = ActiveCell.ColumnWidth
        ' Set the column width to the maximum allowed.
        ActiveCell.ColumnWidth = 255
        ' If the points desired is greater than the points for 255
        ' characters...
        If points > ActiveCell.Width Then
            ' Display a message box because the size specified is too
            ' large and give the maximum allowed value.
            MsgBox "Width of " & cm & " is too large." & Chr(10) & _
                "The maximum value is " & _
                Format(ActiveCell.Width / 28.3464566929134, _
                "0.00"), vbOKOnly + vbExclamation, "Width Error"
            ' Reset the column width back to the original.
            ActiveCell.ColumnWidth = savewidth
            ' Exit the Sub.
            Exit Sub
        End If
        ' Set the lowerwidth and upper width variables.
        lowerwidth = 0
        upwidth = 255
        ' Set the column width to the middle of the allowed character
        ' range.
        ActiveCell.ColumnWidth = 127.5
        curwidth = ActiveCell.ColumnWidth
        ' Set the count to 0 so if it can't find an exact match it won't
        ' go on indefinitely.
        Count = 0
        ' Loop as long as the cell width in is different from width
        ' wanted and the count (iterations) of the loop is less than 20.
        While (ActiveCell.Width <> points) And (Count < 20)
            ' If active cell width is less than desired cell width.
            If ActiveCell.Width < points Then
                ' Reset lower width to current width.
                lowerwidth = curwidth
                ' set current column width to the midpoint of curwidth
                ' and upwidth.
                Selection.ColumnWidth = (curwidth + upwidth) / 2
            ' If active cell width is greater than desired cell width.
            Else
                ' Set upwidth to the curwidth.
                upwidth = curwidth
                ' Set column width to the mid point of curwidth and lower
                ' width.
                Selection.ColumnWidth = (curwidth + lowerwidth) / 2
            End If
            ' Set curwidth to the width of the column now.
            curwidth = ActiveCell.ColumnWidth
            ' Increment the count counter.
            Count = Count + 1
        Wend
    End Sub


    Всего записей: 711 | Зарегистр. 17-01-2003 | Отправлено: 14:19 16-08-2006
    IP



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Помогите  ПЛЫЗЗЗ!!! Скриптиком  для VBA
    Который  из закрытого файла (ИСТОЧНИК) с названием OUTPUT1  из его ячейки А1, импортирetn  СОДЕРЖАНИЕ (Текст) в новую книгу (ПРИЕМНИК) с названием INPUT - В НАЗВАНИЕ ЯРЛЫКА ЛИСТА, там где по умолчанию "Лист1, Лист2 и т.д .  
     
    Чтобы по названию ярлыка у листа файла (ПРИЕМНИКа) было видно какой импорт  получен  
       
    Таких импортов мне нужно 3-10 из разных файлов OUTPUT1, OUTPUT2, OUTPUT3,  в разные листы , т.е. я должен получить разные названия ярлыков в файле (ПРИЕМНИКе) INPUT, которые соответствуют Содержанию Ячеек, например А1, в файлах (ИСТОЧНИКах) OUTPUT1, OUTPUT2, OUTPUT3 ...
     


    ----------
    Счастье -это когда реальность превосходит ожидания!
    Постоянное радужное планирование будущего - индульгенция серого настоящего
    Научить ничему нельзя - можно только научиться!

    Всего записей: 316 | Зарегистр. 15-05-2004 | Отправлено: 15:08 17-08-2006
       

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA
    ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru