Làm sao chuyển chuổi CHỈ THỊ MÀU SẮC thành GIÁ TRỊ

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,952
Ví dụ tôi gõ vào cell A1 chữ vbRed
Có cách nào tham chiếu đến cell A1 để lấy được kết quả = 3 hay không?
Tức tương đương với đoạn
Range("A1").Interior.Color = vbRed
Trong đó chữ vbRed trong code tôi tham chiếu từ cell A1 (chứ không phải gõ vào)
 
Ví dụ tôi gõ vào cell A1 chữ vbRed
Có cách nào tham chiếu đến cell A1 để lấy được kết quả = 3 hay không?
Tức tương đương với đoạn
Range("A1").Interior.Color = vbRed
Trong đó chữ vbRed trong code tôi tham chiếu từ cell A1 (chứ không phải gõ vào)
Chắc mình phải tự tạo ra quá thầy ơi. có 56 màu chắc là phải viết 56 case.
 
Upvote 0
Ví dụ tôi gõ vào cell A1 chữ vbRed
Có cách nào tham chiếu đến cell A1 để lấy được kết quả = 3 hay không?
Tức tương đương với đoạn
Range("A1").Interior.Color = vbRed
Trong đó chữ vbRed trong code tôi tham chiếu từ cell A1 (chứ không phải gõ vào)
Theo mình nghĩ thì không được. Bởi vì mặc dù trên thực tế giá trị của [A1] và tên các hằng màu sắc đều kiểu String nhưng hồi giờ chỉ thấy khai báo kiểu dữ liệu cho hằng, biến chứ chẳng bao giờ thấy khai báo kiểu dữ liệu cho tên hằng, tên biến cả. Do đó, không thể lấy chuỗi "vbRed" để thay cho tên hằng vbRed được. Sao bạn lại không nghĩ đến chuyện lập một bảng tham chiếu hằng màu sắc? Đại loại như vầy nè.
 

File đính kèm

Upvote 0
Theo mình nghĩ thì không được. Bởi vì mặc dù trên thực tế giá trị của [A1] và tên các hằng màu sắc đều kiểu String nhưng hồi giờ chỉ thấy khai báo kiểu dữ liệu cho hằng, biến chứ chẳng bao giờ thấy khai báo kiểu dữ liệu cho tên hằng, tên biến cả. Do đó, không thể lấy chuỗi "vbRed" để thay cho tên hằng vbRed được. Sao bạn lại không nghĩ đến chuyện lập một bảng tham chiếu hằng màu sắc? Đại loại như vầy nè.
Không bạn à! Nếu lập bảng thì mình không cần
Đại khái mình cần 1.. "cái gì đó..." gần gần giống như hàm INDIRECT của Excel ấy
Mình cần giải pháp này cho nhiều bài toán khác cơ (có liên quan đến hằng)
Lý nào lại vô phương nhỉ?
 
Lần chỉnh sửa cuối:
Upvote 0
Tìm trên Google, tôi phát hiện hình như VB.NET làm được vụ này:
http://msdn.microsoft.com/en-us/library/ms606533.aspx
Thế VB6 và VBA chẳng lẽ lại bó tay sao ta?

Trong .NET làm được bởi họ dùng một thư viện convert, bản chất là họ lập trình ra hàm convertStrColor và nó chạy trong môi trường lập trình. Trong VB6 thì họ cung cấp cho ta các hằng số của các màu cơ bản (vbRed, vbBlue,...), không có hàm convert như bên .NET, nếu cần mình cũng viết ra hàm để convert trong VB6, khi đó 2 bên bằng nhau :).

Vấn đề là trong Worksheet không Excel không trợ sẵn các hằng số về màu (giống như các hằng TRUE = 1; FALSE = 0). Vậy chúng ta buộc phải tự tạo rồi. Cách đơn giản giản mà không cần lập trình là dùng Name và gán giá trị cho nó. Ví dụ tạo Name xlRed và ReferTo = 3.

Như vậy trong công thức ta có thể dùng Name như sau:

= IF(A1 = xlRed, "Màu đỏ", "Không biết")
 
Upvote 0
Em nghĩ cái này dính tới Class đây! Thầy có thể xì 1 chút bí quyết được không? Please..
Thân.
 
Upvote 0
Em nghĩ cái này dính tới Class đây! Thầy có thể xì 1 chút bí quyết được không? Please..
Thân.
Tôi không nghĩ rằng Class có thể giải quyết được đâu, vì như TuanVNUNI đã nói: "VB và VBA không có những thư viện chuyên làm việc này"
------------------------
Trong .NET làm được bởi họ dùng một thư viện convert, bản chất là họ lập trình ra hàm convertStrColor và nó chạy trong môi trường lập trình. Trong VB6 thì họ cung cấp cho ta các hằng số của các màu cơ bản (vbRed, vbBlue,...), không có hàm convert như bên .NET, nếu cần mình cũng viết ra hàm để convert trong VB6, khi đó 2 bên bằng nhau :).
Vậy Tuân cho hỏi với hàm API thì sao? Cụ thể tôi thấy API có hàm SetTextColor nhưng chưa biết cách dùng (chỉ "cảm giác" vì cái tên của nó)
Tuân cho biết ý kiến với!
 
Upvote 0
Em nghĩ cái này dính tới Class đây! Thầy có thể xì 1 chút bí quyết được không? Please..
Thân.

Vụ này viết class thì cũng chỉ là tạo một đối tượng chứa các hàm convert chuỗi sang trị số màu thôi, nên không cần dùng class bạn à.

