กระทู้เก่าบอร์ด อ.Yeadram
        
           20,009   68		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        คำสั่ง print report ที่ต่างภาษากัน ทำอย่างไรค่ะ      
    
      รบกวนท่านอาจารย์และท่านผู้รู้หน่อยค่ะ พอดีมีลูกค้า 2 ประเภท คือ ใช้ บิลภาษาไทย กับภาษา อังกฤษ ค่ะ เวลา ปริ้น รีพอท จึงต้อง สั่งปริ้น ตามแบบของลูกค้า ลองใช้ คำสั่ง dlookup ไป ก็ยังไม่สามารถทำได้ ค่ะ รบกวนท่านผู้รู้ช่วยแก้ได้ไหมค่ะ 
function ที่หนูพยายามเขียน ประมาณนี้ค่ะ แค่ทำยังไงๆ โปรแกรม ก็ ปริ้นแต่รีพอท ภาษาไทย
Function PrintInvoice(OrderID As Long) As Boolean
Dim Result
Result = DLookup("[Language]", "Customers", "Language")
If Result = "TH" Then
DoCmd.OpenReport "InvoiceTH", acViewPreview, , "[Order ID]=" & OrderID, acDialog
Else
DoCmd.OpenReport "InvoiceEN", acViewPreview, , "[Order ID]=" & OrderID, acDialog
End If
End Function
รบกวนหน่อยนะค่ะ
    
  function ที่หนูพยายามเขียน ประมาณนี้ค่ะ แค่ทำยังไงๆ โปรแกรม ก็ ปริ้นแต่รีพอท ภาษาไทย
