Ho trovato molte risorse su Internet che fanno quasi quello che voglio fare, ma non del tutto. Ho un intervallo chiamato "lista dei giorni". Per ogni giorno nella dayList, voglio creare un pulsante su un modulo utente che eseguirà la macro per quel giorno. Sono in grado di add the buttons dynamically ma non so come passare il daycell.text dalla gamma di nome, al pulsante, per il gestore di eventi, alla macro: s Heres il codice che ho per creare il form utente:Assegna i gestori di eventi ai controlli sul modulo utente creato dinamicamente in VBA
Sub addLabel()
ReadingsLauncher.Show vbModeless
Dim theLabel As Object
Dim labelCounter As Long
Dim daycell As Range
Dim btn As CommandButton
Dim btnCaption As String
For Each daycell In Range("daylist")
btnCaption = daycell.Text
Set theLabel = ReadingsLauncher.Controls.Add("Forms.Label.1", btnCaption, True)
With theLabel
.Caption = btnCaption
.Left = 10
.Width = 50
.Top = 20 * labelCounter
End With
Set btn = ReadingsLauncher.Controls.Add("Forms.CommandButton.1", "runButton", True)
With btn
.Caption = "Run Macro for " & btnCaption
.Left = 80
.Width = 80
.Top = 20 * labelCounter
' .OnAction = "btnPressed"
End With
labelCounter = labelCounter + 1
Next daycell
End Sub
per aggirare il problema di cui sopra ho attualmente richiede all'utente di digitare la giornata si desidera eseguire (ad esempio, 1 ° giorno) e passare questo alla macro e funziona:
Sub B45runJoinTransactionAndFMMS()
loadDayNumber = InputBox("Please type the day you would like to load:", Title:="Enter Day", Default:="Day1")
Call JoinTransactionAndFMMS(loadDayNumber)
End Sub
Sub JoinTransactionAndFMMS(loadDayNumber As String)
xDayNumber = loadDayNumber
Sheets(xDayNumber).Activate
-Do stuff
End Sub
Così, per ognuno dei miei runButtons, si è necessario visualizzare daycell.text ed eseguire una macro che utilizza lo stesso testo di un parametro per selezionare il foglio di lavoro su cui fare il proprio lavoro.
Qualsiasi aiuto sarebbe fantastico. Ho visto le risposte che scrivono dinamicamente il codice vba, per gestire i macro, ma credo che in qualche modo possa essere fatto un po 'più elegante attraverso i parametri di passaggio, ma non so come. Molte grazie in anticipo!
[questo] (http://www.access-programmers.co.uk/forums/archive/index.php/t-88887.html) sembra vicino a quello che vuoi. OTOH perché non creare una casella combinata che popola da 'daylist' e un singolo pulsante di comando in grado di leggere il valore selezionato? –
Sto pensando che potrei dover andare per quell'opzione. Dal momento che la macro è utilizzata per lo screening e il caricamento dei dati, speravo che sarei stato in grado di creare una piccola schermata di avvio che avrebbe popolato una riga per ogni data e mostrare # di record, # di errori, ecc. E avere i pulsanti per ognuno di questi lo renderebbero un po 'più user friendly. Tuttavia, a meno che non riesca a trovare una soluzione più semplice, penso che il tuo suggerimento sarà il vincitore. – BiGXERO
Un altro pensiero ... Forse potresti creare una tabella delle informazioni correlate (numero giornaliero, # record, # errori, ecc.) In un foglio di lavoro speciale e catturare gli eventi click lì. –