Присвойте по щелчку функцию VBA динамично созданной кнопке на Excel Userform

IIUC, вам нужно:

df['visit']=df.groupby('id')['date'].transform(lambda x: pd.factorize(x)[0])
print(df)
<час>
    id   date purchase  visit
0  id1  date1      $10      0
1  id1  date1      $50      0
2  id1  date2      $30      1
3  id2  date1      $10      0
4  id2  date2      $10      1
5  id2  date3      $10      2
9
задан notnot 19 February 2009 в 19:24
поделиться

4 ответа

Необходимо динамично создать код / обработчики событий для каждой кнопки.

Требуется немного выполнения - посмотрите здесь: http://navpadexcel.blogspot.com/2006/11/httpwwwcpearsoncomexcelvbehtm.html

Лучший путь мог бы состоять в том, чтобы создать набор кнопок на форме (как многие, поскольку Вы думаете, что Вам будет нужно), заранее. Создайте код обработчика событий также. Сделайте их всех скрытыми первоначально.

Затем, когда Ваша форма открывается, можно динамично изменить подписи кнопки, сделать их видимыми и переместить их. Код события, который Вы создали первоначально, будет связан с активированными кнопками как ожидалось.

9
ответ дан 4 December 2019 в 08:02
поделиться

Я тоже смотрел на это. Кажется, вы можете запустить макрос, используя свойство onClick:

Command1.OnClick = "Macro1"

Затем создайте макрос с этим именем, который запускает нужную функцию. Это моя хитрость, пока я не найду что-нибудь получше.

0
ответ дан 4 December 2019 в 08:02
поделиться

Приведенный ниже код должен работать

Dim NewButton As OLEObject
Dim CodeModule As Object

Set NewButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
    Link:=False, DisplayAsIcon:=False, Left:=52.5, Top:=Hght, _
    Width:=202.5, Height:=26.25)
NewButton.Object.Caption = "Click Me!"
Set CodeModule = ActiveWorkbook.VBProject.VBComponents.VBE.ActiveCodePane.CodeModule
CodeModule.InsertLines CodeModule.CreateEventProc("Click", NewButton.Name) + 1, vbTab & "MsgBox ""Hello world"""
2
ответ дан 4 December 2019 в 08:02
поделиться
Sub Oval1_Click()
    file = ActiveWorkbook.Name
    Set Output = Workbooks.Add()
    ActiveWorkbook.SaveAs Filename:="Try.xls"        
    Sheets(1).Select        
    ActiveSheet.Buttons.Add(460, 10, 140, 30).Select
    ActiveSheet.Buttons.Text = "DATA"      
    ActiveSheet.Shapes("Button 1").Select
    Selection.OnAction = "Book1.xlsm!data_Click"
End Sub

Sub data_Click()      
    MsgBox "you have clicked me"       
    ActiveSheet.DrawingObjects.Delete        
End Sub
1
ответ дан 4 December 2019 в 08:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: