Cells>Format Cells Menu in Userform oproepen en gebruiken voor string

Status
Niet open voor verdere reacties.

Tilly1987

Gebruiker
Lid geworden
23 aug 2011
Berichten
20
Geachte helpmij helpers,

Allereerst dank ik u voor de tijd die u neemt. Laat ik het probleem zo goed mogelijk omschrijven. Ik wil een gebruiker toegang geven tot het Cells>Format Cells form (die normalerwijze te voorschijn komt door: rechtermuiknop op een cel, Format Cells... optie te klikken). Als dit gedaan wordt bestaat het menu echter uit zes tabbladen zijnde:

  1. Number
  2. Alignment
  3. Font
  4. Border
  5. Patterns
  6. Protection

Ik wil dat een gebruiker alleen het eerste tabblad te zien krijgt, dit krijg ik echter niet voor elkaar. De werkwijze die gevolgd wordt is als volgt. Ik probeer het format menu aan te roepen vanaf een Userform. De wijze waarop ik dit uitgevoerd heb is de menuknop als object te "setten" en uit te voeren. Om dit te doen heb ik alle CommandBars en CommandBarButtons uitgepluist door onderstaande code uit te voeren:

Code:
Sub Cmd_bar_list_plus_items()
Dim rg As Range
Dim cBar As CommandBar
'Dim cBar_But As CommandBarButton
'Dim cBar_But_Item As Variant

'Ik heb mijn Worksheet hernoemd naar Commandbars
Set rg = ThisWorkbook.Worksheets("Commandbars").Range("A2")

For Each cBar In Application.CommandBars
    rg.Value = cBar.Name
    rg.Offset(0, 1).Value = cBar.NameLocal
    rg.Offset(0, 2).Value = cBar.Index
    rg.Offset(0, 3).Value = cBar.Context
        
    Set rg = rg.Offset(1, 0)
    For i = 1 To cBar.Controls.Count
        rg.Offset(0, 1).Value = cBar.Controls(i).ID
        rg.Offset(0, 2).Value = cBar.Controls(i).Index
        rg.Offset(0, 3).Value = cBar.Controls(i).Caption
        Set rg = rg.Offset(1, 0)
    Next i
Next cBar

End Sub

Uit deze lijst heb ik de CommandBar Cell gekozen met Index nummer 29. Van deze CommandBar heb ik de CommandBarButton &Format Cells... gekozen met Index 11. Met onderstaande code heb ik het menu aangeroepen via VBA. Ik moet echter opmerken dat ik niet weet of dit de juiste procedure is om het op te roepen.

Code:
Sub set_cmd_bar()
Dim cBar As CommandBar
Dim cBar_But As CommandBarButton
Dim cBar_But_Item As Variant
Dim org_val As Variant
Dim rg As Range

'Range waarvan ik de eigenschappen gebruik
Set rg = ThisWorkbook.Worksheets("Sheet2").Range("A1")

'Commandbar Cell (index=29) wordt aan cBar gekoppeld
Set cBar = Application.CommandBars.Item(29)

'Commandbar button &Format Cells... (index=11) wordt aan cBar_But gekoppeld
Set cBar_But = cBar.Controls(11)

'Als cBar_But.Execute uitgevoerd wordt, wordt de huidige selectie als eigenschappen _
"bron" weergegeven.
rg.Select

'Dit toont het daadwerkelijke Excel menu dat anders via rechtermuisknop _
Format Cells... getoond wordt.
cBar_But.Execute

'Zet de ingestelde NumberFormat als cel.value
rg.Value = rg.NumberFormat

End Sub

Als deze code in een simpele Userform gegoten wordt, waarin een TextBox en een ander object aanwezig is (Dit om de TextBox te "Exitten"). Dan kan bij de Private Sub TextBox1_Enter() code, de code van Sub set_cmd_bar() ingevoerd worden, dit kan dan als volgt eruit zien:

Code:
Private Sub TextBox1_Enter()
Dim cBar As CommandBar
Dim cBar_But As CommandBarButton
Dim cBar_But_Item As Variant
Dim org_val As Variant
Dim rg As Range

Set rg = ThisWorkbook.Worksheets("Sheet2").Range("A1")
Set cBar = Application.CommandBars.Item(29)

Set cBar_But = cBar.Controls(11)
rg.Select
cBar_But.Execute
rg.Value = rg.NumberFormat
TextBox1.Value = rg.Value
End Sub

De code roept het menu op, maar ik zou graag de tabbladen 2 tm 6 willen verbergen (zie bovenstaande lijst voor namen van de tabbladen). Ik heb echter geen idee hoe ik dat precies zou moeten doen, wellicht iets met de CommandBarButton.Parameter?

Ik zou elke hulp/suggestie op prijs stellen.

Met vriendelijke groet,

Tilly
 
Dialog gevonden :)

Ik heb dit inmiddels opgelost. Eerste methode is veel te gecompliceerd (dit vermoeden had ik al :P). Affijn voor belang hebbende het kan alsvolgt gerealiseerd worden:

Code:
Sub FormatCellsNumberPane()
Dim myApp As Application
Dim wb As Workbook
Dim ws As Worksheet
Dim rg As Range

Dim myDialogs As Dialogs
Dim myDialog As Dialog
    
    Set myApp = Application
    Set myDialogs = myApp.Dialogs
    Set myDialog = myDialogs.Item(xlDialogFormatNumber)
    
    Set wb = myApp.ThisWorkbook
    Set ws = wb.ActiveSheet
    Set rg = ws.Range("A1")
    
    rg.Value = 1000
    
    rg.Select
    myDialog.Show
End Sub

Groet'n
Tilly
 
hetzelfde met:

Code:
Sub FormatCellsNumberPane()
 Application.Dialogs(42).Show
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan