Anton_Kozlov написал: как прописать путь папки, если она не находится во входящих
Я выше в сообщении и коде именно это и показал
Цитата
Дмитрий(The_Prist) Щербаков написал: единственное, я бы один момент изменил, если папка "Задачи" является вложенной в папку "Входящие". Вот так:
Если папка не во Входящих - то нужно заменять Inbox на нужную константу или имя. При этом возможно даже не GetDefaultFolder нужно будет использовать. Но т.к. информации мало(непонятно даже где эта папка, если не во Входящих - то ли как вложенная, то ли вообще не во Входящих), то расписывать здесь полный ликбез по обращению к папкам Outlook ни желания ни времени нет.
Лично я вот не понял, что именно надо. То ли в диаграмму что-то добавить каким-то хитрым способом, то ли вычислить величину, которая могла бы быть. Если первое - в чем сложность, ведь в примере Вы это сделали? Или сделали не так, как хотелось? Тогда как хотелось?
В общем что именно хотели так и не понял - как вариант пример во вложении.
ну а кто о нем кроме Вас знал? Вы об этом не писали, пример данных не приложили. Да и по сути принцип от этого не меняется - надо лишь сначала дернуть из листов данные и подготовить их к "слейке"(удалить лишние столбцы, повысить заголовки).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Ну вообще, если не знаете даже для чего скобки - лучше начать изучать предмет более тщательно. С таким подходом далеко не продвинетесь и все задачи будут неподъемными
Не забывайте, что любая фигура и диаграмма это объект
Код
dim aShapes
ReDim aShapes(0 to 3)
'здесь можно и циклом, но принцип понятен
set aShapes(0) = ws.Shapes(5)
set aShapes(1) = ws.Shapes(6)
set aShapes(2) = ws.Shapes(7)
set aShapes(3) = ws.Shapes(8)
Call FillPP(oPPTPres, 2, aShapes)
забыл. Не забудьте после такого подхода изменить тип аргумента в функции:
Код
Function FillPP(pPres As Presentation, SlideNo As Long, cCharts)
если мне не изменяет мой склероз, то это событие не отслеживает получение письма в конкретную папку. Это событие обрабатывает абсолютно все поступающие письма до того, как сработает какое-либо правило, например правило перемещения в определенную папку.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Anton_Kozlov написал: нужно чтобы срабатывал макрос от excel
во как. И как же он сработает? Вы будете из Outlook его запускать? Или все это хотите на стороне Excel сделать? Куда помещаете приведенный выше код?
Кстати, сам код почти рабочий. единственное, я бы один момент изменил, если папка "Задачи" является вложенной в папку "Входящие". Вот так:
Код
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
' default local Inbox
Set Items = objNS.GetDefaultFolder(olFolderInbox).Folders("Задачи").Items
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
On Error GoTo ErrorHandler
Dim Msg As Outlook.MailItem
If TypeName(item) = "MailItem" Then
Set Msg = item
' ******************
' do something here
MsgBox ("пришло письмо")
' ******************
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
Если папка "Задачи" сама по себе - то этого можно не делать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Трудно с Вами...Остальные вопросы я себе, что ли задавал? Что не получается? На чем спотыкаетесь? Ошибки какие-то, результат не тот, в папке не ищет и т.д. Поймите - не интересно сидеть и накидывать тут предположения вроде "а что вообще не получается-то?". Если продолжим в том же духе - я мимо.
Vitalee написал: разве у функции ЯЧЕЙКА есть третий аргумент?
ну ё-маё...уже поправил. Нету третьего. Я просто ошибся - это к UDF относится. Можно же понять хотя бы по коду-то....Писал ДО файла. И на коленке. Да и у Вас там неудобно в сообщении выложено - разделители аргументов то запятые, то точки...Вот и перепутал, а заметил не сразу.
Что здесь написано? Активировать книгу ImaKnig1. А потом сразу выделить ячейку на листе "Спецификация". А как это произойдет, если книга активируется на листе "Начало"? Надо сначала уж тогда лист активировать. Далее. Если уж даже выделили - у Вас при выделении срабатывает код на событие Calcualte. Который сбрасывает буфер обмена, что делает вставку значений невомзожным. Посмотрите уже внимательнее на мой код. У меня там отключение событий сделано ДО ЛЮБЫХ этих событий. Либо уж разберитесь какие события Вам нужны и копируйте после них. Да и копировать можно без перехода на книги - это я тоже показал. Что Вам мешает делать так?
Код
Application.EnableEvents = False 'отключаете обработку событий (чтоб не срабатывала вставка только значений)(Application.Undo)
Workbooks.Open (ImaKnig2)
Workbooks(ImaKnig3).Worksheets("Спецификация").Range("B5:G705").Copy
' ImaKnig1.Activate
' Sheets("Спецификация").Range("B5").Select
ImaKnig1.Sheets("Спецификация").Range("B5").PasteSpecial Paste:=xlPasteValues
' Range("B5").Select
Application.CutCopyMode = False 'очистка буфера обмена
Workbooks(ImaKnig3).Close (False)
Application.EnableEvents = True 'включаете обработку событий
P.S. Если уж выкладываете коды и файлы, то хоть жизненно приближенными их делайте. А то файлы 1 и 2 содержат объединенные ячейки и в этих файлах Вы в них КОПИРУЕТЕ. Я же не просто так написал - я тоже опирался именно на эти файлы. Кто ж знал, что напишите Вы одно, а делаете другое?
найдите два различия функция ЯЧЕЙКА требует не адрес ячейки, а саму ячейку, как объект. Т.е. Ваша функция тогда должна выглядеть так:
Код
Function getAddress(sv As Integer, r As Range, sType As String)
For Each Item In r
If Item.Value = sv Then
If sType = "str" Then 'нужен только адрес
getAddress = Item.Address
Else
Set getAddress = Item
End If
Exit Function
End if
Next Item
End Function
Jack Famous написал: там целый отладочный тест для наглядности
не буду спорить, тебе виднее, как проблему со стороны читать не тому, кто этот отладочный тест придумал я лишь написал, что сходу не очень понятно куда именно вообще смотреть. По сути во всем твоем коде хватило бы одной строки для пояснения:
Код
Debug.Print "4.", Me.tb.Value = vbNewLine
во всем остальном, если честно, смысла что-то не углядел для определения проблемы...
собственно, я вообще не понимаю в чем здесь баг или фича... А что ты ожидал увидеть? Твой символ, если его перевести в числовое представление:
Код
asc(ch) = 182
Т.е. это как бы и не перевод каретки и не перевод строки. Это символ из набора символов, который не является каким-то специальным в том представлении, чтобы TextBox его как-то иначе интерпретировал. Или я что-то не так понял? А, все. Без более точных пояснений плохо понятно, куда именно смотреть. Ты хоть пояснялки-то оставляй, не скупись на слова. Кто там знает куда именно смотреть-то... Думаю, sokol прав.
Цитата
sokol92 написал: следствие установки свойства Multiline=False
RADLE написал: через ElseIF и Else у меня тоже не получилось
а зачем они здесь? Для каждого открываемого файла делаете отдельный IF как я показал и все. Тут не нужны Else. По крайней мере я такой необходимости не вижу. Совет Вам: если не понимаете принцип работы If и т.п. - изучайте. Благо информации сейчас в интернете много. Тыкать и впихивать конструкции, работу которых не понимаете, не очень хорошая практика.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Вы не заметили, что у Вас там ошибка возникает, т.к. вставить данные пытаетесь в объединенную ячейку? Копируйте без заголовков и не создавайте себе проблем:
Самая сложность здесь, это непонимание происходящего в Вашем коде. А сидеть и разбираться - куча времени, если не знать что там должно происходить. Есть подозрение, что все можно сделать компактнее и правильнее, но.... Потому как если операции всегда одинаковые, то тут массивы с именами файлов и циклы напрашиваются...
А Вы когда вписываете в редакторе ActiveWindow и ставите точку - у Вас список выпадает? Если да - то использовать можно только то, что в этом списке есть. Иначе ошибка будет, т.к. ни одна программа не умеет обращаться к свойствам и методам, которые еще не реализованы Если список не выпадает - идете в редакторе VBA в Tools -Options -вкладка General и ставите галочку напротив Auto List Members. После этого появление списка при проставлении точки будет работать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Ну и по сабжу: неужели в интернете нет совсем никаких инструкций о том, как коды из одного файла в другой переносить? Это к слову о "не могу". Вы хоть пытались перенести? Там три движения мышью надо сделать и кнопку скопировать из одного файла в другой. Ну и форму поиска переименовать для начала, хотя бы в UserForm3, чтобы конфликта не было. В общем сложностей по факту нет и для этой задачи даже знать VBA не надо. Алгоритм: 0. Переходите в проект VBA(Alt+F11). Отображаете окно проектов(Ctrl+R). Находите там открытые файл 1 и 2 (VBAProject(1.xlsm) и VBAProject(2.xlsm) 1. в файле 1 (VBAProject(1.xlsm) находите папку Forms, раскрываете её и переименовываете там форму UserForm1 в ufFind(F4 -двойной щелчок левой кнопкой мыши на UserForm1 -для свойства (Name) вписываете ufFind) 2. После этого выделяете её(форму ufFind) левой кнопкой мыши и удерживая эту левую кнопку мыши переносите в проект файла 2 (он будет там же жирным выделен VBAProject(2.xlsm) 3. Копируете кнопку из файла 1 4. В модуле Module1 у Вас есть такой код:
Код
Sub Кнопка1_Щелчок()
UserForm1.Show
End Sub
дополняете его еще одной процедурой, чтобы получилось так:
Код
Sub Кнопка1_Щелчок()
UserForm1.Show
End Sub
'вызов формы поиска
Sub CallFind()
ufFind.Show
End Sub
5. Правая кнопка мыши на скопированной в файл 2 кнопке -Назначить макрос. Выбираете CallFind. 6. ВСЕ.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
А где там поиск хотя бы по одному листу? Там только внесение данных, ни про какой поиск даже намека нет. Или под словом помогите надо понимать "сделайте поиск с нуля"?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Выпадающий список из нескольких диапазонов, Выпадающий список из нескольких диапазонов. Объединение нескольких списков в один. Объединение диапазонов в один
skais675 написал: нужно объединить диапазоны типа двух таких
тут главный вопрос в том, можно ли это делать на отдельном листе. Т.е. объединить нужное на отдельном листе и уже из него брать неразрывный диапазон для списка. Если нет - то вариантов нет вообще.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
ну вообще в общем случае ошибка 400 это невозможность отобразить в модальном режиме форму, т.к. на данный момент уже запущена другая форма в модальном режиме. Можете привести текст ошибки? В моем коде тоже самое?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...