Перейти к содержимому

Фотография

Excelпомощь, консультации...


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 914

#381
Nigrum cygnum

Nigrum cygnum
  • В доску свой
  • 1 201 сообщений

Вот нашла какие то http://www.intuit.ru...es/536/392/info Пойдут?

 

Вы английский знаете?

Если да - чаще используйте F1 при написании кода - помогает не на 100%, но достаточно хорошо.

Второй вариант - для написания кода и понятия синтаксиса используйте "Запись макросов".

 

По книгам - хорошая основа, и очень понятная -

Дж. Уокенбах "Проф програм на ВБА" - западный взгляд на обучение программированию

Титов В.Л. - Программирование на VBA. Учебно-методическое пособие - 2008 - коротко и ясно. Всё на примерах.

Слепцова Л. Д. - Программирование на языке VBA. Самоучитель (Самоучитель). - много информации, много теории.

 

Все эти книги можно найти в интернете (в ознакомительных целях).

 

Я только начинающий, который автоматизирует рутинные свои задачи, поэтому подсказал свои методы. В целом в интернете много информации про это, можно было бы и поискать.


Сообщение отредактировал Nigrum cygnum: 19.09.2013, 19:59:55

  • 0

#382
Заинтересованная

Заинтересованная
  • В доску свой
  • 2 431 сообщений
Спасибо, согласна в интернете много информации, но хотелось найти быстрее и эффективнее
  • 0

#383
Daulet.tech

Daulet.tech
  • Завсегдатай
  • 239 сообщений
Вот нашла какие то http://www.intuit.ru...es/536/392/info Пойдут?

Можете и здесь http://on-line-teach.../vba/index.htmlhttp://www.msoffice..../faq/macros.htm


Сообщение отредактировал DauletAhamanov: 20.09.2013, 11:26:36

  • 0

#384
Nigrum cygnum

Nigrum cygnum
  • В доску свой
  • 1 201 сообщений

Вопрос такой: Как ведет себя таблица при общем доступе с учетом идентификаторов?

 

У меня есть таблица, нужно чтобы люди ее заполняли, но при этом не видели значения других людей. Для этого я создал ID на каждого человека. Но если один человек откроет эту таблицу и введет свой ID, а тем временем в эту же таблицу зайдет другой - что с ней будет?

Можно ли сделать так, чтобы при открытой у одного человека таблице, у другого она не открывалась?

 

Приложил файл - диапазон ИД от 1 до 7 и полный - 11

Прикрепленные файлы

  • Прикрепленный файл  KPI.rar   31,39К   Количество загрузок: 148

  • 0

#385
Мэс

Мэс
  • В доску свой
  • 4 926 сообщений

Вопрос такой: Как ведет себя таблица при общем доступе с учетом идентификаторов?

 

У меня есть таблица, нужно чтобы люди ее заполняли, но при этом не видели значения других людей. Для этого я создал ID на каждого человека. Но если один человек откроет эту таблицу и введет свой ID, а тем временем в эту же таблицу зайдет другой - что с ней будет?

Можно ли сделать так, чтобы при открытой у одного человека таблице, у другого она не открывалась?

 

Приложил файл - диапазон ИД от 1 до 7 и полный - 11

 

Весело у вас, как я погляжу.


  • 0

#386
Зул

Зул
  • Свой человек
  • 620 сообщений

Весело у вас, как я погляжу.

Человеку с молотком все вокруг кажется гвоздями.

Тут уникумы 2+2 на субд считали
  • 1

#387
Nigrum cygnum

Nigrum cygnum
  • В доску свой
  • 1 201 сообщений

 

Человеку с молотком все вокруг кажется гвоздями.


Тут уникумы 2+2 на субд считали

 

 

Весело у вас, как я погляжу.

 

 

Согласен с Вами, это не совсем верно, но ведь VBA может многое  :dandy:

Надо бы SQL изучить чтобы сделать это на др продукте, но отсутствие тех образования пока не даёт. К тому же, обычным людям легче потыкать в экселе, нежели открывать какую-то новую программу и всё тому подобное.

 

И всё же, как быть с общим доступом?


  • 0

#388
технолог

технолог
  • Завсегдатай
  • 155 сообщений

Приветствую всех знатоков макросов! 