Vậy Tuân cho hỏi với hàm API thì sao? Cụ thể tôi thấy API có hàm SetTextColor nhưng chưa biết cách dùng (chỉ "cảm giác" vì cái tên của nó)
Tuân cho biết ý kiến với!

Hàm API SetTextColor có tác dụng thiết lập màu để vẽ chữ chứ không mang tính chất convert anh ạ.

Ví dụ về viết chữ màu đỏ bằng các hàm API trong Form của VB6:

Mã:
Private Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" Alias "SetTextColor" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long

Dim DC&, PrevColor&

Private Sub Form_Paint()
[INDENT]DC = GetDC(Me.Hwnd)[COLOR="SeaGreen"] 'Nhận điều khiển để vẽ[/COLOR]
PrevColor = SetTextColor(DC, RGB(255, 0, 0))[COLOR="SeaGreen"] 'Đặt màu đỏ của chữ trên điều khiển để vẽ[/COLOR]
TextOut DC, 10, 50, "Vẽ chữ màu đỏ", Len("Vẽ chữ màu đỏ") [COLOR="SeaGreen"] 'Vẽ chữ ở tọa độ x=10: y=50[/COLOR]
SetTextColor DC, PrevColor [COLOR="SeaGreen"] 'Hoàn trả màu trước của chữ cho điều khiển để vẽ[/COLOR]
[/INDENT]
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Không rõ ý của NDU có phải thế này không nhưng cứ gửi mọi người cùng tham khảo chút, vì tôi thấy cái ScriptControl cũng có nhiều thứ khá hay.
 

File đính kèm

Upvote 0
Không rõ ý của NDU có phải thế này không nhưng cứ gửi mọi người cùng tham khảo chút, vì tôi thấy cái ScriptControl cũng có nhiều thứ khá hay.
Ôi chao ôi
Ngon hơn hải sản luôn!
Đơn giản đến không ngờ! Vậy là xong, tôi sẽ áp dụng món này vào rất nhiều bài toán liên quan đến xử lý chuổi
Cảm ơn rollover79 ---> Thanks thêm vài phát nữa!
-------------------------------
Tôi dùng cái ScriptControl mà bạn hướng dẩn để làm code này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then
    With CreateObject("MSScriptControl.ScriptControl")
      .Language = "VBScript"
      MsgBox .Eval([A1])
    End With
  End If
End Sub
Mấy hằng số như vbRed, vbBlue..., vbOK, vbCancel thì ngon lành
Nhưng có 1 vài hằng số không hoạt động, chẳng hạn là vbSystem (lý ra nó phải =4)
Bạn gợi ý thêm cho tôi với!
 
Lần chỉnh sửa cuối:
Upvote 0
Ôi chao ôi
Ngon hơn hải sản luôn!
Đơn giản đến không ngờ! Vậy là xong, tôi sẽ áp dụng món này vào rất nhiều bài toán liên quan đến xử lý chuổi
Cảm ơn rollover79 ---> Thanks thêm vài phát nữa!
-------------------------------
Tôi dùng cái ScriptControl mà bạn hướng dẩn để làm code này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then
    With CreateObject("MSScriptControl.ScriptControl")
      .Language = "VBScript"
      MsgBox .Eval([A1])
    End With
  End If
End Sub
Mấy hằng số như vbRed, vbBlue..., vbOK, vbCancel thì ngon lành
Nhưng có 1 vài hằng số không hoạt động, chẳng hạn là vbSystem (lý ra nó phải =4)
Bạn gợi ý thêm cho tôi với!
Khi set Language là VBScript thì nó chỉ thực thi được các hằng và các câu lệnh của VBScript mà thôi. VBA và VBScript gần giống nhau nhưng không hoàn toàn giống nhau, và nếu ai đã từng làm về VBScript sẽ thấy rất tiếc là VBScript không có vbSystem. Nên không thể sử dụng nó được.
 
Upvote 0
Khi set Language là VBScript thì nó chỉ thực thi được các hằng và các câu lệnh của VBScript mà thôi. VBA và VBScript gần giống nhau nhưng không hoàn toàn giống nhau, và nếu ai đã từng làm về VBScript sẽ thấy rất tiếc là VBScript không có vbSystem. Nên không thể sử dụng nó được.
Vậy cho mình hỏi thêm: Làm sao biết được hằng số nào thuộc VBScript?
Ngoài ra: Có thể set Language là.. cái gì nữa?
 
Upvote 0
Vậy cho mình hỏi thêm: Làm sao biết được hằng số nào thuộc VBScript?
Ngoài ra: Có thể set Language là.. cái gì nữa?
Language thuộc Script thì tôi mới chỉ biết được có VBScript và JavaScript thôi, còn các Language khác thì chưa làm bao giờ nên chưa biết.
Để biết được hằng số nào thuộc VBScript thì chỉ có thể thử trực tiếp chứ không thế nhớ hết được. Bác có thể dùng 1 trình editor nào đó có support VBScript để kiểm tra. Nếu có cài Visual Studio 6 thì nó có sẵn môi trường Microsoft Visual InterDev 6.0(nếu chưa có thì có thể cài thêm), sau đó tạo 1 file trắng có phần mở rộng là *.asp(vd: test.asp), sau mở file này ra bằng Microsoft Visual InterDev, gõ cái gì đó vào giữa 2 thẻ <%%> rồi nhấn Ctrl+Space nó sẽ suggest những cái nào mà nó có.
attachment.php
 

File đính kèm

  • 123.GIF
    123.GIF
    4.4 KB · Đọc: 34
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom