กระทู้เก่าบอร์ด อ.Yeadram
        
           1,276   4		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        อยากรู้วิธีเปลี่ยนชื่อ control ให้เป็นไปตาม for ..      
    
      เช่น เรามีชื่อ control ดังนี้ cmd1a, cmd1b, cmd1c, cmd2a, cmd2b, cmd2c, cmd3a, cmd3b, cmd3c ทำอย่างไรถึงจะให้ชื่อเปลี่ยนไปตาม for....loop
Dim strcav, n As String
Dim i As Integer
For i = 1 To 3
strcav = "A"
n = "cmd" & i & "a"
rst.FindFirst ("Sec = " & i)
If rst.NoMatch Then
Me!n.Caption = "X1"
Exit Sub
End If
rst.FindFirst ("Cav = '" & strcav & "'")
If rst.NoMatch Then
Me!n.Caption = "X2"
Exit Sub
End If
Me!n.Caption = rst.Fields("No")
Next i
แบบว่าไปหา No มาใส่เป็นชื่อปุ่ม ช่วยแนะนำด้วยครับ
    
  Dim strcav, n As String
Dim i As Integer
For i = 1 To 3
strcav = "A"
n = "cmd" & i & "a"
rst.FindFirst ("Sec = " & i)
If rst.NoMatch Then
Me!n.Caption = "X1"
Exit Sub
End If
rst.FindFirst ("Cav = '" & strcav & "'")
If rst.NoMatch Then
Me!n.Caption = "X2"
Exit Sub
End If
Me!n.Caption = rst.Fields("No")
Next i
แบบว่าไปหา No มาใส่เป็นชื่อปุ่ม ช่วยแนะนำด้วยครับ
				4 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    2 @R03928    
        
  
      ปุ่มมีถึง 40 ปุ่มตั้ง cmd1a.....1d ไปจนถึงปุ่ม cmd10a.....10d ต้องการอ่านเอาค่าใน Field No มาใส่เป็น Caption ของปุ่ม โดยมีเงื่อนไข ว่าปุ่มชื่อ cmd1a ต้องไปเอาค่า No มาจาก record ที่มีค่าของ Field Sec=1 และ Field Cav=A ก็ทำอย่างนี้ไปเรื่อยๆ จนครบ 40 ปุ่ม ถ้าหาของปุ่มไหนไม่เจอก็ให้ใส่สัญลักษณ์ XX ผมทำสำเร็จแล้วด้วย code ที่ซ้ำกันแต่เปลี่ยนชื่อปุ่มรับค่าไปทีละปุ่ม แต่อยากทำให้ code สั้นลงโดยใช้ For เข้ามาช่วย แต่ผมยังใหม่เกินไปสำหรับ vba จึงยังทำไม่สำเร็จ ขอคำชี้แนะด้วยครับ
No, Sec เป็น interger, Cav เป็นสตริง
    
  No, Sec เป็น interger, Cav เป็นสตริง
        
    3 @R03930    
        
  
      dim ctl as control
dim strR as string
Dim intM as integer
for each ctl in controls
if left(ctl.name,3)="cmd" then
strR = ucase(right(ctl.name,1))
intM= cInt(mid(ctl.name,3, len(ctl.name)-1))
ctl.caption = nz(dlookup("[NO]", "TABLE1", "[Sec] = " & intM & " AND [Cav] Like '" & strR & "'"),"XX")
end if
loop
    
  dim strR as string
Dim intM as integer
for each ctl in controls
if left(ctl.name,3)="cmd" then
strR = ucase(right(ctl.name,1))
intM= cInt(mid(ctl.name,3, len(ctl.name)-1))
ctl.caption = nz(dlookup("[NO]", "TABLE1", "[Sec] = " & intM & " AND [Cav] Like '" & strR & "'"),"XX")
end if
loop
        
    4 @R03952    
        
    
      ขอบคุณมากครับ เดี๋ยวจะไปลองดู การต่อสตริงนี่ยากจัง code นี้คงเป็นบทเรียนที่ดีสำหรับผมทีเดียว    
    
  
      Time: 0.4985s
    
      
		
เปลี่ยนชื่อ หรือเปลี่ยน caption
ยิ่งอ่านโค้ด ยิ่งงง
rst ของคุณมีข้อมูลอะไรบ้าง
strcav ของคุณ ทำไม ต้อง "A"
ตัวอย่างคอนโทรลของคุณมีชื่อลงท้าย ทั้ง a, b, c
แล้วค่าของ n ทำไมเห็นแค่ a
n = "cmd" & i & "a"
ตกลงจะทำงานกับปุ่มใดบ้าง ทั้งหมด หรือเฉพาะที่ลงท้ายด้วย a