Function PrintInvoice(OrderID As Long) As Boolean
Dim Result
Result = DLookup("[Language]", "Customers", "Language")
If Result = "TH" Then
DoCmd.OpenReport "InvoiceTH", acViewPreview, , "[Order ID]=" & OrderID, acDialog
Else
DoCmd.OpenReport "InvoiceEN", acViewPreview, , "[Order ID]=" & OrderID, acDialog
End If
End Function
รบกวนหน่อยนะค่ะ
				68 Reply in this Topic. Dispaly 4  pages and you are on page number 3 
				
        
    41 @R13461    
        
  
      อาจารย์คะ หนูงงๆ รูปที่หนูอัฟเป็นตัวอย่างทำไมกลายเป็นรูปเดียวกันหมดเลย เดียวหนูupใหม่นะค่ะ :(    
    
  
        
    42 @R13462    
        
  
      ตอบเรื่อง ป้อนคำอะไรก็ได้ในส่วนของเท็กซ์ของคอมโบ้บ็อกซ์ แล้วให้แสดงส่วนของลิสท์ตามคำที่ค้นหา
- ต้องกำหนด AutoExpand เป็น No
- เพิ่มโค้ดลงใน KeyUp event procedure ของคอมโบ้บ็อกซ์นั้นๆ
Private Sub Combo_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Combo.RowSource = "select ... from ... where ฟิลด์ที่ต้องการถูกค้นหา like '*" & Me.Combo.Text & "*' order by ..."
Me.Combo.Dropdown
End Sub
ปล. ไว้มีเวลาแล้วจะมาตอบคำถามต่อไป
    
  - ต้องกำหนด AutoExpand เป็น No
- เพิ่มโค้ดลงใน KeyUp event procedure ของคอมโบ้บ็อกซ์นั้นๆ
Private Sub Combo_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Combo.RowSource = "select ... from ... where ฟิลด์ที่ต้องการถูกค้นหา like '*" & Me.Combo.Text & "*' order by ..."
Me.Combo.Dropdown
End Sub
ปล. ไว้มีเวลาแล้วจะมาตอบคำถามต่อไป
        
    43 @R13467    
        
  
      อาจารย์คะรบกวนถามเรื่องรีพอทด้วยอีกนิดนึงนะคะ คือตรงรายการ(ส่วนรายละเอียด)สินค้าอะคะ ถ้าหนูมีสินค้ารายการเดียวตรงส่วนท้ายก็จะตรงช่องเวลาปริ้น แต่ถ้ามี2รายการ3 รายการเพิ่มขึ้นมาปุ๊ป ส่วนท้ายก็เลื่อนลงเลื่อนตามช่องที่เพิ่มขึ้นมา มีวิธีล๊อคตรงช่องส่วนรายละเอียดไหมคะอาจารย์หมายถึงว่าให้เรามีหลายๆรายการได้โดยส่วนท้ายไม่เลื่อนอะค่ะ 
ขอบพระคุณค่ะ
 
    
    
  ขอบพระคุณค่ะ
 
    
        
    44 @R13468    
        
  
      ให้ย้ายไปที่ส่วนท้ายของหน้า (Page Footer section) แทนครับ    
    
  
        
    45 @R13471    
        
  
      อาจารย์คะ พอย้ายไปแล้วมันขึ้นแค่รายการเดียวอะค่ะ ;(    
    
  
        
    46 @R13472    
        
  
      คุณย้ายอะไรครับ  ที่บอกนี่คือย้ายส่วนท้ายของกลุ่ม OrderID ไปนะครับ ถ้าไม่แน่ใจ ก็แปะรูปที่แก้ไขใน Design View ให้ผมดูอีกที    
    
  
        
    47 @R13473    
        
  
      อ่อ หนูเข้าใจแล้วค่ะ ให้ย้าย ส่วนท้ายของกลุ่มOrderID ไปที่ (Page Footer section) หนูดันไปย้ายส่วนรายละเอียดลงมาที่ส่วนท้ายของกลุ่มOrderID อิอิ เรียบร้อยแล้วค่ะ ขอบพระคุณอาจารย์มากๆๆๆๆๆๆเลยนะคะ 
สืบเนื่องจากคำแนะนำ ของอาจารย์
ตอบเรื่อง ป้อนคำอะไรก็ได้ในส่วนของเท็กซ์ของคอมโบ้บ็อกซ์ แล้วให้แสดงส่วนของลิสท์ตามคำที่ค้นหา
- ต้องกำหนด AutoExpand เป็น No
- เพิ่มโค้ดลงใน KeyUp event procedure ของคอมโบ้บ็อกซ์นั้นๆ
Private Sub Combo_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Combo.RowSource = "select ... from ... where ฟิลด์ที่ต้องการถูกค้นหา like '*" & Me.Combo.Text & "*' order by ..."
Me.Combo.Dropdown
End Sub
ปล. ไว้มีเวลาแล้วจะมาตอบคำถามต่อไป
หนูลองเอาไปทำแล้วพอพิมkeywordเข้าไปกล่องคอมโบก็ไม่แสดงคำอะไรเลยอะค่ะมีช่องขึ้นมาแต่เป็นช่องว่างๆและกลับให้หนูเพิ่มอักษรนั้นเข้าไปเป็นชื่อลูกค้ารายใหม่เลย เหมือนพอเราสะกดขึ้นมาพอเขาหาไม่เจอเขาก็ให้เราไปเพิ่มใหม่
ตรงส่วน (where ฟิลด์ที่ต้องการถูกค้นหา like) ตรงหลังwhere เรามีหลายฟิลด์ได้ไหมค่ะ เพราะ หนูใส่ไปสามฟิลด์ มี Companyname , ID,address for ship เพราะ หนูต้องการให้พิม keyword เข้าไปแล้วคอมโบสามารถหาจากทั้ง3 ฟิลด์เลยค่ะ
คือหนูอยากส่งตัวอย่างให้อาจารย์ดูแต่หนูกลับมาที่บ้านแล้วแต่งานอยู่ที่ออฟฟิศ เดี๋ยวพรุ้งนี้หนูโพสตัวอย่างที่ขึ้นให้อาจารย์ดูนะคะ
    
    
  สืบเนื่องจากคำแนะนำ ของอาจารย์
ตอบเรื่อง ป้อนคำอะไรก็ได้ในส่วนของเท็กซ์ของคอมโบ้บ็อกซ์ แล้วให้แสดงส่วนของลิสท์ตามคำที่ค้นหา
- ต้องกำหนด AutoExpand เป็น No
- เพิ่มโค้ดลงใน KeyUp event procedure ของคอมโบ้บ็อกซ์นั้นๆ
Private Sub Combo_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Combo.RowSource = "select ... from ... where ฟิลด์ที่ต้องการถูกค้นหา like '*" & Me.Combo.Text & "*' order by ..."
Me.Combo.Dropdown
End Sub
ปล. ไว้มีเวลาแล้วจะมาตอบคำถามต่อไป
หนูลองเอาไปทำแล้วพอพิมkeywordเข้าไปกล่องคอมโบก็ไม่แสดงคำอะไรเลยอะค่ะมีช่องขึ้นมาแต่เป็นช่องว่างๆและกลับให้หนูเพิ่มอักษรนั้นเข้าไปเป็นชื่อลูกค้ารายใหม่เลย เหมือนพอเราสะกดขึ้นมาพอเขาหาไม่เจอเขาก็ให้เราไปเพิ่มใหม่
ตรงส่วน (where ฟิลด์ที่ต้องการถูกค้นหา like) ตรงหลังwhere เรามีหลายฟิลด์ได้ไหมค่ะ เพราะ หนูใส่ไปสามฟิลด์ มี Companyname , ID,address for ship เพราะ หนูต้องการให้พิม keyword เข้าไปแล้วคอมโบสามารถหาจากทั้ง3 ฟิลด์เลยค่ะ
คือหนูอยากส่งตัวอย่างให้อาจารย์ดูแต่หนูกลับมาที่บ้านแล้วแต่งานอยู่ที่ออฟฟิศ เดี๋ยวพรุ้งนี้หนูโพสตัวอย่างที่ขึ้นให้อาจารย์ดูนะคะ
        
    48 @R13474    
        
  
      ส่วนนี้จะอยู่ตรงช่อง Control แหล่งข้อมูลแถวของ combo box ของหนูคะ ถ้าใส่ในช่อง เวลาคลิกครั้งแรก ข้อมูลขึ้นแต่พอเราพิมkeyword จะกลายเป็นช่องเปล่าๆ (ในกรณีที่ใส่โค้ดที่อาจารย์ให้มา) แต่พอหนูลบตรงช่องcontrolออกใส่แต่โค้ดของอาจารย์ พอคลิกก็กลายเป็นช่องเปล่าๆเลย ค่ะ
SELECT [ID], [Company], [Address For Ship], [ID] FROM [Customers Extended] WHERE [ID]<>Nz(Form!ID,0) ORDER BY [Company], [Address For Ship]; อยู่ในcontrolแหล่งข้อมูลแถว
Private Sub Combo_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Combo47.RowSource = "SELECT [ID], [Company], [Address For Ship], [ID] FROM [Customers Extended] WHERE [Company], [Address For Ship],[ID] like '*" & Me.Combo47.Text & "*' ORDER BY [Company], [Address For Ship]"
Me.Combo47.Dropdown
End Sub อยู่ในKeyUp event procedure
    
  SELECT [ID], [Company], [Address For Ship], [ID] FROM [Customers Extended] WHERE [ID]<>Nz(Form!ID,0) ORDER BY [Company], [Address For Ship]; อยู่ในcontrolแหล่งข้อมูลแถว
Private Sub Combo_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Combo47.RowSource = "SELECT [ID], [Company], [Address For Ship], [ID] FROM [Customers Extended] WHERE [Company], [Address For Ship],[ID] like '*" & Me.Combo47.Text & "*' ORDER BY [Company], [Address For Ship]"
Me.Combo47.Dropdown
End Sub อยู่ในKeyUp event procedure
        
    49 @R13475    
        
  
      อาจารย์คะ ถ้าอาจารย์มีเวลาอย่าลืมตอบอีกข้อของหนูนะคะ ที่เลือกcompanyแล้วให้สินค้าของcompanyนั้นขึ้นมาอะค่ะ อิอิ สงสัยโปรแกรมเสร็จหนูต้องขออนุญาติเลี้ยงข้าวอาจารย์สักมื้อแล้วหละค่ะ ช่วยหนูในทุกๆเรื่องเลย    
    
  
        
    50 @R13476    
        
  
      เอา Private Sub Combo_KeyUp เต็มๆที่เขียนแล้วมาให้ดูหน่อย  และ Column Count, Column Width, Bound Column ค่าเหล่านี้มีค่าเป็นอะไรบ้าง
และหลัง where เราสามารถเขียนเงื่อนไขของหลายฟิลด์ได้ครับ
    
  และหลัง where เราสามารถเขียนเงื่อนไขของหลายฟิลด์ได้ครับ
        
    51 @R13477    
        
  
      พรุ่งนี้นะคะอาจารย์เครื่องอยู่ที่ออฟฟิศค่ะ    
    
  
        
    52 @R13480    
        
  
      อาจารย์คะหนูลองย้ายเหมือนที่อาจารย์บอกในรีพอทส่วนท้ายไม่เลื่อนแล้ว แต่คำนวณErrorค่ะ :(    
    
  
        
    53 @R13481    
        
       
    
    
  
   
    
        
    54 @R13482    
        
       
    
    
  
   
    
        
    55 @R13483    
        
  
      Type Mismatch เกิดจากการใช้ประเภทของข้อมูลไม่ถูกต้อง เป็นที่ไหนสักที่ ลองเช็คดีๆครับ อาจลบทิ้งทีละเท็กซ์บ็อกซ์ในรายงาน ถ้าเมื่อไหร่ไม่ error ก็แปลว่าตัวสุดท้ายที่ลบไปนั่นแหล่ะคือตัวปัญหา    
    
  
        
    56 @R13485    
        
  
      error ตรงตัวคำนวณเงินเป็นคำอ่านภาษาไทยค่ะเอาออกแล้วไม่ขึ้นerror แต่ตรงช่องคำนวณก็คำนวณไม่ออกคะอาจารย์ 
 
    
    
   
    
        
    57 @R13486    
        
  
      Option Compare Database
Function BahtText(ByVal sNum)
Dim sNumber, sDigit, sDigit10
Dim nLen, sWord, sWord2
Dim sByte, i, J
sNumber = Array("", "˹Öè§", "Êͧ", "ÊÒÁ", "ÊÕè", "ËéÒ", "Ë¡", "à¨ç´", "á»´", "à¡éÒ")
sDigit = Array("", "ÊÔº", "ÃéÍÂ", "¾Ñ¹", "ËÁ×è¹", "áʹ")
sDigit10 = Array("", "ÊÔº", "ÂÕèÊÔº", "ÊÒÁÊÔº", "ÊÕèÊÔº", "ËéÒÊÔº", "Ë¡ÊÔº", "à¨ç´ÊÔº", "á»´ÊÔº", "à¡éÒÊÔº")
sNum = Replace(FormatNumber(sNum, 2), ",", "")Error ตรงนี้ค่ะ
nLen = Len(sNum)
If sNum = ".00" Then BahtText = "ÈÙ¹Âì"
For i = 1 To nLen - 3
J = (15 + nLen - i) Mod 6
sByte = Mid(sNum, i, 1)
If sByte <> "0" Then
If J = 1 Then sWord = sDigit10(sByte) Else sWord = sNumber(sByte) & sDigit(J)
BahtText = BahtText & sWord
End If
If J = 0 And i <> nLen - 3 Then BahtText = BahtText & "ÅéÒ¹": BahtText = Replace(BahtText, "˹Öè§ÅéÒ¹", "àÍç´ÅéÒ¹")
Next
If Left(sNum, 1) = "1" Then BahtText = Replace(BahtText, "àÍç´ÅéÒ¹", "˹Öè§ÅéÒ¹")
If Left(sNum, 2) = "11" Then BahtText = Replace(BahtText, "ÊԺ˹Öè§ÅéÒ¹", "ÊÔºàÍç´ÅéÒ¹")
If Len(BahtText) > 0 Then BahtText = BahtText & "ºÒ·"
If nLen > 4 Then BahtText = Replace(BahtText, "˹Ö觺ҷ", "àÍç´ºÒ·")
sNum = Right(sNum, 2)
If sNum = "00" Then
BahtText = BahtText & "¶éǹ"
Else
If Left(sNum, 1) <> "0" Then BahtText = BahtText & sDigit10(Left(sNum, 1))
If Right(sNum, 1) <> "0" Then BahtText = BahtText & sNumber(Right(sNum, 1))
BahtText = BahtText & "ʵҧ¤ì"
If Left(sNum, 1) <> "0" Then BahtText = Replace(BahtText, "˹Öè§ÊµÒ§¤ì", "àÍç´ÊµÒ§¤ì")
End If
End Function
    
    
  Function BahtText(ByVal sNum)
Dim sNumber, sDigit, sDigit10
Dim nLen, sWord, sWord2
Dim sByte, i, J
sNumber = Array("", "˹Öè§", "Êͧ", "ÊÒÁ", "ÊÕè", "ËéÒ", "Ë¡", "à¨ç´", "á»´", "à¡éÒ")
sDigit = Array("", "ÊÔº", "ÃéÍÂ", "¾Ñ¹", "ËÁ×è¹", "áʹ")
sDigit10 = Array("", "ÊÔº", "ÂÕèÊÔº", "ÊÒÁÊÔº", "ÊÕèÊÔº", "ËéÒÊÔº", "Ë¡ÊÔº", "à¨ç´ÊÔº", "á»´ÊÔº", "à¡éÒÊÔº")
sNum = Replace(FormatNumber(sNum, 2), ",", "")Error ตรงนี้ค่ะ
nLen = Len(sNum)
If sNum = ".00" Then BahtText = "ÈÙ¹Âì"
For i = 1 To nLen - 3
J = (15 + nLen - i) Mod 6
sByte = Mid(sNum, i, 1)
If sByte <> "0" Then
If J = 1 Then sWord = sDigit10(sByte) Else sWord = sNumber(sByte) & sDigit(J)
BahtText = BahtText & sWord
End If
If J = 0 And i <> nLen - 3 Then BahtText = BahtText & "ÅéÒ¹": BahtText = Replace(BahtText, "˹Öè§ÅéÒ¹", "àÍç´ÅéÒ¹")
Next
If Left(sNum, 1) = "1" Then BahtText = Replace(BahtText, "àÍç´ÅéÒ¹", "˹Öè§ÅéÒ¹")
If Left(sNum, 2) = "11" Then BahtText = Replace(BahtText, "ÊԺ˹Öè§ÅéÒ¹", "ÊÔºàÍç´ÅéÒ¹")
If Len(BahtText) > 0 Then BahtText = BahtText & "ºÒ·"
If nLen > 4 Then BahtText = Replace(BahtText, "˹Ö觺ҷ", "àÍç´ºÒ·")
sNum = Right(sNum, 2)
If sNum = "00" Then
BahtText = BahtText & "¶éǹ"
Else
If Left(sNum, 1) <> "0" Then BahtText = BahtText & sDigit10(Left(sNum, 1))
If Right(sNum, 1) <> "0" Then BahtText = BahtText & sNumber(Right(sNum, 1))
BahtText = BahtText & "ʵҧ¤ì"
If Left(sNum, 1) <> "0" Then BahtText = Replace(BahtText, "˹Öè§ÊµÒ§¤ì", "àÍç´ÊµÒ§¤ì")
End If
End Function
        
    58 @R13487    
        
  
      พอหนูเปลี่ยนไปเข้าcodeคำอ่านภาษาอังกฤษไม่ขึ้นerror mismatchค่ะ runได้แต่ผลคือ error อยู่ดีค่ะ 
 
    
    
   
    
        
    59 @R13488    
        
  
      ฟิลด์ InvoiceTotal ของคุณมีค่าเป็น zero-length string ("") หรือเป็นประเภทตัวอักษร (Text) หรือเปล่า เช็คดูดีๆครับ    
    
  
        
    60 @R13489    
        
      
	  
      
    
      เห็นแล้ว ผิดตรงคุณใช้ฟังก์ชั่น Sum(ExtendedPrice) ในส่วนของ PageFooter section มันจะไม่ยอมครับ วิธีแก้คือต้องสร้างเท็กซ์บ็อกซ์ T ใน OrderID Footer section โดยมี ControlSource เป็น =Nz(Sum(....),0) แทน และกำหนดให้ Visible=False  ส่วนใน PageFooter section ก็ให้อ้างถึง T แทน ก็จะเป็น =T ครับ   ในฟังก์ชั่น BathText ก็อ้างถึง T แทน ลองดูครับ    
    
  
      Time: 0.0803s
    
      
		