Может кто-нибудь сталкивался с такой задачей. Есть 2 почти одинаковых файла. В каждом более 30 листов. Один находится на сервере, в общем доступе. В него еженедельно заносят информацию сотрудники. Другой - на моем компьютере. Задача - сравнить файлы и выявить изменения за неделю. Написал такой макрос:

 

Sub Сравнение()
    Dim sPathOUT As String
    Dim i As Integer
    Dim iRow As Integer
    Dim iCol As Integer
    Dim a As Integer
    Dim wsCount As Integer
                
    iRowS = 1 'начальная строка
    iRowF = 160 'конечная строка
    iColS = 1 'начальный столбец
    iColF = 36 'конечный столбец
    sPathOUT = "\\ADMIN\Publik\ПРОЕКТЫ\ПРОЕКТЫ на iPub 2013.xlsm" 'путь к файлу
    
    wsCount = Workbooks("Проекты 13 NEW").Worksheets.Count 'кол-во листов в книге
    i = 2 'начальный лист
    a = 2 'начальная строка листа "Сравнение"
    Workbooks.Open (sPathOUT) 'открытие книги для сравнения
    Workbooks("Проекты 13 NEW").Sheets("Сравнение").Activate
           
        For i = 2 To (wsCount - 1) 'цикл по листам
        For iRow = iRowS To iRowF 'цикл по строкам
        For iCol = iColS To iColF 'цикл по столбцам
        
            If Workbooks("Проекты 13 NEW").Sheets(i).Cells(iRow, iCol) <> _
                Workbooks("ПРОЕКТЫ на iPub 2013").Sheets(i).Cells(iRow, iCol) Then
            Cells(a, "B") = Sheets(i).Name
            Cells(a, "C") = iRow
            Cells(a, "D") = iCol
            Cells(a, "E") = Workbooks("Проекты 13 NEW").Sheets(i).Cells(iRow, iCol).Value
            Cells(a, "F") = Workbooks("ПРОЕКТЫ на iPub 2013").Sheets(i).Cells(iRow, iCol).Value
            
            If Cells(a, "B") <> " " Then a = a + 1
            End If
            
        Next
        Next
        Next
                   
        Workbooks("ПРОЕКТЫ на iPub 2013").Saved = True 'закрытие книги
        Workbooks("ПРОЕКТЫ на iPub 2013").Close
      
End Sub
 
Макрос выполняется и происходит заполнение сравнительной таблицы, но в конце выдает ошибку "Tipe mismatch" (Несоответствие типов). Прочитал справку, но не вижу в чем ошибка. Если бы переменные не соответствовали, то думаю, макрос вообще бы не запускался. А так вроде работает, но сравниваемую книгу в конце не закрывает. Сделал два тестовых файлика - макрос работает. И сравнивает, и таблицу заполняет, и 2-ю книгу закрывает.
Может кто-нибудь подскажет, что может вызывать "Tipe mismatch"? А то второй день не могу решить.
 
И еще. Время ожидания работы макроса - около минуты, хотя вроде диапазон небольшой (160 строк х 36 столбцов). Есть ли функции в VBA, к-рые позволят сравнить две книги быстрее, чем в циклах? Может сразу диапазоном? Только как - не знаю.
 
Заранее спасибо.
Любитель Excel.

  • 0

#389
Daulet.tech

Daulet.tech
  • Завсегдатай
  • 239 сообщений

На какую строку ругается?

 

Программа для сверки...сверяет только один лист (нужно выбрать номер листа), еще не доработан

пере залил файл

Прикрепленные файлы

  • Прикрепленный файл  777.rar   116,98К   Количество загрузок: 94

Сообщение отредактировал DauletAhamanov: 03.10.2013, 11:59:10

  • 0

#390
технолог

технолог
  • Завсегдатай
  • 155 сообщений

На какую строку ругается?

 

Программа для сверки...сверяет только один лист (нужно выбрать номер листа), еще не доработан

 

Нашел ошибку! Да здравствует пошаговая отладка и точки останова! Оказывается в некоторых ячейках на последнем листе в результате вычислений появлялось #Н/Д. Переделал через ЕСЛИОШИБКА.

 

Даулет, спасибо за программу. Очень интересно!


  • 0

#391
Daulet.tech

Daulet.tech
  • Завсегдатай
  • 239 сообщений

