Làm sao để chuyển 1 chuỗi thành 1 tên đã khai báo biến

Liên hệ QC

Ếch Xanh

Thành viên tích cực
Tham gia
12/8/09
Bài viết
865
Được thích
1,572
Tôi không biết phải đặt tiêu đề cho Topic này như thế nào cho phải, nhưng cụ thể là như vầy, tôi làm một Form với 1 textbox, 2 CommandButton.

Với TextBox1 có giá trị là 1 thì:
PHP:
Dim TestMsg
Dim T1 As String, T2 As String, T3 As String, T4 As String, T5 As String, T6 As String
 
Private Sub Test1_Click()
  Select Case Val(TextBox1)
    Case 1: TestMsg = T1: MsgBox TestMsg = T1
    'Case 2: TestMsg = T2: MsgBox TestMsg = T2
    'Case 3: TestMsg = T3: MsgBox TestMsg = T3
    'Case 4: TestMsg = T4: MsgBox TestMsg = T4
    'Case 5: TestMsg = T5: MsgBox TestMsg = T5
    'Case 6: TestMsg = T6: MsgBox TestMsg = T6
  End Select
End Sub
 
Private Sub Test2_Click()
'Có cách nào chuyển TestMsg dưới đây thành TRUE như Test1???
  TestMsg = "T" & Val(TextBox1)
  MsgBox TestMsg = T1
End Sub

Khi TextBox1 = 1
Trường hợp 1, Nếu TextBox1 = 1 thì TestMsg = T1

Trường hợp 2, Nếu TextBox1 = 1 thì TestMsg = "T" & Val(TextBox1) ---> Cũng ra T1 (dĩ nhiên nó không bằng T1 khai báo)

Vì vậy, bằng cách nào để chuyển đổi Trường hợp 2 cho kết quả TestMsg = T1 chứ không phải bằng "T1".
 

File đính kèm

Tôi không biết phải đặt tiêu đề cho Topic này như thế nào cho phải, nhưng cụ thể là như vầy, tôi làm một Form với 1 textbox, 2 CommandButton.

Với TextBox1 có giá trị là 1 thì:
PHP:
Dim TestMsg
Dim T1 As String, T2 As String, T3 As String, T4 As String, T5 As String, T6 As String
 
Private Sub Test1_Click()
  Select Case Val(TextBox1)
    Case 1: TestMsg = T1: MsgBox TestMsg = T1
    'Case 2: TestMsg = T2: MsgBox TestMsg = T2
    'Case 3: TestMsg = T3: MsgBox TestMsg = T3
    'Case 4: TestMsg = T4: MsgBox TestMsg = T4
    'Case 5: TestMsg = T5: MsgBox TestMsg = T5
    'Case 6: TestMsg = T6: MsgBox TestMsg = T6
  End Select
End Sub
 
Private Sub Test2_Click()
'Có cách nào chuyển TestMsg dưới đây thành TRUE như Test1???
  TestMsg = "T" & Val(TextBox1)
  MsgBox TestMsg = T1
End Sub
Khi TextBox1 = 1
Trường hợp 1, Nếu TextBox1 = 1 thì TestMsg = T1

Trường hợp 2, Nếu TextBox1 = 1 thì TestMsg = "T" & Val(TextBox1) ---> Cũng ra T1 (dĩ nhiên nó không bằng T1 khai báo)

Vì vậy, bằng cách nào để chuyển đổi Trường hợp 2 cho kết quả TestMsg = T1 chứ không phải bằng "T1".
Đã hiểu rõ vấn đề của bạn. Tuy nhiên, xin vui lòng cho biết bạn áp dụng chuyện này trong trường hợp cụ thể nào vậy? (biết mục đích, tư vấn sẽ chính xác hơn)
Thông thường tôi sẽ cho mấy thằng T1, T2... vào chung 1 mảng
 
Upvote 0
Đã hiểu rõ vấn đề của bạn. Tuy nhiên, xin vui lòng cho biết bạn áp dụng chuyện này trong trường hợp cụ thể nào vậy? (biết mục đích, tư vấn sẽ chính xác hơn)
Thông thường tôi sẽ cho mấy thằng T1, T2... vào chung 1 mảng

Cụ thể là em làm 1 File chơi nhạc với Const T1 As String = "BaiNhac1.wav", Const T2 As String = "BaiNhac2.mp3", v.v...

Nếu cứ select hoài thì oải quá nên cho nó chuyển từ textbox thêm "T" và cộng với giá trị của Textbox để bằng với khai báo luôn, không phải select liên tục.
 
Upvote 0
Cụ thể là em làm 1 File chơi nhạc với Const T1 As String = "BaiNhac1.wav", Const T2 As String = "BaiNhac2.mp3", v.v...

Nếu cứ select hoài thì oải quá nên cho nó chuyển từ textbox thêm "T" và cộng với giá trị của Textbox để bằng với khai báo luôn, không phải select liên tục.
Dùng sự kiện UserForm_Initialize cho mọi thứ vào Dictionary mà làm
Ví dụ:
PHP:
Dim Dic As Object
Private Sub UserForm_Initialize()
  Dim i As Long
  Set Dic = CreateObject("Scripting.Dictionary")
  For i = 1 To 6
    Dic.Add i, "BaiNhac" & i & ".wav"
  Next
End Sub
Từ đây, muốn truy xuất sao mà chẳng được
Ví dụ:
PHP:
Private Sub Test2_Click()
  MsgBox Dic.Item(CLng(TextBox1))
End Sub
 
Upvote 0
Dùng sự kiện UserForm_Initialize cho mọi thứ vào Dictionary mà làm
Ví dụ:
PHP:
Dim Dic As Object
Private Sub UserForm_Initialize()
  Dim i As Long
  Set Dic = CreateObject("Scripting.Dictionary")
  For i = 1 To 6
    Dic.Add i, "BaiNhac" & i & ".wav"
  Next
End Sub
Từ đây, muốn truy xuất sao mà chẳng được

Dạ cám ơn Thầy, nhưng không thể được ạ, bởi Tên bài nhạc nó khác nhau (tại em ghi BaiNhac cho nó gọn), kế tiếp cái đuôi (.wav, .mp3...) cũng khác nhau luôn, vì vậy em mới chuyển về khai báo 1 kiểu là như vậy ạ.
 
Upvote 0
À, chắc dùng Range để giải quyết vấn đề, Chọn từ A1 đến An là tên bài hát, nếu textbox1 chạy tới số mấy tương đương với Range("A" & val(TextBox1)), có như vậy mới làm được, chứ không thể Convert 1 chuỗi thành cái label đã khai báo được.

(Chỉ tại mình không muốn cái Form liên quan đến Sheet thôi)
 
Upvote 0
Web KT

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

Back
Top Bottom