แสดงกระทู้

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.


Messages - taeclubz

หน้า: [1]
1
ขอบพระคุณมากๆครับท่าน เป็นประโยชน์มากครับ

ลองดูครับ เขียนแบบลูกทุ่งและรวบรัดครับ

ที่ Sheet นั้นๆ
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$A$1" Then ' $A$1 ตำแหน่งที่ต้องการดัก
       If Len(Target) > 4 Then   'มากกว่า 4 ตัวอักษร
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       "ระบุได้แค่ 4 ตัวอักษร", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
           Exit Sub
       End If
       
       If Not isNumEN(Target.Value) Then
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       " ระบุได้แค่ ตัวเลข และตัวภาษาอังกฤษ(พิมพ์เล็กหรือพิมพ์ใหญ่ก็ได้)", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
       End If
   End If
End Sub


ที่ Module หรือในชิตนั้นๆ ถ้าใช้แค่ชีตเดียว
Function isNumEN(xTarget As String) As Boolean
   Dim i As Long
   Dim j As Long
   Dim x As String
   Dim isOk As Boolean
   
   isOk = True
   j = Len(xTarget)
   For i = 1 To j
        x = Mid(xTarget, i, 1)
        If (Asc(x) >= 48 And Asc(x) <= 57) Or _
           (Asc(x) >= 65 And Asc(x) <= 90) Or _
           (Asc(x) >= 97 And Asc(x) <= 122) Then
           '  48=0  57=9
           '  65=A  90=Z
           '  97=a  122=z
        Else
            isOk = False
            Exit For  'เจอไม่ใช่ ให้ออกมาเลย
        End If
   Next i
   isNumEN = isOk
End Function

2
รบกวนผู้รู้หน่อยครับ ผมอยากเขียน VBA EXCEL ให้ดักภาษาไทยอ่ะครับ
เช่น Cell A1 ระบุได้แค่ 4 ตัวอักษร และ ระบุได้แค่ ตัวเลข และตัวภาษาอังกฤษ(พิมพ์เล็กหรือพิมพ์ใหญ่ก็ได้)
หากเจอภาษาไทย ให้แจ้งเตือนและหยุดการทำงาน แต่ถ้าไม่มีข้อผิดพลาด ( มี 4 ตัวอักษร และ ไม่ใช่ภาษาไทย ) ให้ทำงานต่อได้
ต้องเขียนโค๊ดประมาณไหนอ่ะครับ รบกวนผู้รู้ด้วยครับ

3
ลองแบบนี้ึครับว่าได้ไหม 

คิวรี่แรกแบบนี้
โค๊ด: [Select]
SELECT Table1.EBELN, Table1.EBELP, Table1.BELNR, Table1.VGABE, Table1.BWART
FROM Table1
WHERE (((Table1.VGABE)<>2 And (Table1.VGABE)<>[EBELP]) AND ((Table1.BWART)="101"));

คิวรี่ 2 แบบนี้
ชื่อคิวรี่แรก Query1

โค๊ด: [Select]
SELECT Query1.EBELN, Query1.EBELP, Query1.BELNR
FROM Query1;

ให้เขียนประมาณนี้ใช้ปะครับ

SELECT Q1.EBELN , Q1.EBELP, Q1.BELNR
FROM (
         SELECT TB1.EBELN ,TB1.EBELP ,TB1.BELNR ,TB1.VGABE ,TB1.BWART
         FROM TB1
         WHERE (((TB1.VGABE)<>2 And (TB1.VGABE)<>[EBELP]) AND ((TB1.BWART)="101"))
) Q1

แบบนี้ปะครับ ถ้าแบบนี้ผมลองแล้ว ก็ยังได้เหมือนเดิมครับ หรือไม่ต้องซ้อน select แบบนี้ครับ

4
ไม่รู้แบบนี้ไหมนะครับ ผมสมมุติ table1 คือชื่อตารางนะ

โค๊ด: [Select]
SELECT Table1.EBELN, Table1.EBELP, Table1.BELNR
FROM Table1
WHERE ((Not (Table1.VGABE)=2 And Not (Table1.VGABE)=[EBELP]) AND ((Table1.BWART)="101"));

