1
ห้อง MS Access / : ขอสอบถามการตัดข้อความคำว่า "แจ้งความ" ไม่ให้แสดงในรายงาน MS Access
« เมื่อ: 29 มี.ค. 67 , 08:57:44 »
ใช้ function Replace() ดูนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
tDay(o, iCount) = cThaiNumber(Day(i)) & " " & MonthNameThai(i) & " " & cThaiNumber(IIf(Year(i) = Format(i, "yyyy"), Year(i) + 543, Format(i, "yyyy")))
tDay(o, iCount) = cThaiNumber(Day(i)) & " " & MonthNameThai(i) & " " & cThaiNumber(Year(i) + 543)
Public Function Seminar(sDate As Date, eDate As Date) As String
Dim i As Long, o As Long, iCount As Long, iSun As Long, mCount As Long
Dim tDay() As String ' กำหนดตัวแปรอาร์เรย์ จำทำแบบ 2 มิติ มิติแรกใช้เก็บตัดช่วงวันอาทิตย์ มิติสองใช้เก็บวันที่ไม่ใช่วันอาทิตย์
' หาช่วงเวลาเป้าหมายว่ามีวันอาทิตย์ทั้งหมดกี่วัน เพิ่มใช้กำหนดค่าตัวแปรอาร์เรย์ในมิติแรก----------------------
For i = sDate To eDate 'ลูปหาตั้งแต่วันเริ่มต้นจนวันสิ้นสุด
If Weekday(i) = 1 Then 'วันไหนมี Weekday เท่ากับ 1 คือวันอาทิตย์ ตาม Default ของฟังก์ชั่น
iSun = iSun + 1 'นับจำนวนวันอาทิตย์ไปเรื่อยๆ
End If
Next
'--------------------------------------------------------------------------------------------------
'เก็บวันที่เป้าหมายทั้งหมดที่ไม่ใช่วันอาทิตย์ ลงในตัวแปรอาร์เรย์แบบไดนามิก-----------------------------------
For i = sDate To eDate 'ลูปหาตั้งแต่วันเริ่มต้นจนวันสิ้นสุด
If Weekday(i) <> 1 Then ' เมื่อไม่ใช่วันอาทิตย์ (1 คือ วันอาทิตย์)
mCount = IIf(iCount > mCount, iCount, mCount) 'หาตัวเลขขยายมากขึ้นในแต่ละลูปเพื่อนำมาปรับขนาดความยาวของอาร์เรย์
'ขยายความยาวของอาร์เรย์ให้มากขึ้น ตามข้อมูลวันที่ ที่ต้องจัดเก็บลงตัวแปร เพราะข้อมูลมีจำนวนมากน้อยไม่แน่นอนจึงต้องใช้ตัวแปรแบบไดนามิก
ReDim Preserve tDay(iSun, mCount) 'ขยายมากขึ้นได้ แต่ทำให้น้อยลงไม่ได้ เพราะข้อมูลค่าเก่าจะหาย
'แปรงข้อมูลวันที่เป้าหมายที่ไม่ตรงกับวันอาทิตย์ ไล่ใส่ลงไปในตัวแปรอาร์เรย์แบบ 2 มิติ
tDay(o, iCount) = cThaiNumber(Day(i)) & " " & MonthNameThai(i) & " " & cThaiNumber(IIf(Year(i) = Format(i, "yyyy"), Year(i) + 543, Format(i, "yyyy")))
iCount = iCount + 1
Else 'หากเป็นวันอาทิตย์
o = o + 1 'หากเป็นวันอาทิตย์ ให้เลื่อนตัวแปรอาร์เรย์ในมิติแรกขึ้นไปอีกลำดับ เพื่อแยกชั้นตัวแปรระหว่างช่วงวันที่ติดวันอาทิตย์
iCount = 0 'ปรับมิติที่สองให้เป็นลำดับ 0 เริ่มใหม่
End If
Next i
'---------------------------------------------------------------------------------------------------
'เรียกแสดงค่าตัวแปรอาร์เรย์ออกมาตามรูปแบบที่เราต้องการ------------------------------------------------
Dim firstDay As Long 'เก็บค่าลำดับของมิติตัวแปรลำดับแรกที่จะแสดง
Dim lastDay As String 'เก็บข้อมูลวันที่วันสุดท้ายก่อนถึงวันอาทิตย์
Dim endDay As String 'เก็บวันที่สุดท้ายไว้ใช้ในข้อความ ให้ไว้ ณ วันที่
Dim strDay As String 'ไล่เก็บรวบรวมสรุปข้อมูลแสดงทั้งหมด
firstDay = -1 'เก็บค่าลำดับมิติตัวแปรแรกที่ไม่ตรงกับวันอาทิตย์ (กันไว้กรณีที่วันแรกของข้อมูลเป็นวันอาทิตย์พอดี ทำให้ตัวแปรมิติแรกอาจไม่ได้เริ่มต้นที่ 0 ก็ได้)
For i = 0 To UBound(tDay, 1) 'ลูปตัวแปรอาร์เรย์ในมิติแรกที่มีการจัดเก็บ ตั้งแต่ลำดับแรกจนลำดับสุดท้าย
lastDay = "" 'ล้างค่าวันที่สุดท้ายทุกครั้งเมื่อขึ้นมิติตัวแปรใหม่
For o = 0 To UBound(tDay, 2) 'ลูปตัวแปรอาร์เรย์ในมิติสองที่มีการจัดเก็บ ตั้งแต่ลำดับแรกจนลำดับสุดท้าย
If tDay(i, o) & "" <> "" Then 'ถ้าค่าตัวแปรอาร์เรย์ในมิตินั้นไม่ใช่ค่าว่าง (แสดงว่ามีข้อมูล)
lastDay = tDay(i, o) ' ให้บันทึกในตัวแปร lastDay ไปเรื่อยๆ จนข้อมูลลูปไปถึงสุดท้ายเราก็จะได้วันที่วันสุดท้าย ของตัวแปรอาร์เรย์ในชั้นมิตินั้น
endDay = lastDay
If firstDay = -1 Then
firstDay = i 'หากตัวแปรอาร์เรย์ลำดับนั้นไม่ใช่ค่าว่าง ก็แสดงว่าให้เริ่มต้นวันที่ที่ลำดับมิตินั้น จึงบันทึกลงไปในตัวแปร fristDay
End If
End If
Next o
If i = firstDay Then 'ถ้า i เท่ากับค่าในตัวแปร firstDay แสดงว่าเป็นค่าวันที่แรกที่จะแสดง
If tDay(i, 0) <> lastDay Then ' ถ้าวันที่นั้นไปใช่วันที่สุดท้ายในมิตินั้น แสดงว่าต้องมีวันที่ 2 ช่วง
strDay = "วันที่ " & tDay(i, 0) & " - วันที่ " & lastDay ' บรรทัดแรกของวันที่ ที่จะแสดงให้ขึ้นต้นคำว่า วันที่
Else
strDay = "วันที่ " & tDay(i, 0) ' ถ้าวันที่นั้นเท่ากับวันที่สุดท้ายในมิตินั้นด้วย แสดงว่าจะมีวันที่แค่วันเดียว
End If
Else 'ถ้าเป็นบรรทัดต่อๆไป
If tDay(i, 0) & "" <> "" And lastDay <> "" Then 'ถ้ามีข้อมูล
If tDay(i, 0) <> lastDay Then ' ถ้าวันที่นั้นไปใช่วันที่สุดท้ายในมิตินั้น แสดงว่าต้องมีวันที่ 2 ช่วง
strDay = strDay & vbCrLf & "และ " & tDay(i, 0) & " - วันที่ " & lastDay 'บรรทัดต่อๆไปจะแสดงขึ้นต้นด้วยคำว่า และ
Else
strDay = strDay & vbCrLf & "และ " & tDay(i, 0) ' ถ้าวันที่นั้นเท่ากับวันที่สุดท้ายในมิตินั้นด้วย แสดงว่าจะมีวันที่แค่วันเดียว
End If
End If
End If
Next i
'---------------------------------------------------------------------------------------------------
strDay = strDay & vbCrLf & "ให้ไว้ ณ วันที่ " & endDay 'เก็บข้อมูลในรูปแบบที่เราต้องการในตัวแปร strDay
Seminar = strDay
End Function
Addressall: Trim(IIf(IsNull([address1]),"",[address1]) & IIf(IsNull([address2]),""," " & [address2]) & IIf(IsNull([address3]),""," " & [address3]) & IIf(IsNull([address4]),""," " & [address4]) & IIf(IsNull([address5]),""," " & [address5]) & IIf(IsNull([zipcode]),""," " & [zipcode]))
AddnewSQL = "INSERT INTO dbo_TestTP ( CardID, TPNo, TPIssueDate, TPExpireDate ) " _
& "SELECT dbo_TempImportTP.CardID, dbo_TempImportTP.TPNo, dbo_TempImportTP.TPIssueDate, dbo_TempImportTP.TPExpireDate " _
& "FROM dbo_TempImportTP WHERE (((dbo_TempImportTP.CardID) Not In (select CardID from [dbo_TestTP])));"
UpdateSQL = "UPDATE dbo_TestTP INNER JOIN dbo_TempImportTP ON dbo_TestTP.CardID = " _
& "dbo_TempImportTP.CardID SET dbo_TestTP.TPNo = [dbo_TempImportTP].[TPNo], dbo_TestTP.TPIssueDate = " _
& "[dbo_TempImportTP].[TPIssueDate], dbo_TestTP.TPExpireDate = [dbo_TempImportTP].[TPExpireDate] " _
& "WHERE (((dbo_TestTP.TPNo)<>[dbo_TempImportTP].[TPNo]) AND ((dbo_TestTP.CardID)=[dbo_TempImportTP].[CardID])) " _
& "OR (((dbo_TestTP.TPIssueDate)<>[dbo_TempImportTP].[TPIssueDate])) OR (((dbo_TestTP.TPExpireDate)<>[dbo_TempImportTP].[TPExpireDate]));"
ชื่อนี้ค่ะ dbo_TempImport
เป็น Database ที่ลิงค์มาจาก SQL Server
หรือจะติดตรงนี้ค่ะ acSpreadsheetTypeExcel8 ต้องไปสร้างหรือกำหนด SpreadsheetType ที่ไหนคะ