Я давно заметил в excel одну вещь, если вставляешь изображение через CTRL-V скопированное из другого редактора, то оно вставляется как несжатое (а-ля *.bmp). Если же это делать через Специальную вставку -> рисунок, то изображение вставляется в сжатом формате (без потерь), объем файла при этом уменьшается значительно. Раньше для борьбы с подобными проявлениями, если специальная вставка не срабатывала (особенно в ворде), я использовал редактор Microsoft Photo Editor (https://ru.wikipedia.org/wiki/Microsoft_Photo_Editor), просто вставляя и затем копируя из него изображение в буфер для последующей вставки в excel/word. Сейчас он имеет другое имя и я не знаю как он работает.
Если объект для вставки копируется из векторного редактора (например adobe Illustrator), то вставку лучше делать как Метафайл Windows, так изображение займет еще меньший размер, потому что объект будет импортирован как векторный, по крайней мере в word так было. Правда при большом увеличении видно небольшие отклонения в векторных кривых, возможно это связано как-то с разрешением редактируемого иллюстратором pdf документа (максимум 2400 dpi), я так и не смог побороть этот момент.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rDependents As Range
On Error Resume Next
Set rDependents = Target.Dependents
If Err.Number > 0 Then
Exit Sub
End If
If Not Application.Intersect(rDependents, Range("C1:C10")) Is Nothing Then
Call abc
End If
End Sub
Private Sub abc()
MsgBox """abc()"" is running now"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("MI2:MI20"), Target)
xOffsetColumn = 1
If Not WorkRng Is Nothing Then
Application.EnableEvents = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) Then
Rng.Offset(0, xOffsetColumn).Value = Now
Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
End If
End Sub
выводящий текущую дату в соседний столбец при изменении значения ячейки пользователем.
Проблема в том, что он не работает, если значение в ячейке изменяется формулой, а не вводится вручную. Например если в MI2 указать =MH2, то при изменении значения в MH2 дата в MJ2 не напечатается.
Что нужно поправить в макросе, чтобы он работал с отображаемым результатом, а не с вводимым значением?
Уже смотрю, спасибо == Upd: Помогло создание таблицы params в текущем worksheet, с указанием параметров в запросе в ввиде переменных "&Excel.CurrentWorkbook(){[Name="params"]}[Content]{0}[Код валюты]&"
let
Source = Json.Document(Web.Contents("https://api.binance.com/api/v1/klines?symbol=BTCUSDT&interval=1w&limit=50")),
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Extracted Values" = Table.TransformColumns(#"Converted to Table", {"Column1", each Text.Combine(List.Transform(_, Text.From), "#(tab)"), type text}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Column1", Splitter.SplitTextByDelimiter("#(tab)", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7", "Column1.8", "Column1.9", "Column1.10", "Column1.11", "Column1.12"}),
#"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.1", type number}, {"Column1.2", type text}, {"Column1.3", type text}, {"Column1.4", type text}, {"Column1.5", type text}, {"Column1.6", type text}, {"Column1.7", type number}, {"Column1.8", type text}, {"Column1.9", Int64.Type}, {"Column1.10", type text}, {"Column1.11", type text}, {"Column1.12", Int64.Type}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1.1", "Open time"}, {"Column1.2", "Open"}, {"Column1.3", "High"}, {"Column1.4", "Low"}, {"Column1.5", "Close"}, {"Column1.6", "Volume"}, {"Column1.7", "Close time"}, {"Column1.8", "Quote asset volume"}, {"Column1.9", "Number of trades"}, {"Column1.10", "Taker buy base asset volume"}, {"Column1.11", "Taker buy quote asset volume"}, {"Column1.12", "Ignore"}})
in
#"Renamed Columns"
загружающий данные из веб-источника.
Возникла потребность оперативного изменения URL в запросе. Хотелось бы это сделать, чтобы URL вводился в ячейку на листе (например, A1), а запрос считывал бы данные из этой ячейки и использовал в качестве источника.
Возможно ли подобное? Пробовал записать макрос, но он не пишет действия из Power Query. Может быть это можно сделать в самом коде запроса или как-то по-другому?
Отправить символ перевода строки не получилось, я пробовал передавать CRLF в URL-Encoded запросе в виде %0D%0A, но символ не передается в сообщении.
Кстати, интересует обратная возможность импорта telegram сообщения бота в ячейку используя vba и telegram api Нашел этот метод, но пока не вкурил как им пользоваться в vba:
Извините, что вновь подымаю тему, а запрос через "прокси" (IP, порт) никто не знает как прописать в макросе? А то напрямую отправить не получается... == PS: Вот, нашел вроде, правда работает только с https proxy, SOCKS (1080 которые) выдает ошибку. Cервер нужен надежный (с высоким uptime) и ненашинский
Код
Sub sender()
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL="...api.telegram.org..."
objHTTP.Open "POST", Url, False
objHTTP.setProxy 2, "197.159.198.190:50592"
objHTTP.setProxyCredentials "anonymous", "anonymous"
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
End Sub
А можно тогда, если уж макрос не получается выполнить на запаролленом файле, не выполнять его вообще? То есть, можно ли предварительно перед выполнением макроса проверить файл на защиту и если она установлена - не выполнять макрос? Как это сделать?
Это не мой файл, пароля не знаю. Может быть, потому, что в 1.xls установлен VBAProject Password, макрос в файле xls2txt не отрабатывает? Тогда экспорт вручную в txt на этом файле 1.xls почему тогда работает?
The_Prist, нет, файл 1.txt тут ни причем. Если вы выполните мой макрос с обычным xls файлом, никаких ошибок не возникнет, файл сохранится как txt, даже если он существует. Проблема возникнет, только если выполнить макрос с прикрепленным файлом 1.xls (причем его надо поместить в каталог C:\nnCron\thebat!)
The_Prist написал: Вы пытаетесь сохранить файл, который уже открыт под тем же именем
Я открываю файл xls2txt.xls. Выполняю в нем макрос1. Открывается файл 1.xls, сохраняется как 1.txt. Где тут сохранение под тем же именем? Имя то же. но расширение txt. причем, когда я делал запись макроса, excel спрашивал меня. что файл 1.txt уже существует. заменить? Я согласился, нажав Да.
Суть проблемы в том, если файл 1.xls не запаролен, он отрабатывает успешно, без ошибок. Но когда я пытаюсь запустить файл, имеющий запароленный макрос, вываливается эта ошибка. При этом, если сохранять вручную, никаких проблем не возникает. Проблемный файл 1.xls прилагаю.