ลองนำโค้ดมาใช้ แล้วได้แบบนี้อ่าครับ  เกือบสมบูณณ์ละครับ แต่ต้องห้ามหยิบ รายการที่มี VGABE ค่า 2 ออกมาเลย ถึงแม้ว่าจะมีค่าทั้ง 1 , 2 และ BWART เป็น 101 ก็ตามครับ

EBELN              EBELP     BELNR
7000002511         1           8000000041
7000002511         2           8000000042
7000002511         3           8000000105

5
อยากรบกวนผู้รู้เรื่อง SQL หน่อยครับ ว่าต้องเขียน โค้ดยังไง ว่าจะต้อง Where อะไรบ้าง

นี่คือตัวอย่าง table ที่จะนำมาพิจารณาเขียน Query ครับ



ผลลัพที่อยากได้คือ

EBELN             EBELP
7000002511        2
7000002511        3

หากข้อมูลเป็นแบบที่วงแดงไว้แบบนี้ คือฟิล VGABE มีค่าเป็น 2 จะไม่ถูกเลือกมาเลย



และหากข้อมูลซ้ำแบบนี้ ก็ให้หยิบมาบรรทัดเดียว



หรือถ้าเป็นไปได้ ก็อยากให้หยิบค่า ฟิล BELNR โดยเลือกจาก ฟิล BWART มีค่าเป็น 101 ดังตัวอย่างผลลัพด้านล่างนี้ครับ ( หากท่านใดเขียนได้ ขอบพระคุณมากครับ )

ผลลัพที่อยากได้คือ

EBELN             EBELP    BELNR
7000002511        2       8000000042
7000002511        3       8000000105

ขอบพระคุณมากครับ


6
ต้องใช้การเขียนโค้ดเพื่ออ่านเรคอร์ดจากคำสั่ง SQL แล้วนำค่าของฟิลด์ที่ต้องการ ไปต่อๆกันให้ครบทุกเรคอร์ด เก็บลงตัวแปร แล้วจะเอาตัวแปรไปแสดงบนหน้าฟอร์ม หรือไปเขียนลงเท็กซ์ไฟล์ก็แล้วแต่ต้องการ

ตย.โค้ด

Dim RS As DAO.Recordset ' ชุดของเรคอร์ดที่อ่านได้
Dim SQL As String
Dim S As String  ' เก็บผลลัพธ์

' สร้าง SQL
SQL = "select ชื่อฟิลด์ as F from ชื่อเทเบิลหรือคิวรี่ where เงื่อนไข order by ฟิลด์ที่ใช้เรียงลำดับข้อมูล"

' เปิดชุดเรคอร์ดที่ได้จาก SQL
Set RS = CurrentDB.OpenRecordset(SQL)

' ทำจนกว่าจะอ่านเรคอร์ดไม่ได้แล้ว
Do Until RS.EOF

     If S = "" Then
          S = RS!F
     Else
          S = S & "," & RS!F  ' ต่อเท็กซ์ในตัวแปรด้วยเครื่องหมาย "," ถ้าก่อนหน้านี้ ตัวแปรมีค่าอยู่ก่อนแล้ว
     End If

     ' อ่านเรคอร์ดต่อไป
     RS.MoveNext

' วนลูปต่อไป
Loop

' ปิดชุดเรคอร์ด
RS.Close

' ต่อจากนี้ก็เอาตัวแปร S ไปใช้ครับ

ขอบคุณครับอาจารย์ เดี๋ยวผมลองศึกษาเรื่องโค๊ดต่อครับ  :love:

7
ผมอยากทราบวิธีการ export โดยอยากให้มีตัวลูกน้ำคั่นระหว่างข้อมูลครับ
อันนี้คือตัวอย่างข้อมูลที่จะใช้ครับ โดยอยากให้ข้อมูลที่ export ออกมาเป็นลักษณะนี้ครับ
2000319077,7011696002,7011792028,7012056145 ........ แบบนี้จนจบบรรทัดสุดท้ายของข้อมูลใน record ครับ รบกวนผู้รู้ช่วยหน่อยครับ วิธีไหนก็ได้ครับ ขอบพระคุณมากๆเลยครับ ผมมือใหม่ครับ

หน้า: [1]