:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#1

Post by yopkub »

สวัสดีครับ

ขอสอบถามครับ จุดประสงค์ของผมคือ ต้องการโยน file ที่ open เข้ามาไปยังตัวแปรที่กำหนด
โดยผมไม่ต้องการโยนทุกบรรทัดในไฟล์ เพราะเจอไฟล์ใหญ่ มันจะนาน

ตัวอย่าง Code ที่โอนทุกบรรทัดเข้าตัวแปรชื่อ buf

Code: Select all

Dim buf As String
 strFile_Path_In = Cells(x,1)
 
 Open strFile_Path_In For input As #1 
  Line input #1,buf  
  Close #1
จาก Code ข้างต้น ผลลัพธ์คือ buf จะได้ ข้อมูลทุกบรรทัดที่อยุ่ในไฟล์ #1 มาทั้งหมด

แต่อยากขอคำแนะนำว่า หากผมต้องการแค่ 10 บรรทัด หรือสมมติว่า 200 ตัวอักษร
จะมีแนวทางเขียนยังไงครับ

ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30905
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#2

Post by snasui »

:D ตัวอย่างการ Loop ไปทีละบรรทัดครับ

Code: Select all

Dim buf As String, strFile_Path_In As String
Dim myFile As Integer, i As Integer
strFile_Path_In = "D:\Memo\ProgramInfo.txt"
myFile = FreeFile
Open strFile_Path_In For Input As myFile
Do Until EOF(myFile)
    Line Input #myFile, buf
    i = i + 1
    Cells(i, 2).Value = buf
Loop
Close myFile
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#3

Post by yopkub »

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

ได้ไปลองแล้วอ่ะครับ แต่ผลทีได้ Cells(i,2) ก็ยังเป็นครบทุกบรรทัดอยู่ดีอ่ะครับ
เข้าใจมาก Line Input #myFile, buf ก็หมายถึงทำให้ buf รับข้อความทุกบรรทัดไม่ใช่เหรอครับพี่

ลองๆ เล่นหาไปเรื่อย ยังแยกไม่ได้ซักทีครับ TT
มาเต็มไฟล์ ตลอด

หากผมเข้าใจอะไรผิด รบกวนช่วยเพิ่มเติมให้ด้วยครับ

ขอบคุณครับ
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#4

Post by yopkub »

เพิ่มเติมครับ
ผมลองศึกษาเพิ่มตาม

http://codevba.com/office/read_text_fil ... HUFVdIzbIU
Credit : codevba website

แต่ผมติดตรง Type พอปรกาศใช้แล้ว Compile error พอมีคำแนะนำ เพิ่มเติมไหมครับ
ลองใส่ Public แล้วก็ไม่ได้ครับ

ขอบคุณครับ
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#5

Post by yopkub »

ล่าสุดใช้ Code ตามนี้ครับ
แต่เจอ Error

Compile error : Cannot define a Public user-defined type within an object module

รบกวยช่วยดูให้ทีครับ

Code: Select all

Type Record
 ID As Integer
 Name As String * 20
End Type

