Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Чтение содержания Immediate Window, Содержание Immediate Window
 
Подскажите, есть какие-то возможности в Excel программно прочитать в переменную содержание Immediate Window ?
Клонирование классов, Подскажите как клонировать класс без прямого присваивания всех class properites вручную
 
Да, спасибо большое. Действительно получается, что empl2 будет ссылаться на empl1. Но что интересно, пользовательские типы можно без проблем клонировать. И они клонируются без ссылок друг на друга. А с классами такое не получается....

Спасибо за ответ!
Клонирование классов, Подскажите как клонировать класс без прямого присваивания всех class properites вручную
 
Подскажите, можно ли в VBA делать клонирование классов?

Есть простой класс person с двумя properties:
Код
Public first_name As String
Public second_name As String

есть subroutine в котором инициируется этот класс в empl1
а затем нужно empl1 скопировать полностью в empl2

но прямое присваивание empl2=empl1 не работает.
Код
Sub vbvb()
    Dim empl1 As New person
    Dim empl2 As New person
    
    empl1.first_name = "andy"
    empl1.second_name = "Smith"    
    empl2 = empl2 ' здесь возникает ошибка...!
End Sub

Есть какой-нибудь выход?
Как в класс vba передать экземпляр другого класса?, Как в класс vba передать экземпляр другого класса?
 
Спасибо большое!!!!!
Как в класс vba передать экземпляр другого класса?, Как в класс vba передать экземпляр другого класса?
 
Подскажите, как в Class в VBA передать экземпляр другого класса?

Например есть Класс person с параметрами имя и фамилия
Есть класс group, который содержит коллекцию инстансов person

person и group инициируется программно (как employee и как department), в employee поочередно записываются параметры, а потом employee должен передаваться в в класс department, который добавляет экземпляр employee в свою коллекцию. Но на этапе передачи возникает ошибка.

Как правильно сделать?

Код
'Class person
Public first_name
Public last_name

'Class group
Public list_of_people As New Collection

Public Sub add_person(ByVal instance As person)
    list_of_people.Add (instance)
End Sub


Sub populate_department()

    Dim employee As New person
    Dim department As New group
    Dim index As Variant
    
    employee.first_name = "Peter"
    employee.last_name = "Ivanov"

    department.add_person (employee)   

    
End Sub
Хранение классов в коллекции VBA Excel, Можно ли в коллекцию добавлять класс byValue не как ссылку на экземпляр класса?
 
Точно! Всё работает! Спасибо большое!!!!
Хранение классов в коллекции VBA Excel, Можно ли в коллекцию добавлять класс byValue не как ссылку на экземпляр класса?
 
Подскажите, в VBA Excel есть такой объект как коллекция.
В него можно складывать экземпляры пользовательских классов.
Как я понимаю при добавлении экземпляра класса в коллекцию добавляется ссылка на класс, а не новый класс со своими самостоятельными значениями.
Другими словами, если в экземпляре класса изменить параметры, то член коллекции также будет иметь значения обновленных параметров. Хотя как утверждается, коллекция это read only.
А как в коллекцию добавить класс, который станет самостоятельным классом, т.е. добавить не byRef, а byVal?

Код
Sub pop()
    
    Dim index        
    Dim isthis() As New line    
    Dim interim As New line    
    Dim col1 As New Collection
    Dim col2 As New Collection
    
    ReDim Preserve isthis(1 To 1)
    isthis(1).num = 55
    isthis(1).val = 1500
    isthis(1).des = "portfolio 1"
    
    ReDim Preserve isthis(1 To 2)
    isthis(2).des = "portfolio 2"
    isthis(2).num = 40
    isthis(2).val = 2000
    
    col1.Add isthis(1)
    col2.Add isthis(2)
    
    isthis(1).num = 123    
    interim.des = "interim portfolio"
    interim.num = 555
    interim.val = 1    

    col2.Add interim 'здесь добавляем экземпляр класса    
    interim.val = 0 ' здесь изменяем параметр экземпляра после добавления ранее класса в коллекцию    
    Debug.Print col2(2).val  ' здесь будет 0, а хотелось бы чтобы было старое значение 1

End Sub
Изменено: vmetnev - 22.01.2019 11:03:19
Пользовательские функции для Excel из VB.NET, А можно ли в Excel использовать пользовательские функции, которые написаны в visual studio vb.net?
 
Спасибо!
Пользовательские функции для Excel из VB.NET, А можно ли в Excel использовать пользовательские функции, которые написаны в visual studio vb.net?
 