извиняюсь, пере залил файл, одну строку удалил в программе, исправил.


  • 0

#392
Nigrum cygnum

Nigrum cygnum
  • В доску свой
  • 1 201 сообщений

Даулет, в Вашем блоге видел какую запись по курсам НБРК - я такое сделал, но есть две проблемы - знания синтаксиса слабы, при обновлении данных - он черпает не только USD, но и другие курсы (они не мешают, но место занимают). В книге есть макрос ASD - но он криво удаляет данные. Это первое. Второе - Книга автоматически обновляет данные, но чтобы вставить в график, нужно ручками выбирать новую дату. 

 

Мне то для информативности хватает, но как всегда хочется посмотреть на работу мастера :)

 

Прикрепленный файл  Currency - копия.rar   41,01К   Количество загрузок: 98

 

Второе в целом могу сам через присвоение имени сделать, а вот с asd хотелось бы совета... :(


Сообщение отредактировал Nigrum cygnum: 03.10.2013, 20:25:05

  • 0

#393
Daulet.tech

Daulet.tech
  • Завсегдатай
  • 239 сообщений

Nigrum cygnum,

1. у Вас запрос на XML файл?

2. С Сводной таблицы делаете еще сводную?

3. Вам нужен диаграмма? или ...???

 

макрос ASD переделал, при удалении строк, надо начинать с конца

Sub asd()
    Dim lastcell&, i&
    Application.ScreenUpdating = 0
    lastcell = Worksheets("Лист1").Range("A:A").End(xlDown).Row
    For i = lastcell To 2 Step -1
        If Cells(i, 1).Value <> "USD" Then
            Range("A" & i & ":D" & i).ListObject.ListRows(i - 1).Delete
            'Cells(i, 1).EntireRow.Delete
        End If
    Next i
    Application.ScreenUpdating = 1
End Sub

Вообще Вам надо вес проект переделать ,

1. Заносим в массив данные с сайта (с файла) выгружаем только USD валюту.

2. После находим сред. валюту на определенную дату.

3. Далее можете диаграмму или что-то по Вашему вкусу. 


Сообщение отредактировал DauletAhamanov: 04.10.2013, 08:28:20

  • 1

#394
Daulet.tech

Daulet.tech
  • Завсегдатай
  • 239 сообщений

но как всегда хочется посмотреть на работу мастера

 

До мастера еще ухуху учится учится и еще раз учится...


  • 0

#395
Nigrum cygnum

Nigrum cygnum
  • В доску свой
  • 1 201 сообщений

Nigrum cygnum,

1. у Вас запрос на XML файл?

2. С Сводной таблицы делаете еще сводную?

3. Вам нужен диаграмма? или ...???

Вообще Вам надо вес проект переделать ,

1. Заносим в массив данные с сайта (с файла) выгружаем только USD валюту.

2. После находим сред. валюту на определенную дату.

3. Далее можете диаграмму или что-то по Вашему вкусу. 

1. Да, запрос на ХМЛ

2. Сводную в сводную - потому что удалить другие валюты макросом не получилось, использую Ваш макрос - необходимость в 2х сводных отпадет.

3. Диаграмма есть, теперь сделаю ранжируемый (настраиваемый автоматически) диапазон, чтобы график отображал последние даты после обновления.

 

 

Думаю проект полностью переделывать смысла не будет, он для личного пользования и воткнув все макросы по событию открытие книги не сильно будут мучать меня.

 

Вопрос ещё один - замена содержимого, думаю полезная функция - вот что необходимо:

Есть разные значения типа - Даход, Дхд, Доход_1, Доходы и прочее - вот нужно чтобы после поиска (часть ячеек) найденные данные изменялись на стандартное значение (стандартизация). Я раньше всё это ручками делал - создавал сводную, находил другие значения и через НАЙТИ И ЗАМЕНИТЬ. 

Сейчас сделал кое-что, половину меняет, а на другую половину выдаёт ошибку. Если не трудно, посмотрите.

Благодарю!

Прикрепленные файлы


Сообщение отредактировал Nigrum cygnum: 04.10.2013, 19:10:35

  • 0

#396
Daulet.tech

Daulet.tech
  • Завсегдатай
  • 239 сообщений
Sub zamena()
    Dim q As String
    Dim w As String
    Dim a As Integer
    Dim wl
    Application.ScreenUpdating = 0
    wl = InputBox("Введите № листа")
    a = InputBox("Введите № столбца")
    For i2 = 2 To Sheets("q").Cells(Rows.Count, 1).End(xlUp).Row
        With Sheets("q")
            w = .Range("A" & i2).Value
            q = .Range("B" & i2).Value
        End With
        Sheets(wl).Activate
        Z = Cells(Rows.Count, a).End(xlUp).Row
        For i = 1 To Z
            Columns(a).Replace What:="*" & w & "*", Replacement:=q, lookat:=xlWhole
    Next i, i2
    Application.ScreenUpdating = 1
End Sub

  • 1

#397
Nigrum cygnum

Nigrum cygnum
  • В доску свой
  • 1 201 сообщений

Классно! Пара вопросов, если не возражаете -

 

    Application.ScreenUpdating = 0
    wl = InputBox("Введите № листа")
    a = InputBox("Введите № столбца")
    For i2 = 2 To Sheets("q").Cells(Rows.Count, 1).End(xlUp).Row
        With Sheets("q")
            w = .Range("A" & i2).Value
            q = .Range("B" & i2).Value
        End With
        Sheets(wl).Activate
1-        Z = Cells(Rows.Count, a).End(xlUp).Row
        For i = 1 To Z
2-            Columns(a).Replace What:="*" & w & "*", Replacement:=q, lookat:=xlWhole
    Next i, i2
    Application.ScreenUpdating = 1
End Sub

 

1- А если вдруг там будет пробел в базе данных, и макрос не исправит все значения, можно ли использовать мне specialcells(xllastcell) (кажется так пишется, ну смысл такой в общем).

2 - Я вот пошарился по методу Find и пришел к неоднозначным выводам, подскажите пожалуйста, lookat:=xlPart - не лучше? Ведь он найдет и другие значения или то, что Вы прописали "*" возле переменной "W" решают этот вопрос?

 

Пусть до мастера ещё далеко, но мне до Вас как до мастера (или ещё дальше) :)