Sub Collect_data_from_NC_code()

    Dim myFile1 As Integer
    Dim text As String
    Dim buf As String
    Dim buftext As String
    Dim textline() As String
    Dim iFile As Integer
    
    iFile = FreeFile
    
    
    Const TxtIn1 = "(K:"
    Const TxtIn2 = "(B:"
    Const TxtIn3 = "(S:"
    Const TxtFin = "(ORIGIN 2 NOT USE)"
    Const TxtFin2 = "(END OF FOOTER)"
    Const TxtOut0 = "POPEN;"
    Const TxtOut1 = "DPRNT[SR01*"
    Const TxtOut2 = "DPRNT[SR02*"
    Const TxtOut3 = "DPRNT[SR03*"
    Const TxtOut4 = "DPRNT[SR04*START"
    Const TxtOut5 = "DPRNT[SR05*FINISH"
    Const TxtOut6 = "PCLOS;"
    Const TxtOut7 = "DPRNT[SR05*CLEAR];"
    Const TxtOut8 = "DPRNT[SR04*CLEAR];"

   
    Dim K As String
    Dim B As String
    Dim S As String
    Dim i As Double
    Dim TxtSR01 As String
    Dim TxtSR02 As String
    Dim TxtSR03 As String
    Dim TxtSR04 As String
    Dim TxtSR05 As String
    
    
    
    Dim X As Integer
    Dim C As Integer
    Dim J As Integer
    Dim IngPosition As Long
    
    

    For X = 9 To 38
    
    'Open file
    strFile_Path_In = Cells(X, 1)
    strFile_Path_Out = Cells(X, 11)
    
    'MsgBox (X)
    'MsgBox (Cells(X, 2))
    
    'strFile_Path_In = "D:\Mr.Jirawat\04_OA-support\02-MC\03_Other\Conprosys\Macro\Macro making\file1"
    'strFile_Path_Out = "D:\Mr.Jirawat\04_OA-support\02-MC\03_Other\Conprosys\Macro\Macro making\fileout2"
    
    'textline = Split(buf, vbLf)
    
    
    Open strFile_Path_In For Input As #iFile
      
    Dim MyRecord As Record
    
    Open strFile_Path_In For Random As #1 Len = Len(MyRecord)
    
    IngPosition = 20
    
    Get #1, lngPosition, buf
       
    Close #1
    
  
        textline = Split(buf, vbLf)
       
        
        For i = 0 To UBound(textline)
        
            text = text & textline(i) & vbLf
            If InStr(textline(i), TxtIn1) > 0 Then
                
                MsgBox (textline(i))
        
                TxtSR01 = Replace(textline(i), TxtIn1, "")
                TxtSR01 = Replace(TxtSR01, " ", "")
                TxtSR01 = Replace(TxtSR01, ")", "")
                
                MsgBox (textline(i))
            End If
            If InStr(textline(i), TxtIn2) > 0 Then
                MsgBox (textline(i))
                TxtSR02 = Replace(textline(i), TxtIn2, "")
                TxtSR02 = Replace(TxtSR02, " ", "")
                TxtSR02 = Replace(TxtSR02, ")", "")
                MsgBox (textline(i))
            End If
            If InStr(textline(i), TxtIn3) > 0 Then
                MsgBox (textline(i))
                TxtSR03 = Replace(textline(i), TxtIn3, "")
                TxtSR03 = Replace(TxtSR03, " ", "")
                TxtSR03 = Replace(TxtSR03, ")", "")
                MsgBox (textline(i))
                
                
            End If
            
            If InStr(textline(i), TxtFin) > 0 Then
                ' Found line to insert
                MsgBox (textline(i))
                text = text & TxtOut0 & vbLf
                text = text & TxtOut7 & vbLf
                text = text & TxtOut1 & TxtSR01 & "];" & vbLf
                text = text & TxtOut2 & TxtSR02 & "];" & vbLf
                text = text & TxtOut3 & TxtSR03 & "];" & vbLf
                text = text & TxtOut4 & "];" & vbLf
                text = text & TxtOut6 & vbLf
                
            End If
          
            'If InStr(textline(i), TxtFin2) > 0 Then
                ' Found line to insert
                'text = text & TxtOut0 & vbLf
                'text = text & TxtOut8 & vbLf
                'text = text & TxtOut1 & TxtSR01 & "];" & vbLf
                'text = text & TxtOut2 & TxtSR02 & "];" & vbLf
                'text = text & TxtOut3 & TxtSR03 & "];" & vbLf
                'text = text & TxtOut5 & "];" & vbLf
                'text = text & TxtOut6 & vbLf
                
            'End If
            
        'MsgBox (textline(1))
        
        Next i
        
      'MsgBox (text)
           
           
    Open strFile_Path_Out For Output As #1
    Print #1, text
    MsgBox ("Endloop")
    text = ""
    Close #1
     
     
 
        'Range("A1").Value = Mid(text, K + 3, 5)
        'Range("A2").Value = Mid(text, B + 3, 2)
        'Range("A3").Value = Mid(text, S + 3, 4)
        
    Next X
    
        
End Sub




User avatar
snasui
Site Admin
Site Admin
Posts: 30905
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#6

Post by snasui »

:D Code ที่ผมตอบไปสามารถทำทีละบรรทัดกับ Text File ที่ผมมีครับ

ตัวอย่างเพิ่มเติม Read Text File Line by Line

กรุณาถามพร้อมด้วยไฟล์แนบที่เป็นไฟล์โปรแกรมและไฟล์ต้นทางตัวล่าสุดที่ได้นำ Code ไปใช้แล้วยังติดปัญหาจะได้ช่วยทดสอบให้ได้ครับ
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#7

Post by yopkub »

ขอบคุณมากครับ ไฟล์ตามแนบครับ
You do not have the required permissions to view the files attached to this post.
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#8

Post by yopkub »

เพิ่มเติม อันนี้คือไฟล์ไว้สำหรับ Input ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30905
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#9

