Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
28.03.2024, 15:53:57

Войти
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
  Просмотр сообщений
Страниц: [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
А разве столь нужны остальные файлы, чтобы посмотреть код? Улыбка
Это чтобы можно было прогнать. Улыбка
Цитировать
Код: (vb)
.Cells(6, "B") = ThisWorkbook.Path & Application.PathSeparator &  "MiraGoGt.xlsx"
Это меньшая из проблем. ))
Цитировать
2. Насколько знаю, диалоговые окна выбора файлов и папок на МАС и Windows различаются. Поэтому надо будет искать код диалогового окна под MAC и делать ветвление в зависимости от типа операционной системы. Что-то вроде:
Именно об этом речь в вопросе. Нашел разные вещи, почти все на applescript, но я его не знаю, чтобы проверить, да и не на чем.

Цитировать
Но там надо более капитально в тему погружаться, т.к. разные версии Excel и MAC могут требовать различные методы. Но это не точно Улыбка
И вот про это тоже говорилось на разных ресурсах.

И попутно, Дмитрий, спасибо Вам большое за сайт и этот форум, много полезного находил. Ваша работа помогает людям.
3  Основные форумы / Вопросы по Office для MAC / Re:Открытие файла VBA Mac MS Office : 20.08.2021, 13:21:17
Второе вложение
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?

Код: (vb)
#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


Почему вопрос - недавно такое видел:

Код: (vb)
#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 с параметрами в адресе использовал, и только.
Спасибо.
Страниц: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru