Накидал пока так. Конечно не совсем красиво, но посмотрю попозже
Код
Public Function Together_Array(Dec_Mark, Value_Array) As String
Dim q As Long
Dim MAX As Long
q = 1
MAX = UBound(Value_Array)
On Error Resume Next
For q = 1 To MAX
If Value_Array(q, 1) <> "0" Then
Together_Array = Together_Array + CStr(Value_Array(q, 1)) + Dec_Mark
End If
Next q
If Len(Together_Array) > 0 Then Together_Array = Left(Together_Array, Len(Together_Array) - 1)
End Function
Public Function Together_Array$(Dec_Mark$, Value_Array())
Value_Array = Application.Transpose(Value_Array)
Together_Array = Join(Value_Array, Dec_Mark)
End Function
Привет всем С помощью формул массива высчитываю данных, затем их хочу соединить. Возник вопрос, как передать этот массив в свою функцию формула ={Together_Array(",";(E2:E16=J15)*(F2:F16=K15)*A2:A16)} т.е. на вызове идет Together_Array(",";{строка:строка1:строка2:строка3:строка4:строка5:строка6:..:строка15}) сама функция вылетает на присваивании s= (делал для проверки), без нее не работает тожею такое чувство что это не массив (ибо UBound ответил 0). А что это за данные тогда, и как их получить на вход функции?
Код
Public Function Together_Array(Dec_Mark As String, ParamArray Value_Array() As Variant) As String
Dim s As String
s = Value_Array(1)
Together_Array = Join(Value_Array, Dec_Mark)
End Function
Пробовал, но на это он мне возвращает Run-time error 438 Object doesn't support this property or method PS по крайней мере во время отладки по ? Dates.parent PSS не заметил слово указатель...
Привет всем, возник вопрос как передать или обратиться к нужному листу. Например на вход функции подается большой интервал данных на другой странице / в другом файле, данные нужно подсчитать.
Код
Public Function DO_with_DATE (DATE as long, Dates as variant, SUMs as variant)
если я обращусь
Код
cells(dates.row + q, dates.colunm).value
он мне выдаст данные из той же страницы, откуда я вызываю функцию, но range в формулу передавался на другой лист / файл. т.е. мне нужно вызвать по типу worksheets("xxx").cells...
Дмитрий Щербаков Думал что и так понятно, что эта функция генерирует ссылку, все значения которые там остались закомментированными, тестировались, и еще куча других, которые я попросту удалил. Или вы думаете что я и процедуру не вызывал? Вчера писал с помощью этой функции, но так как коду у меня на 18 разных частей / форматирования, и делал я ее не для себя а для людей, то полная компиляций HTML кода происходит на форме. Как выглядят ссылки, которые я пробовал, я прикрепил в виде закомментированной функции. и
По поводу по полного адреса, да моя вина, тут я другого варианта не отобразил, но тоже пробовал. По поводу width=width height=height было написано в одном англо-источнике, но я и пробовал без него. Зачем вызываю createobject, потому что outlook закрыт, он его сам запустит и отправит.
Если у вас получилось принять письмо в браузере на yandex.ru с правильным отображением, отлично! Если не затруднит, поделитесь методом вставки. Ссылку, о которой я говорил, к сожалению, сейчас найти не смог. Вот он полный код, сейчас ссылка стоит из интернета. <br> <img src='https://d.radikal.ru/ХХХХ.jpg' width=width height=height><br><br> Почему тут width=width height=height не знаю, ибо как говорил, в HTML не вникал, может это чтобы он по широте страницы встал, и не обрезался по краям.
Код
Sub SendMail_auto()
Dim OutApp As Object
Dim OutMail As Object
Dim cell As Range
Dim TepmFilePath As String
Dim q As Integer
Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
On Error GoTo cleanup
q = 1
Do While Worksheets("AUTODATA").Cells(q, 1).Value <> ""
Cells(1, 2).Value = Worksheets("AUTODATA").Cells(q, 1).Value
Cells(16, 5).Value = Worksheets("AUTODATA").Cells(q, 2).Value
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = Cells(1, 2).Value
.Subject = Cells(2, 2).Value
.HTMLBody = Cells(3, 2).Value
.Send
End With
q = q + 1
Loop
On Error GoTo 0
Set OutMail = Nothing
cleanup:
Set OutApp = Nothing
Application.ScreenUpdating = True
End Sub
Андрей VG Спасибо, обязательно попробую, пригодится в будущем, но что-то я подумал, что если рассылать большое количество писем, то как там пойдет с загрузкой картинок к каждому сообщению, может и правда нужно было сразу оставить подгрузку из интернета, быстрее отправятся.
Ну как, в #1 сообщении и указал, и в сообщении #3 указал после кода как выглядит вызов картинки, пробовал и полный путь указывать и только имя, и затем указал в сообщении #11 какое письмо получаю в outlook и в мазиле, а там видно что картинка вызвана, но верно отображается она только в аутлуке. И еще раз, когда мне надоело мучиться я заменил указатель на картинку из приложения, на указатель на картинку из интернета, (вместо 1.jpg стало blabla.radical...) и все работает во всех браузерах и телефонах и почтовых клиентах. Т.е. код верный и он работает, он работает для картинок из интернета, и работает для картинок просто (но только в outlook), в остальных почтовых клиентах она попросту не отображается т.к. не находится.
код который вы видели в последнем сообщении это уже после убора всего мусора, пробитие всех тегов в ячейках и компоновки всего HTML кода в одну ячейку. В первом сообщении было указано какие я пробовал варианты (они все работают, но только в outlook).
@DenSyo Отображаются в тексте? какой код вставки в текст? К сожалению параметр сути не изменил, в Outlook отображается, в мазиле нет. .BodyFormat = olFormatHTML Вот это полученное письмо в аутлуке. Он получил на вход картинку и сам чекнул аттачмент
именно так и делал там есть еще что-то вроде условных операторов и функций (HTML я не знаю, только на уровне копипаста тегов) но все равно берет он картинку из письмо.files/FILENAME, пробовал так (без всяких левых функций, не выходит), решил делать по простому, залил фотки на радикал. Не очень хорошо, но что поделать, время очень ограниченно.
нашел одну статью от 2014 года, что <img src='cid:2.jpg' > с прикреплением в attach не работает в большинстве почтовиков... Видно с того времени ничего не изменилось. Советуют использовать кодирование base64. Попробуем...
Привет всем, Нужно сделать возможность отправки картинки в тексте, нашел кучу материала по поводу как их отправлять, отправлять напрямую без вложения, отправлять с вложением, и все это прекрасно работает, но есть одно НО! Это правильно отображается ТОЛЬКО в outlook, в остальных программах \ на сайте почтовика непосредственно, картинки в тексте нет (а на телефоне стоит ее имя вместо отображения, в мазиле на компе "битая картинка", на сайте вообще пустое место) и только в outlook стоит все отлично.... Может кто помочь с этой проблемой, теги прилагаю. После cid:стоит имя файла 1.jpg (он подгружен в attachemnt)
Это то я знаю, просто думал я это в екселе видел, что можно как-то с помощью форматирования заменить отображаемые данные, видно ошибся. Сделал по другому, повешал проверки на вводимые значения, вводишь 1, превращается в текстовое значение. А при сохранении на другой лист (где вся база хранится) сравнивается с таблицей и сохраняются уже коды.
да про скрытый лист я думал, но совсем уж не понравилась идея, наверное эту фишку я с оракла помню, а тут, видимо, ее нету, спасибо, тогда буду мучть текст.
Задача именно такая, из базы берутся данные, но хранить текст в базе я не хочу, а хочу хранить там числа и даты. Информация подается на пользовательскую форму, где значения должны быть изменены с цифр на тест, и подкраситься нужным способом. Если делать это макросом (заменять значения на текст. то при обратном занесении в базу (пересохранении) нужно будет менять текст в коды). Думал просто вводить цифры и отображать уже пользовательскую информацию, меньше проверок по тексту, быстрее выполнение и поиск данных. Пример: База: ID, Состояние1, С2, С3... Пользовательская форма: ID, ОписаниеС1, ОС2, ОС3...
в состояниях хранятся или числовые коды оных, или дата. 1 = нужно, 2 делается, дата - даты выполнения. И планировалось сделать так: Вывод пользователю, ID, нужно, нужно, выполнено (и цвет зеленый или красный если выполнено вовремя или нет). Он эти строки может переписать, и она отправится обратно в базу. И если там текст, то мне придется разбирать то что он настрочил (пусть он даже из списка), и заносить в базу. Именно этого разбора я и хотел избежать.
Помнится видел где-то, например вводишь в ячейку число 1, а он отображает слово, относящиеся к числу 1. (но в ячейке хранится именно число). Как это сделать? Заранее спасибо. Поясню: Например коду 1 будет соответствовать слово "нужно", значит в ячейке с единицами будут отображаться "нужно", хотя фактическое значение ячейки будет 1. (примерно тоже самое что и форматирование, но там только работа с форматом, а мне нужен текст.
Забавно, что после этого способа защиты мои графы отказались обновляться без снятия оной(там менялось имя линии). Что очень интересно, ибо на ум приходит разные варианты защиты документа, помимо стандартной "Защиты листа".
Собственно скрин, того чекбокса, который мне нужен, облазил весь SeriesCollection, оказалось если он скрыт то его там попросту нет, куда лезть дальше? ActiveSheet.ChartObjects("NAME").Chart. .... мне нужно его отключить и затем включить.
PS Нашел ActiveSheet.ChartObjects("Monthly_graph").Chart.FullSeriesCollection(1) там он высвечивается даже скрытым. PSS Очень похоже на свойство ActiveSheet.ChartObjects("Monthly_graph").Chart.FullSeriesCollection(1).IsFiltered = false (Видно) / True (Скрыто) Но у меня не получается его изменить. PSSS Да, это именно то и оно работает, единственное что оно не работает при моей защите листа (если это делать через VBA) но работает, если делать ручками. Может кто подсказать почему? Код выглядит так:
Код
Sub DA_Graph_this_month()
Dim This_chart_S As Series
Set This_chart_S = ActiveSheet.ChartObjects(CST_MONTHLY_GRAPH).Chart.FullSeriesCollection(1)
If This_chart_S.IsFiltered = True Then
This_chart_S.IsFiltered = False
Else
This_chart_S.IsFiltered = True
End If
End Sub
Извиняюсь. С формулами excel работаю мало, в основном пишу все ручками. И про хитрые применения не вкурсах. Расскажите секрет одного отрицания в формуле? Судя потому, что туда можно поставить *1 и ответ получится такой же, делаю вывод что ДЕНЬНЕД($B$2:$B$25)=G3 выдает нам диапазон, но не числа, как мне бы выдало просто суммапроизвед по диапазону, а какой-то безликий диапазон, и чтобы он обрел "форму" нужно сделать с ним какое-то действие. Вот именно в этом и была проблема, что когда я пытался сделать что-то у меня выходило 0 и я тупо забил. Может у кого есть более правильно объяснение как работает эта формула?
Я прочел все что там было написано, и про нестандартные применения тоже, но у меня ехсе1 ругался на то что я применяю деньнед к диапазону, видимо тут он работает по-другому, попробую как тут написано. Спасибо. PS, подскажите что такое 2 минуса? как понимаю один минус это убрать отрицательный ответ, а что такого магического делает минус номер 2?
Причем тут сумма произведений когда мне нужно из массива дат посчитать количество понедельников без создания дополнительных столбцов (нельзя применить деньнед к диапазону! так и еще получить на выходе диапазон дней недели, чтобы их посчитать суммой произведений, я, кстати, и счетесли посчитать могу). Он написал, лишь бы написать. Ну или может тогда он соизволит написать как именно применить тут сумму произведений.
За заголовок: Подскажите формулу Function XXX(range, formula) as range
Для особо не читающих: вторым словом стоит слова формула, которая дает понять что мне нужна формула, которая будет выполнять определенные действия, а какие действия даны дальше: получает на вход диапазон, и применяемую к нему формулу (к каждой ячейки в отдельности), и возвращает диапазон.Что тут непонятно я даже хз. Пока кроме как на VBA напистаь способа не вижу, возможно его попросту и нет. Я уже и файл скинул, а вам все непонятно.
Если сильно упросить задачу то: Есть даты, штуки полторы дат, в столбик. что нужно? Например посчитать количество понедельников причем не создавая дополнительных столбцов. Ни индекс, ни офсет не подходят, ибо они просто возвращают мне диапазон, я его и так знаю. Мне нужно запихать промежуточное вычисление в формулу. Грубо говоря мне нужно сделать А1: =5 А2: =А1 + 1 (промежуточное решение в отдельной клетке) А3 = А2 + 1
Мне надо сразу сделать А3: =А1 + 1 +1 Но только не с сложением, а с счетесли ( деньнед())
Банальный пример: есть дни недели в виде числа 1,,7 =счетесли( дни-недели, 2) даст мне количество понедельников.
НО! У меня есть даты, неделей нет (и я не должен создавать новые столбцы) т.е. есть даты =счетесли (ХХХХ(диапозон дат, формула применения к датам), 2)
Функция должны быть по типу условного форматирования. В условном форматировании можно закрасить ячейки, например все выходные. =И($S4<>"";ИЛИ(ДЕНЬНЕД($S4)=7;ДЕНЬНЕД($S4)=1)) но как сделать так, чтобы я просто получил число в формуле? Есть ли такая возможность, или придется написать макрос.