Post by snasui »

:D ช่วยทำไฟล์ผลลัพธ์ที่ต้องการพร้อมอธิบายเงื่อนไขทั้งหมดที่ทำให้ได้ผลลัพธ์เช่นนั้นมาด้วยครับ
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#10

Post by yopkub »

ขอโทษที่ให้ข้อมูลไม่ครบครับ

ผลลัพธ์ที่ผมต้องการคือ ให้
ข้อมูล
POPEN;
DPRNT[SR05*CLEAR];
DPRNT[SR01*01200]; <---- เอาค่า 01200 มาจากบรรทัดที่ 5
DPRNT[SR02*61]; <---- เอาค่า 61 มาจากบรรทัดที่ 6
DPRNT[SR03*KGS2]; <--- เอาค่า KGS2 มาจากบรรทัดที่ 7
DPRNT[SR04*START];
PCLOS;

ไปเพิ่มหลังบรรทัดที่ 13 -->(ORIGIN 2 NOT USE) ของไฟล์ Input เข้าไปครับ

ตัวอย่างไฟล์ก่อนทำ (ผมตัดมาแค่ช่วงต้นๆ นะครับ เพราะส่วนที่ต้องการเพิ่มแค่ช่วงต้นๆไฟล์)

Code: Select all

%
(PROGRAM WAS IMPLEMENTED)
(START OF HEADER)
(INFOMATION)
(ORDER:  3 )
(K:01200        )
(B:61           )
(S:KGS2         )
(MAC:DC5_NEW_BG )
(TBL:DC5        )
(KN-S/10093     )
(M10MS3         )
(ORIGIN 1 X0.000 Y0.000 Z850.000)
(ORIGIN 2 NOT USE)


(CANCEL H/S MODE <DNC>)
M589(H/S MODE OFF<DNC>)
(AAC TO 1800)
G65P8500T1800
(ATC M10MS3 WITH R)
G65P8600T23R5.00
G65P8800(MIRROR.CANSEL)
(NOT.USE2ND.GENTEN)
(CHANGE ANGLE FOR MEASURE)
G65P8351A0.C0.(FOR AT1800)
S1000(CHANGE S-CORD FOR MESURE)
(MESURE TOOL AT BEFORE)
#505=0.30(BEF RIMIT)
G65P8211R5.00T5.00J0.00M0.(MEASURER OF LENGTH)
(CHANGE DIRECTION)
G65P8350A70.000C110.000
(1ST RETURN TO ORIGIN)
G65P8900
(SET TO OFFSET)
G65P8020D23
(F1FEED HIGH/SPEED)
G65P8090I350I650I1400I1400I1400I1450I15000I1000J1975
(HIGH SPEED MODE)
M588S1.(H/S FOR PERFECT FINISH)
(SET OF COOLANT)
M51(GAIB.AIR)
(END OF HEADER)
G01
M03
G91G01Z-53.29F0
X58.419Y335.691
Z-228.597
X14.463Y-39.736Z-15.391F7
X1.607Y-4.415Z-1.71F1
X.154Y-.021Z.065F6
X.235Y-.001Z.025
X.234Y.013Z-.011
X.234Y.022Z-.033
X.135Y.018Z-.034
X.099Y.015Z-.028
X.234Y.041Z-.082
X.233Y.049Z-.099
ตัวอย่างไฟล์หลังผ่าน Macro

Code: Select all

(PROGRAM WAS IMPLEMENTED)
(START OF HEADER)
(INFOMATION)
(ORDER:  3 )
(K:01200        )
(B:61           )
(S:KGS2         )
(MAC:DC5_NEW_BG )
(TBL:DC5        )
(KN-S/10093     )
(M10MS3         )
(ORIGIN 1 X0.000 Y0.000 Z850.000)
(ORIGIN 2 NOT USE)
POPEN;
DPRNT[SR05*CLEAR];
DPRNT[SR01*01200];
DPRNT[SR02*61];
DPRNT[SR03*KGS2];
DPRNT[SR04*START];
PCLOS;


