Chức năng cái nút đó, nếu trên form hoặc trên sheet giống như control toggle button: Nhấn 1 cái chìm xuống, nhấn 1 cái nổi lên. Giá trị tương ứng của nó là True và False.
Tương tự như trên là thế nào bạn?
Tôi đọc bài #20 từ mấy ngày trước và muốn xem cái nút đó mặt mũi thế nào, hoạt động ra sao nhưng đành chịu. Vì nó luôn luôn "đơ". Tôi tìm đọc thì thấy nói phải dùng Tablet PC.
Bạn chọn cách tốn công ít nhất: "giống A". Nhưng nếu người muốn giúp không biết A mặt mũi thế nào thì cũng đành chịu.
Tôi nghĩ bạn nên dùng cách miêu tả. Không cần biết Excel đã có nút ấy chưa, bạn có thể miêu tả nhu cầu của mình: "tôi muốn tạo nút mà có lúc nó enabled (thỏa đk nào đó), có lúc disabled (không thỏa đk nào đó). Khi click vào nó thì nếu lần trước đã làm "việc A" thì lần này sẽ làm "việc B", và ngược lại (tôi đoán thế vì bạn nói về Checkbox nào đó)"
Đại loại phải miêu tả như trên, chi tiết và đầy đủ.
Tôi hơi tò mò: tại sao bạn nghĩ "nó" giống Checkbox? "Nó" cũng có "dấu kiểm" à?
Thử giải thích:
Chức năng cái nút đó, nếu trên form hoặc trên sheet giống như control toggle button: Nhấn 1 cái chìm xuống, nhấn 1 cái nổi lên. Giá trị tương ứng của nó là True và False.
Đúng như vậy Anh, ý em là muốn như thế
Ví dụ: Khi nhấn nút lần đầu tiên thì nút ấy được đánh dấu (xem là True) thì trên bảng tính được phép thực hiện một việc nào đó (dùng lệnh copy chẳng hạn). Nhấn tiếp 1 lần nữa, nút lệnh bỏ đánh dấu và bảng tính không cho phép thực hiện việc đó (không cho phép dùng lệnh copy).
Hoặc có thể đơn giản như vầy:
Nếu nút lệnh được đánh dấu (True) thì MsgBox "True"
Nếu nút lệnh không được đánh dấu (False) thì Msgbox "False"
CheckBox có thể làm việc này nhưng em muốn như nút lệnh trên, mong được giúp đỡ của các anh chị. Em xin cảm ơn.
Cảm ơn Anh, nhưng em không biết tên của nó. Ví dụ như Conbobox tên là comboBox, Button tên là button, vậy toggle button tên là gì? em thử togglebutton bị lỗi
Em viết Code tạo ToggleButton trong XN2007 như sau nhưng không biết sai ở đâu mà không được
[GPECODE=vb]<toggleButton id="MyToggButton" size="normal"
onAction=""Toggle_is_clicked"" getPressed=""GetPressed" " imageMso=""Chart3DPieChart""/>[/GPECODE]
Em viết Code tạo ToggleButton trong XN2007 như sau nhưng không biết sai ở đâu mà không được
[GPECODE=vb]<toggleButton id="MyToggButton" size="normal"
onAction=""Toggle_is_clicked"" getPressed=""GetPressed" " imageMso=""Chart3DPieChart""/>[/GPECODE]
Em làm các hàm đó như sau:
[GPECODE=vb]Dim ExlObj As New wkbEvent
Sub Toggle_is_clicked(control As IRibbonControl, pressed As Boolean)
Dim ws As Worksheet
Set ws = ActiveWorkbook.Worksheets(1)
If pressed = True Then
If ExlObj Is Nothing Then Set ExlObj = New wkbEvent
Else
Set ExlObj = Nothing
End If
End Sub
Public Function GetPressed(ByVal control As IRibbonControl) As Boolean
GetPressed = False
End Function[/GPECODE]
Lỗi khi kích hoạt lần đầu tiên khi mở ra thôi, sau đó (các lần kích sau không còn báo lỗi) code chạy ngon
Em làm các hàm đó như sau:
[GPECODE=vb]
Public Function GetPressed(ByVal control As IRibbonControl) As Boolean
GetPressed = False
End Function[/GPECODE]
Lỗi khi kích hoạt lần đầu tiên khi mở ra thôi, sau đó (các lần kích sau không còn báo lỗi) code chạy ngon
Private rb As IRibbonUI
'Callback for customUI.onLoad
Sub RibbonLoad(ribbon As IRibbonUI)
Set rb = ribbon
End Sub
'Callback for togglebutton1 onAction
Sub toggleMacro(control As IRibbonControl, pressed As Boolean)
MsgBox control.ID & " pressed is " & pressed
End Sub
'Callback for togglebutton1 getPressed
Sub IsButtonToggled(control As IRibbonControl, ByRef returnedVal)
If control.ID = "togglebutton1" Then
returnedVal = Sheet1.Range("A1").Value = "toogle"
Else
returnedVal = Sheet1.Range("A2").Value = "toogle"
End If
End Sub
End Sub
--------------
Sub IsButtonToggled được gọi 1 lần đầu tiên (mở thẻ) để thiết lập trạng thái của toggle button. Nếu vào thời điểm "chào buổi sáng" ta luôn để toggle button ở trạng thái không nhấn thì chỉ cần bỏ getPressed="IsButtonToggled" trong XML vì Pressed = FALSE là mặc định. Sau thời điểm "chào buổi sáng" thì trạng thái của toggle button sẽ thay đổi qua mỗi lần nhấn toggle button.
Ta có thể cho mỗi toggle button một Macro riêng biệt. Trong XML tôi cho chung một Macro: onAction="toggleMacro". Lúc này thì trong toggleMacro phải dùng control để xác định nút nào được nhấn để xử lý tiếp.
---------------
Về các thuộc tính của mọi nút thì bạn nên đọc tại
Private rb As IRibbonUI
'Callback for customUI.onLoad
Sub RibbonLoad(ribbon As IRibbonUI)
Set rb = ribbon
End Sub
'Callback for togglebutton1 onAction
Sub toggleMacro(control As IRibbonControl, pressed As Boolean)
MsgBox control.ID & " pressed is " & pressed
End Sub
'Callback for togglebutton1 getPressed
Sub IsButtonToggled(control As IRibbonControl, ByRef returnedVal)
If control.ID = "togglebutton1" Then
returnedVal = Sheet1.Range("A1").Value = "toogle"
Else
returnedVal = Sheet1.Range("A2").Value = "toogle"
End If
End Sub
End Sub
--------------
Sub IsButtonToggled được gọi 1 lần đầu tiên (mở thẻ) để thiết lập trạng thái của toggle button. Nếu vào thời điểm "chào buổi sáng" ta luôn để toggle button ở trạng thái không nhấn thì chỉ cần bỏ getPressed="IsButtonToggled" trong XML vì Pressed = FALSE là mặc định. Sau thời điểm "chào buổi sáng" thì trạng thái của toggle button sẽ thay đổi qua mỗi lần nhấn toggle button.
Ta có thể cho mỗi toggle button một Macro riêng biệt. Trong XML tôi cho chung một Macro: onAction="toggleMacro". Lúc này thì trong toggleMacro phải dùng control để xác định nút nào được nhấn để xử lý tiếp.
---------------
Về các thuộc tính của mọi nút thì bạn nên đọc tại
Chào mọi người, mình đang thực hành các thao tác với Ribbon và có vấn đề thắc mắc như hình bên dưới. Xin hỏi làm cách nào để khi click vào 1 cell bất kỳ nào đó (SelectionChange) thì EditBox "Ho va Ten" trên Ribbon thể hiện đúng nội dung của Activecell.
Ví dụ: chọn [A1] --> EditBox = "Dũng", ...
Mọi người xem giúp file đính kèm, code tạo ribbon viết trong Custom UI Editor For MSO. Xin cảm ơn!
Chào mọi người, mình đang thực hành các thao tác với Ribbon và có vấn đề thắc mắc như hình bên dưới. Xin hỏi làm cách nào để khi click vào 1 cell bất kỳ nào đó (SelectionChange) thì EditBox "Ho va Ten" trên Ribbon thể hiện đúng nội dung của Activecell.
Ví dụ: chọn [A1] --> EditBox = "Dũng", ...
Mọi người xem giúp file đính kèm, code tạo ribbon viết trong Custom UI Editor For MSO. Xin cảm ơn!
'Private Sub Worksheet_Change(ByVal Target As Range)
' If Target.Address = "$B$1" Then
' If Target.Value <> "Em lay bac" Then
' currText = "H" & ChrW(227) & "y nh" & ChrW(7853) & "p: Em lay bac"
' Else
' currText = "Em l" & ChrW(7853) & "y b" & ChrW(225) & "c"
' End If
' DoText
' End If
'End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
currText = Target.Value
DoText
End If
End Sub
Module1
Mã:
Private rb As IRibbonUI
Public currText As String
'Callback for customUI.onLoad
Sub RibbonLoad(ribbon As IRibbonUI)
Set rb = ribbon
End Sub
'Callback for editBox1 onChange
Sub EditBoxTextChanged(control As IRibbonControl, text As String)
MsgBox text
End Sub
'Callback for editBox1 getText
Sub GetEditBoxText(control As IRibbonControl, ByRef returnedVal)
returnedVal = currText
End Sub
Sub DoText()
rb.InvalidateControl ("editBox1")
End Sub
'Private Sub Worksheet_Change(ByVal Target As Range)
' If Target.Address = "$B$1" Then
' If Target.Value <> "Em lay bac" Then
' currText = "H" & ChrW(227) & "y nh" & ChrW(7853) & "p: Em lay bac"
' Else
' currText = "Em l" & ChrW(7853) & "y b" & ChrW(225) & "c"
' End If
' DoText
' End If
'End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
currText = Target.Value
DoText
End If
End Sub
Module1
Mã:
Private rb As IRibbonUI
Public currText As String
'Callback for customUI.onLoad
Sub RibbonLoad(ribbon As IRibbonUI)
Set rb = ribbon
End Sub
'Callback for editBox1 onChange
Sub EditBoxTextChanged(control As IRibbonControl, text As String)
MsgBox text
End Sub
'Callback for editBox1 getText
Sub GetEditBoxText(control As IRibbonControl, ByRef returnedVal)
returnedVal = currText
End Sub
Sub DoText()
rb.InvalidateControl ("editBox1")
End Sub
Tuyệt cú mèo anh ơi, như vậy là có thể ghi nội dung vào EditBox ở thời điểm bất kỳ. Em thắc mắc là liệu có thể làm được bài toán ngược hay không? Tức là, vào 1 thời điểm bất kỳ làm sao mình đọc được nội dung của EditBox hả anh???
Ví dụ: Tại thời điểm bất kỳ EditBox đang có nội dung là "Abc123", phải viết code làm sao để lấy được chuỗi "Abc123", một lần nữa thank a rất nhiều!
Tuyệt cú mèo anh ơi, như vậy là có thể ghi nội dung vào EditBox ở thời điểm bất kỳ. Em thắc mắc là liệu có thể làm được bài toán ngược hay không? Tức là, vào 1 thời điểm bất kỳ làm sao mình đọc được nội dung của EditBox hả anh???
Ví dụ: Tại thời điểm bất kỳ EditBox đang có nội dung là "Abc123", phải viết code làm sao để lấy được chuỗi "Abc123", một lần nữa thank a rất nhiều!