Подскажите, вот в excel есть пользовательские функции, которые можно создать и вызывать либо из ячейки, либо из макроса. Но у меня в проекте их стало так много, что управлять этим кодом очень сложно. Подскажите, а можно эти пользовательские функции написать в visual studio в vb.net и дальше как-то вызывать из excel? Это какую-то надстройку для excel нужно делать?  
Передача значений переменных из Excel через WinHTTP на сервер методом POST
 
Все! Заработало. Нужна строка, чтобы сервер парсил  передачу.
Код
http.SetRequestHeader "Content-type", "application/x-www-form-urlencoded"
Передача значений переменных из Excel через WinHTTP на сервер методом POST
 
В том смысле что в $HTTP_RAW_POST_DATA строка есть, но сами переменные на уровне объявленных имен не отлавливают значения...
Передача значений переменных из Excel через WinHTTP на сервер методом POST
 
Коллеги, подскажите, как правильно передавать значения переменных из Excel через WinHTTP на сервер методом POST?

Есть код:
Код
Sub postpost()

    Dim url As String
        url = "http://localhost:8080/handler3.php"
         Dim http As New WinHttpRequest
            http.Open "POST", url, False
            http.Send ("name=arina&age=25")
            
            Dim Resp As String: Resp = http.ResponseText
            Debug.Print Resp
End Sub

Сами переменные со значениями прописаны в строке http.Send
Но сервер их не видит
Как записать несвязанные диапазоны в переменную типа range
 
Спасибо большое!!!!!
Как записать несвязанные диапазоны в переменную типа range
 
Коллеги, помогите с одной штукой. Есть переменная типа Range. Ее можно получить из диапазона ячеек. А если этот диапазон сложный, т.е. A2:A8,C2:C8 ? Как записать такой диапазон в переменную через Cells?  
Формула макросом: по индексу в массиве получить значение
 
Есть формула, которая по индексу в массиве должна возвращать значение. код формулы:
Код
       Worksheets("PN").Range("C5").Offset(index1, index) = Application.WorksheetFunction.index(Worksheets("PT").Range("A1:CKF759"), _
        Application.WorksheetFunction.Match(target_date, Worksheets("PT").Range(Cells(1, index2), Cells(524, index2)), 0), _
       Application.WorksheetFunction.Match(target_ticker, Worksheets("PT").Range(Cells(1, 1), Cells(1, 3000)), 0))
Возвращает ошибку Application-defined or object-defined error.

Не могу понять в чем проблема. Поможете?
Изменено: vmetnev - 03.02.2017 14:58:45
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
Да и мне кажется решение хорошее. Есть база данных. Из нее нужно доставать данные по различным параметрам. Пишется пользовательская функция, которая принимает параметры, изменяет ячейку, запускается обработчик событий, который дает старт макросу, который обращается в базу, достает таблицу и печатает ее на лист.  
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
Hugo, спасибо большое. Просто размеры таблицы как раз не известны. Но в любом случае - главное результат. Все заработало. Большое спасибо.
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
Задача была из пользовательской функции в ячейке вызвать макрос, который записывает таблицу данных на лист. Пользовательские функции не позволяют проводить манипуляции с листом, только возвращают одно значение в ячейку, в которой записана пользовательская функция. В итоге написан solution, который включает в себя обработчик событий, пользовательскую функцию и сам макрос. Пользовательская функция устанавливает маркер, который позволяет обработчику событий запустить макрос и вывести таблицу на лист на следующей строке после после ячейки, где вызвана пользовательская функция.  
Автоматический запуск макроса при изменении значений в активной ячейке
 
Всем большое спасибо!
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
В любом случае, всем большое спасибо!
Автоматический запуск макроса при изменении значений в активной ячейке
 
В общем, реализовал следующим образом:

На лист вешается обработчик событий при изменении любой ячейки.  Обработчик запускает процедуру myMacro, если public variable masking = true
Код
Private Sub Worksheet_Change(ByVal activecell As Range)
     If masking = True Then Call myMacro
End Sub

Есть сама процедура, которая от активной ячейки на один ряд вниз записывает значение. И объявление masking как публичной переменной перед процедурой, конечно.
Код
Public masking As Boolean

Sub myMacro()

Dim rr As Integer
Dim cc As Integer
Dim index As Integer

rr = activecell.Row
cc = activecell.Cells

For index = 1 To 10

activecell.Offset(index) = index
Next index
masking = False

End Sub
Есть пользовательская функция, к которой можно обратиться на листе.
Код
Public Function plp() As String
    masking = True
    plp = "Done"
End Function

При обращении к этой функции на листе "=plp()" masking становится true. Обработчик событий отлавливает изменение листа, и так как masking = true запускает процедуру myMacro. По итогам исполнения myMacro masking становится false, чтобы процедура больше не запускалась, если не вызывается пользовательская функция.

В общем, наверное, очень криво, но работает. Буду рад любым комментариям!
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
В общем, реализовал следующим образом:

На лист вешается обработчик событий при изменении любой ячейки.  Обработчик запускает процедуру myMacro, если public variable masking = true
Код
Private Sub Worksheet_Change(ByVal activecell As Range)
     If masking = True Then Call myMacro
End Sub

Есть сама процедура, которая от активной ячейки на один ряд вниз записывает значение. И объявление masking как публичной переменной перед процедурой, конечно.
Код
Public masking As Boolean

Sub myMacro()

Dim rr As Integer
Dim cc As Integer
Dim index As Integer

rr = activecell.Row
cc = activecell.Cells

For index = 1 To 10

activecell.Offset(index) = index
Next index
masking = False

End Sub

Есть пользовательская функция, к которой можно обратиться на листе.
Код
Public Function plp() As String
    masking = True
    plp = "Done"
End Function
При обращении к этой функции на листе "=plp()" masking становится true. Обработчик событий отлавливает изменение листа, и так как masking = true запускает процедуру myMacro. По итогам исполнения myMacro masking становится false, чтобы процедура больше не запускалась, если не вызывается пользовательская функция.

В общем, наверное, очень криво, но работает. Буду рад любым комментариям!
Автоматический запуск макроса при изменении значений в активной ячейке
 
Это понятно. Я собственно хочу, чтобы MyMacro запускался при каждом изменении любой активной ячейки. Для этого нужно подставлять адрес в этот EventHandller
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
Ну почему неправильный? Есть библиотеки Bloomberg. Они добавляют напр. функцию BDH в качестве пользовательской функции, которая принимает параментры. Вводишь на лист =BDH("GAZP RX EQUITY";"PX_LAST";"01/01/2017";сегодня()), нажимаешь Enter, возвращается таблица значений цены акций  с 1 янв. по сегодняшний день. Все стабильно и корректно. Я пытаюсь реализовать тоже самое. Есть список значений по датам, через пользовательскую функцию задаю дату начала и конца периода, просто хочу получить диапазон значений между этими датами.  
Автоматический запуск макроса при изменении значений в активной ячейке
 
Есть следующий код процедуры:
Код
Sub MyMacro()
  Dim index As Integer

  For index = 1 To 10
    ActiveCell.Offset(index).Value = index
  Next index

End Sub
Процедура запускается, при изменении ячейки A1, следующим кодом:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range: Set rng = [A1:A1]
    If Not Intersect(rng, Target) Is Nothing Then MyMacro
End Sub
Как сделать, чтобы в rng подставлялся адрес активной ячейки?
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
Оформил, прошу прощения
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
Я просто не знаю как поменять тему. Может - "Как записать таблицу на лист путем обращения к пользовательской функции из ячейки"
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
"popCorn" это идентификатор, по его признаку формируется таблица. Я опустил код формирования таблицы. Везде пишут, что UDF не может менять значения в других ячейках. Но я точно знаю, что есть библиотеки, которые при обращении к UDF возвращают таблицу, перезаписывая значения в ячейках. Возможно, это реализовано через процедуру, которая запускается при изменении ячейки. Только как в нее передать адрес ячейки, которую нужно отслеживать?
Как записать таблицу на лист путем обращения к пользовательской функции из ячейки, функцией возвратить массив, который вставляется на лист как таблица
 
Коллеги, подскажите по как при обращении пользовательской функции возвращать на лист не одно значение, а таблицу? Функция должна возвращать массив, который вставляется как таблица на лист Excel. Предположим есть Public Function returnTable (ticker as string) as object, которая принимает строку в качестве параметра. Далее на следующей строке должна троиться таблица из массива 2х2. На листе пишу =returnTable("popCorn"). Но пишет ошибку. В VBA следующий код:
Код
Public Function returnTable(value as string) as object

  Dim myArray( 1 to 2, 1 to 2) as variant
  myArray(1,1)=1
  myArray(1,2)=2
  myArray(2,1)=3
  myArray(2,2)=4

 returnTable=myArray()

end Function
Изменено: vmetnev - 29.01.2017 15:13:53
Пользовательские типы данных excel vba, Пользовательские типы данных excel vba
 
Подскажите, может ли пользовательский тип данных включать в себя другие пользовательские типы?

Например:
Код
Type house
    name as string
    location as strong
flats as apartments

End Type:
Type apartments
    number as integer
    name as string
End Type
Страницы: 1 2 След.
Loading...