(CANCEL H/S MODE <DNC>)
M589(H/S MODE OFF<DNC>)
(AAC TO 1800)
G65P8500T1800
(ATC M10MS3 WITH R)
G65P8600T23R5.00
G65P8800(MIRROR.CANSEL)
(NOT.USE2ND.GENTEN)
(CHANGE ANGLE FOR MEASURE)
G65P8351A0.C0.(FOR AT1800)
S1000(CHANGE S-CORD FOR MESURE)
(MESURE TOOL AT BEFORE)
#505=0.30(BEF RIMIT)
G65P8211R5.00T5.00J0.00M0.(MEASURER OF LENGTH)
(CHANGE DIRECTION)
G65P8350A70.000C110.000
(1ST RETURN TO ORIGIN)
G65P8900
(SET TO OFFSET)
G65P8020D23
(F1FEED HIGH/SPEED)
G65P8090I350I650I1400I1400I1400I1450I15000I1000J1975
(HIGH SPEED MODE)
M588S1.(H/S FOR PERFECT FINISH)
(SET OF COOLANT)
M51(GAIB.AIR)
(END OF HEADER)
G01
M03
G91G01Z-53.29F0
X58.419Y335.691
Z-228.597
X14.463Y-39.736Z-15.391F7
X1.607Y-4.415Z-1.71F1
X.154Y-.021Z.065F6
X.235Y-.001Z.025
X.234Y.013Z-.011
X.234Y.022Z-.033
X.135Y.018Z-.034
X.099Y.015Z-.028
X.234Y.041Z-.082
X.233Y.049Z-.099
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#11

Post by yopkub »

