Просмотр сообщений
|
Страниц: [1]
|
1
|
Основные форумы / Вопросы по Office для MAC / Re:Открытие файла VBA Mac MS Office
|
: 20.08.2021, 16:43:57
|
На всякий случай код со ссылки, раз она не отобразилась. Вдруг кто-то имеет Мак, сможет вставить и проверить. '====================================================================================================================== Public Function GetFileName(dlgTitle As String) As String Dim result As String
result = ""
#If Mac Then result = GetFileName_Mac() #Else result = GetFileName_Windows(dlgTitle) #End If
GetFileName = result End Function '====================================================================================================================== Public Function GetFileName_Windows(dlgTitle As String) As String Dim result As String Dim fd As Office.FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd .Filters.Clear .Filters.Add "CSV Files (*.csv)", "*.csv", 1 .Filters.Add "All Files (*.*)", "*.*", 2 .title = dlgTitle .AllowMultiSelect = False If .Show = True Then result = .SelectedItems(1) End If End With
GetFileName_Windows = result End Function '====================================================================================================================== ' Adapted from https://stackoverflow.com/questions/12263016/is-there-a-mac-pc-variant-of-application-getopenfilename Function GetFileName_Mac() As String Dim startPath As String Dim script As String Dim result As String Dim MySplit As Variant Dim N As Long Dim FName As String Dim mybook As Workbook
On Error Resume Next startPath = MacScript("return (path to documents folder) as String") ' Or use startPath = "Macintosh HD:Users:Ron:Desktop:TestFolder:"
' In the following statement, change true to false in the line "multiple ' selections allowed true" if you do not want to be able to select more ' than one file. Additionally, if you want to filter for multiple files, change ' {""com.microsoft.Excel.xls""} to ' {""com.microsoft.excel.xls"",""public.comma-separated-values-text""} ' if you want to filter on xls and csv files, for example. script = _ "set applescript's text item delimiters to "","" " & vbNewLine & _ "set theFiles to (choose file of type " & _ " {""public.comma-separated-values-text""} " & _ "with prompt ""Please select a file or files"" default location alias """ & _ startPath & """ multiple selections allowed false) as string" & vbNewLine & _ "set applescript's text item delimiters to """" " & vbNewLine & _ "return theFiles"
result = MacScript(script) result = Replace$(result, "Macintosh HD", "", Count:=1) result = Replace$(result, ":", "/") GetFileName_Mac = result End Function
|
|
|
2
|
Основные форумы / Вопросы по Office для MAC / Re:Открытие файла VBA Mac MS Office
|
: 20.08.2021, 16:41:51
|
А разве столь нужны остальные файлы, чтобы посмотреть код?  Это чтобы можно было прогнать.  .Cells(6, "B") = ThisWorkbook.Path & Application.PathSeparator & "MiraGoGt.xlsx" Это меньшая из проблем. )) 2. Насколько знаю, диалоговые окна выбора файлов и папок на МАС и Windows различаются. Поэтому надо будет искать код диалогового окна под MAC и делать ветвление в зависимости от типа операционной системы. Что-то вроде: Именно об этом речь в вопросе. Нашел разные вещи, почти все на applescript, но я его не знаю, чтобы проверить, да и не на чем. Но там надо более капитально в тему погружаться, т.к. разные версии Excel и MAC могут требовать различные методы. Но это не точно  И вот про это тоже говорилось на разных ресурсах. И попутно, Дмитрий, спасибо Вам большое за сайт и этот форум, много полезного находил. Ваша работа помогает людям.
|
|
|
4
|
Основные форумы / Вопросы по Office для MAC / Открытие файла VBA Mac MS Office
|
: 20.08.2021, 13:20:47
|
Добрый день всем! Нет ли тут спецов по экселю для мака? Написан макрос, отлично работает. Суть его в сборе данных из 4 файлов и формировании общей статистики. Но стало нужно адаптировать его для работы в MS Office на маке. Как я понимаю, нужно заменить операторы открытия (и, возможно, сохранения) файлов. Но мака у меня нет и опыта работы в нем тоже. Нашел вот такое: http://www.jasinskionline.com/... ialog.ashx Вопрос: это сработает? Не может ли кто-то помочь заменить и проверить работу? В одно вложение не влезло, разбил на 2.
|
|
|
5
|
Основные форумы / Вопросы по Excel и VBA / Re:Декларации для 64 бит
|
: 26.02.2021, 15:01:16
|
это где так жестко приходится извращаться, чтобы формат системной даты менять? Модуль календаря, найденный в инете. Авторства, увы, не знаю. Там по двойному клику выбирается дата и выполняется оператор TB = CStr(DateValue(dt_1)) И если дата не вида 26.02.2021, а Пт 26.02.2021 - имеем брык от DateValue. Сам календарь, если надо, выложу. Смотря на чем этот 64-ый работает. Если офис ниже 2010 - то надо дополнительные блоки для этого писать(именно как на примере у Вас ниже). Вот как тогда будут выглядеть описания? String сохраняется, Long меняем на LongLong? Но вот hwnd то Long, то LongPtr. И возврат у SetLocaleInfo то Boolean, то Long. Вообще синее нагуглено в инете, красное - взято из Win32API_PtrSafe.TXT издания 2010 года. это вроде Variant в VBA - означает любой. Variant знаю, Any - первый раз встретил.
|
|
|
6
|
Основные форумы / Вопросы по Excel и VBA / Декларации для 64 бит
|
: 26.02.2021, 14:37:48
|
Добрый день. Хитрые юзеры меняют формат даты (например, на полный в духе Пт 26.02.2021), а у меня рассчитано на ДД.ММ.ГГГГ. Даже не у меня, а календаря. Сделал смену формата даты и возврат после. На 7-64 с офисом 32 бит работает. Декларации ниже. Но вот вопрос - как будет на 64 ? Именно эти декларации менять надо или нет? Как понять и какими будут? Что за тип lParam As Any у PostMessage? #If VBA7 Then Public Declare PtrSafe Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long Public Declare PtrSafe Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long Public Declare PtrSafe Function GetSystemDefaultLCID Lib "kernel32" Alias "GetSystemDefaultLCID" () As Long Public Declare PtrSafe Function GetUserDefaultLCID Lib "kernel32" Alias "GetUserDefaultLCID" () As Long Public Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long #Else Public Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long Public Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long Public Declare Function GetUserDefaultLCID Lib "kernel32" () As Long Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long #End If Почему вопрос - недавно такое видел: #If Win64 Then #If VBA7 Then ' Windows x64, Office 2010 Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As LongLong, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As LongLong, ByVal lpfnCB As LongLong) As LongLong #Else ' Windows x64,Office 2003-2007 Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As LongLong, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As LongLong, ByVal lpfnCB As LongLong) As LongLong #End If #Else #If VBA7 Then ' Windows x86, Office 2010 Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long #Else ' Windows x86, Office 2003-2007 Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long #End If #End If
|
|
|
7
|
Основные форумы / Вопросы по Excel и VBA / Re:Можно ли это аппроксимировать?
|
: 20.02.2021, 12:55:07
|
Это - что? Название темы должно отражать задачу. Предложите название, заменим.
Это - имелось в виду данные из таблиц. Возможно ли каждому набору подобрать формулу, зависящую от 2 параметров, которая бы совпадала в заданных точках или была к ним наиболее близка или такое никак?
|
|
|
8
|
Основные форумы / Вопросы по Excel и VBA / Можно ли это аппроксимировать?
|
: 20.02.2021, 10:32:10
|
Здравствуйте! Подкинули такой вопрос - можно ли это задать какой-то функцией? Есть 3 таблицы. В каждой по вертикали идет высота, по горизонтали - ширина, на пересечении - цена. В каждой таблице хотят иметь возможность вычислить цену для промежуточных значений, например, при 150 на 150. Можно построить (на диаграммах) ряд и аппроксимацию. Сделал для ширины и первой строки (высота 100) для каждой из таблиц. То есть таким образом можно получить уравнения для всех 6 строк. Но вопрос: как использовать уравнение для промежуточных значений по высоте? Можно ли описать всю таблицу одним уравнением? Возможно, это будут сплайны? Однако ж давно я институт закончил и сходу не соображу, как это все проделать. Может быть, кто-то подскажет? В идеале файл, куда вписать значения таблицы и получить формулу.
|
|
|
9
|
Основные форумы / Вопросы по Excel и VBA / Re:Как сделать запросы на озоне?
|
: 13.02.2021, 20:39:07
|
Уважаемый Дмитрий! Знаю Вас по инету, как очень сведущего человека. Многими подсказками из Ваших сообщений на разных форумах пользовался и "мотал на ус". Спасибо! Здесь сложность была в том, что в документации приведены примеры запросов, подходящие под php (как я понимаю), и преобразовать их в VBA - неясно, как. Кроме того, не зря я подозревал, что есть разница в разных объектах. WinHttp.WinHttpRequest.5.1 делал перекордировку UTF -> 1252 и получалась каша. После подсказки об этом получилось вот что (работает). Остается разбор JSON, это уже следующий этап (после кучи попыток вчера замотался и ошибочно написал, что XML). Sub SendOzon() Const MULTIPART_BOUNDARY As String = "---------------------------0123456789012" Dim xhr As Object, myUrl As String, sURL As String, sMethod As String, sData As String, sHeaders As String Dim clientId As String, apiKey As String, ff As Integer
Set xhr = CreateObject("Microsoft.XMLHTTP") If xhr Is Nothing Then Set xhr = CreateObject("MSXML2.ServerXMLHTTP")
' По https://cb-api.ozonru.me/apiref/ru/#t-title_products_info sURL = "https://cb-api.ozonru.me" ' URL отладки sMethod = "/v1/category/attribute" sData = "{""category_id"": 17036076, ""language"": ""EN""}" clientId = "836" ' ID клиента (отладка) apiKey = "0296d4f2-70a1-4c09-b507-904fd05567b9" ' ключ (отладка)
myUrl = sURL & sMethod
xhr.Open "POST", myUrl, False xhr.setRequestHeader "User-Agent", "Mozilla 5.0" xhr.setRequestHeader "Content-Type", "application/json; charset=windows-1251" xhr.setRequestHeader "Content-Length", Len(sData) xhr.setRequestHeader "Client-Id", clientId xhr.setRequestHeader "Api-Key", apiKey xhr.send "" + sData 'postBody 'URLEncode(sEntityBody)
Range("A2").Value = xhr.responseText ' что получили Range("A3").Value = sData ' что слали
Set xhr = Nothing End Sub
|
|
|
10
|
Основные форумы / Вопросы по Excel и VBA / Как сделать запросы на озоне?
|
: 12.02.2021, 19:41:08
|
Добрый день всем! Наверняка тема обсуждалась, поискал, не нашел. Ткните куда-то или подскажите. У Озона есть API, описано на cb-api.ozonru.me/apiref/ru/ Искал и пробовал адаптировать примеры, но что-то не догоняю. Например, авторизация в тестовую среду в документации описана так: GET / HTTP/1.1 Host: cb-api.ozonru.me Client-Id: 836 Api-Key: 0296d4f2-70a1-4c09-b507-904fd05567b9 Content-Type: application/json
Как это сделать из экселя? Или вот запрос информации о товаре: POST /v2/product/info HTTP/1.1 Host: api-seller.ozon.ru Client-Id: 836 Api-Key: 0296d4f2-70a1-4c09-b507-904fd05567b9 Content-Type: application/json
{ "offer_id": "item_6060091", "product_id": 7154396, "sku": 150583609 }
Как послать запрос? В ответ будет XML, чем его удобнее разбирать, кстати? Что лучше использовать: WinHttpRequest, MSXML2.XMLHTTP60, MSXML2.ServerXMLHTTP ? Везде разное. Понимаю, для здешних гуру это плевый вопрос, но вот пока лишь простой GET с параметрами в адресе использовал, и только. Спасибо.
|
|
|
|
|