Благодарю за помощь! Жаль по образованию не программист, сам бы щёлкал такие вещи... :(


  • 0

#398
Daulet.tech

Daulet.tech
  • Завсегдатай
  • 239 сообщений

1.specialcells(xllastcell): не обновляется (для обновлении требуется закрыть и открыть файл)

Cells(Rows.Count, 1).End(xlUp).Row: каждый раз обновляется

запустите 1 раз, и удалите ячейку последнюю непустую во 2-ом столбце, запустите 2-раз и поймете

'Протестируйте
Sub Сверка()
    MsgBox Cells(Rows.Count, 2).End(xlUp).Row & "-" _
        & Cells.SpecialCells(xlLastCell).Row
End Sub

2.LookAt:=xlPart: используется поиск частичного совпадения, Replace ... "*" & w & "*" тоже

Вы как замену будете делать ячейку полностью или найденное значение?

 

P.s. Экономист


Сообщение отредактировал DauletAhamanov: 05.10.2013, 20:19:48

  • 0

#399
Nigrum cygnum

Nigrum cygnum
  • В доску свой
  • 1 201 сообщений
2.LookAt:=xlPart: используется поиск частичного совпадения, Replace ... "*" & w & "*" тоже
Вы как замену будете делать ячейку полностью или найденное значение?
P.s. Экономист

Смысл именно в полной замене, то есть если в ячейке " ЦБ" - то "Ценная Бумага", если "ЦБ_660" (к примеру из базы выходит) - то тоже "Ценная Бумага". А то в замене он меняет найденную часть в необходимую часть. Переделанный макрос решает всё без вопросов, вот только разобраться бы, почему прошлый выводил ошибку.

Ps - тоже, слишком много нас стало, вот и охватываем  захватываем смежные области.


  • 0

#400
Daulet.tech

Daulet.tech
  • Завсегдатай
  • 239 сообщений

Find если не находить то выдает ошибку, когда выйдет ошибка нажмите на Debug i останавливается на 21, посмотрите после 21 строки нет "Дах" слова из-за этого

 

не дружу я с Find'ом


  • 1


Количество пользователей, читающих эту тему: 0

пользователей: 0, неизвестных прохожих: 0, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.