เพิ่มเติมครับ ผมจะส่งไฟล์ที่ผมทำได้ แต่เป็นแบบ Copy ทั้งไฟล์ ซึ่งปัญหาคือ ถ้าเจอไฟล์ที่มันมีขนาดใหญ่ (หลายบรรทัดมากๆ) จังหวะที่มัน Copy file ลงในตัวแปร buf ที่ผมตั้งไว้มันจะนานมากๆๆๆๆ ผมจึงตั้งกรทู้เพื่อถามว่า จะมีการ copy Line แค่ประมาณ 20 บรรทัดแรกได้ไหม ครับ
หลักการของโปรแกรมคือ
1.วางไฟล์ไว้ให้ตรงกับ Url ที่กำหนดใน Sheet (Input file Path)
2. แล้วกดปุ่ม Start Macro
3. ผลที่ได้คือ มันจะเอาข้อมูล บรรทัดที่ 5,6,7 (หลัง K: , B: , S: ตามลำดับ) เพื่อจะมาพิมพ์เพิ่มพวกข้อความ "DPRNT" ตามที่ผมกำหนดลงไป หลังบรรทัดที่ 13 (ตามที่ผมยกตัวอย่างไว้ข้างต้น ของเม้นก่อนหน้านี่ครับ)
ซึ่งหลักการเขียนคือ
3.1 จะ Copy file ทุกบรรทัดใส่ ตัวแปร Buf <-------****ปัญหาที่ทำให้เจอไฟล์ใหญ่แล้วค้างครับ
3.2 ใช้ตัวแปร buf ส่งค่าไปยังตัวแปร textline
3.3 ใช้ Textline เพื่อ ค้นหา (K: เพื่อจะตัดเอาข้อความหลังจากนั้นของบรรทัดนั้นมา
3.4 ทำหลักการเดียวกันกับ (B: และ (S: เพื่อให้ได้คำที่ต้องการมา
3.5 จากนั้นค้นหา (ORIGIN 2 NOT USE) แล้วเพิ่มข้อมูล
POPEN;
DPRNT[SR05*CLEAR];
DPRNT[SR01*01200]; <---- เอาค่า 01200 มาจากบรรทัดที่ 5
DPRNT[SR02*61]; <---- เอาค่า 61 มาจากบรรทัดที่ 6
DPRNT[SR03*KGS2]; <--- เอาค่า KGS2 มาจากบรรทัดที่ 7
DPRNT[SR04*START];
PCLOS;
3.6 จากนั้นก็จบไฟล์นี้ แล้วไปรันไฟล์ Input ตัวถัดไปที่อยู่ Path direct ที่วางไว้ครับ

4. ถ้าไฟล์ที่วางมีมากกว่า 1ไฟล์ มันจะวนรับทีละไฟล์ไปเรื่อยๆ จนครบครับ (ผมเลยใช้ตัวแปร X = 9 ถึง 38 ในการวน เพราะไฟล์ที่ผมจะวางจะไม่เกิน 29 ไฟล์ แน่ เลยวนรับแค่นั้นครับ)
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30905
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#12

Post by snasui »

yopkub wrote: Thu Feb 28, 2019 10:51 am ซึ่งปัญหาคือ ถ้าเจอไฟล์ที่มันมีขนาดใหญ่ (หลายบรรทัดมากๆ) จังหวะที่มัน Copy file ลงในตัวแปร buf ที่ผมตั้งไว้มันจะนานมากๆๆๆๆ ผมจึงตั้งกรทู้เพื่อถามว่า จะมีการ copy Line แค่ประมาณ 20 บรรทัดแรกได้ไหม ครับ
:D ได้เคยใส่ตัวนับเข้าไปใน Do...Loop เมื่อครับกำหนดแล้วค่อยออกจาก Do แล้วหรือไม่ครับ เช่น

Code: Select all

iCount = 0
Do Until EOF(myFile1)

    Line Input #myFile1, buf
    iCount = iCount + 1
    If iCount = 50 Then Exit Do
Loop
Close #1
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#13

Post by yopkub »

ได้ลองแล้วครับ
วนลูป แล้วให้ออก

แต่ตอนนี้ที่ผมเข้าใจ คือ

Line Input #myFile1, buf <---- มันหมายถึงการ Copy ทุกบรรทัดลงไปในตัวแปร Buf แล้วนะครับ

Code: Select all

Open strFile_Path_In For Input As myFile1
        L = 1
        MsgBox (buf)       
        iCount = 0
        
       Do Until EOF(myFile1)             
            MsgBox (iCount)
            Line Input #myFile1, buf
            
            MsgBox (buf)
            
            iCount = iCount + 1
            
            If iCount = 3 Then Exit Do
                                     
            MsgBox ("Finish1")
            
        Loop  
        Close #1
เพราะเข้ารอบแรก เมื่อปริ้น buf ดู มันก็ออกมาครบทุกบรรทัดเลยอ่ะครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30905
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#14

Post by snasui »

yopkub wrote: Fri Mar 01, 2019 11:15 am Line Input #myFile1, buf <---- มันหมายถึงการ Copy ทุกบรรทัดลงไปในตัวแปร Buf แล้วนะครับ
:lol: ขึ้นกับ Text File ครับ ไม่ใช่ว่าจะเป็นเป็นเช่นนี้เสมอไป ยกตัวอย่างไฟล์ที่คุณ yopkub แนบมาไม่แยกเป็นบรรทัด แต่ไฟล์ที่ผมสร้างขึ้นมาหรือไฟล์ทั่วไปมีการแยกเป็นรายบรรทัด

ข้อสังเกตง่าย ๆ ว่าโดยทั่วไปจะมีหลายบรรทัด Code โดยส่วนใหญ่แม้แต่ Code ที่คุณ yopkub ยกมาถามจะมีการ Loop ด้วย Do เพื่อไปยังแต่ละบรรทัด ไม่เช่นนั้นก็ไม่จำเป็นต้อง Loop ด้วย Do แต่อย่างใดครับ

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

Code: Select all

Dim hf As Integer
Dim lines As String, buf As String
Dim x As String, y As String, strInsert As String
strInsert = "POPEN;" & vbLf & _
        "DPRNT[SR05*CLEAR];" & vbLf & _
        "DPRNT[SR01*@];" & vbLf & _
        "DPRNT[SR02*#];" & vbLf & _
        "DPRNT[SR03*KGS2];" & vbLf & _
        "DPRNT[SR04*START];" & vbLf & _
        "PCLOS;"
hf = FreeFile
Open "C:\Users\santipon\Downloads\Temp\Forum\KGS001_" For Input As #hf
    Line Input #hf, buf
    lines = VBA.Left$(buf, 500)
Close #hf
x = Application.Trim(Mid(lines, InStr(lines, "(B:") + 3, 13))
y = Application.Trim(Mid(lines, InStr(lines, "(K:") + 3, 13))
strInsert = Replace(strInsert, "#", x)
strInsert = Replace(strInsert, "@", y)
buf = Replace(buf, "(ORIGIN 2 NOT USE)", "(ORIGIN 2 NOT USE)" & vbLf & strInsert)
Cells(31, 1).Value = buf
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: For Input As ใน vba ไปยังตัวแปรแบบไม่ครบทุกบรรทัด ทำได้ไหมครับ

#15

Post by yopkub »

ขอบคุณมากๆครับ

ผมลองเอา Concept ที่ให้ไปประยุกค์ ใช้งานกับ Code จริงผม (ปรับจาก Code เดิมทั้งหมด)
ตอนนี้ได้ตามเป้าหมายที่วางไว้แล้วครับ
แล้วไฟล์ที่นานก็เร็วขึ้นมากครับ จาก ชม.กว่าๆ เหลือแค่ไม่กี่นาทีครับ

ขอบคุณสำหรับคำแนะนำครับพี่
Post Reply