Page 1 of 2

การเปิดโปรแกรมอื่นด้วย VBA

Posted: Sat Oct 04, 2014 10:36 pm
by diamondbom
คือว่าผมต้องการออกแบบการใช้ Excel เชื่อมโยงกับโปรแกรมอื่นๆ นะครับในที่นี้ผมทดลองเริ่มด้นด้วยการเปิด notepad
แต่ไม่สามารถทำได้ขอคำแนะนำด้วยครับ ผมใช้ comandbutton ในการเปิดผิดหรือปล่าวครับในที่นี้ หรื้อต้องใช้คำสั่งอื่น

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Sat Oct 04, 2014 11:06 pm
by snasui
:D ไฟล์ที่จะแนบ Code ได้ อย่างน้อยจะมีนามสกุลเป็น .xlsm ลองแนบมาใหม่ครับ

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Sun Oct 05, 2014 9:47 am
by diamondbom
ขอโทษด้วยครับ ผม Save File ผิด :D

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Sun Oct 05, 2014 2:33 pm
by snasui
:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Sub OpenApp()
    Dim ProcessID As Double
    ProcessID = Shell("Notepad.exe", vbNormalFocus)
    AppActivate ProcessID
End Sub

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Sun Oct 05, 2014 6:09 pm
by diamondbom
การใช้งาน code ใช้กับปุ่ม control ใดครับ

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Sun Oct 05, 2014 6:12 pm
by snasui
:D สำหรับ Code ใช้กับปุ่มใด ๆ หรือไม่ใช่กับปุ่มแต่ใช้กับเหตุการณ์ใด ๆ ที่เกิดขึ้นก็ย่อมได้ เช่นการเลือกเซลล์ การเลือกชีท การปิดไฟล์ ฯลฯ ครับ

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Sun Oct 05, 2014 7:38 pm
by diamondbom
คือว่าผมทดลองใช้กับ comand button 2 กรณีดังนี้ครับ

1-โปรแกรมแสดง Complie error Ambiguous name detected :OpenApp
Private Sub CommandButton2_Click()
Sub OpenApp()
Dim ProcessID As Double
ProcessID = Shell("Notepad.exe", vbNormalFocus)
AppActivate ProcessID
End Sub
End Sub

2-โปรแกรมนิ่งเฉย
Sub OpenApp()
Dim ProcessID As Double
ProcessID = Shell("Notepad.exe", vbNormalFocus)
AppActivate ProcessID
End Sub

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Sun Oct 05, 2014 8:08 pm
by snasui
:D ควรโพสต์ Code ให้แสดงเป็น Code โดยดูจากตัวอย่างที่นี่ครับ viewtopic.php?style=3&f=3&t=1187

ข้อ 1 Code ไม่ถูกต้อง เราจะวาง Sub ซ้อนกัน 2 อัน End Sub ซ้อนกัน 2 อันเช่นนั้นไม่ได้ครับ

แก้ไขโดยการลบ Sub OpenApp() และ End Sub ออกไป 1 ตัว

สำหรับข้อ 2 หากไม่ได้ Assign Macro ให้กับปุ่มใด ๆ ก็ไม่แปลกที่จะไม่เกิดอะไรขึ้น สำหรับการ Assign Macro ให้กับปุ่มศึกษาจากที่นี่ครับ http://snasui-excelvba.blogspot.com/201 ... macro.html

คุณ diamondbom ควรซื้อหนังสือเกียวกับการใช้งาน VBA มาอ่านแล้วฝึกทำตามนั้น เมื่อติดแล้วค่อยมาถาม สำหรับหนังสือคงต้องดูด้วยตนเอง ผมไม่สามารถแนะนำได้เพราะผมไม่ได้อ่านหนังสือไทย อ่านจาก Help ของโปรแกรมเป็นหลัก

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Sun Oct 05, 2014 8:44 pm
by diamondbom
ขอบคุณครับ

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Mon Oct 06, 2014 11:22 am
by diamondbom
ในการเปิด notepad สามารถเลือกเปิด File ที่บันทึกไว้ และนำข้อความด้านในมาใส่ใน Excel ได้หรือปล่าวครับ
เช่น ผมต้องการเปิด File AAAA.txt ซื่งข้อความด้านในมีอยู่ว่า บรรทัด1 A=1 บรรทัด2 B=2
A=1 มาใส่ใน cell(1,1)
B=2 มาใส่ใน cell(2,1)
ขอคำแนะนำด้วยครับ :D ขอบคุณครับ

Code: Select all

Private Sub CommandButton2_Click()
On Error Resume Next
Dim ProcessID As Double
ProcessID = Shell("notepad.exe\AAAA.txt", vbNormalFocus)
Debug.Print ProcessID
If ProcessID <> 0 Then
AppActivate ProcessID
Else
MsgBox "No app"
End If
End Sub

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Mon Oct 06, 2014 11:55 am
by songsug
แบบสั้นๆครับ เปิดได้ทุกนามสกุลที่ผมใช้อยู่นะ

Code: Select all

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Code: Select all

Sub OpenShellExecute()
Dim handle As Long
    handle = ShellExecute(0, "Open", Range("A1").Value, 0, 0, 1)
End Sub

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Mon Oct 06, 2014 6:05 pm
by diamondbom
ขอบคุณครับ แต่ผมไม่ทราบวิธีการนำไปใช้ขอคำแนะนำด้วยครับ ขอบคุณครับ

Code: Select all

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Tue Oct 07, 2014 11:48 am
by snasui
diamondbom wrote:ในการเปิด notepad สามารถเลือกเปิด File ที่บันทึกไว้ และนำข้อความด้านในมาใส่ใน Excel ได้หรือปล่าวครับ
เช่น ผมต้องการเปิด File AAAA.txt ซื่งข้อความด้านในมีอยู่ว่า บรรทัด1 A=1 บรรทัด2 B=2
A=1 มาใส่ใน cell(1,1)
B=2 มาใส่ใน cell(2,1)
ขอคำแนะนำด้วยครับ :D ขอบคุณครับ
...
:D การทำเช่นนั้นไม่จำเป็นต้องเปิดไฟล์ ปกติการทำงานระหว่างโปรแกรมจะส่งผ่านข้อมูลกันด้วย Text File และไม่จำเป็นต้องเปิด Text File นั้น แต่เราใช้ Code ไปดึงข้อมูลจาก Text File มาใช้เลย ไม่ทราบว่าการทำเช่นนี้ไม่ตรงกับความต้องการอย่างไร หรือมีวัตถุประสงค์ใดที่ต้องเปิดไฟล์ครับ

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Tue Oct 07, 2014 1:27 pm
by songsug
แบบนี้หรือป่าวครับ เปิด TextFile แล้ววน Loop เอามาวาง

Code: Select all

Private Sub CommandButton1_Click()
        Dim Handle As Integer, File_Name As String
        Dim WriteRow As Long, TemArr, OneLine As String
        Dim intRow As Integer
        intRow = 1
        Handle = FreeFile
        File_Name = "ทีอยู่ TextFile"
        Open File_Name For Input As #Handle
        While Not EOF(1)
                Line Input #Handle, OneLine
              Sheet4.Range("A" & intRow).Value = OneLine
        intRow = intRow + 1
        Wend
        Close #Handle
End Sub

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Tue Oct 07, 2014 2:59 pm
by diamondbom
ขอบคุณครับ :D ที่ผมต้องการเลือกเปิด File เพราะว่าต้องการเปลี่ยนแปลงค่าใน File นั้นๆ ก่อนนำมาใส่ Excel ครับ

ในการเปิด notepad สามารถเลือกเปิด File ที่บันทึกไว้ และนำข้อความด้านในมาใส่ใน Excel ได้หรือปล่าวครับ
เช่น ผมต้องการเปิด File AAAA.txt ที่ Desktop ถ้าเป็นโค๊ดแบบนี้ผมควรป้อนอย่างไรครับ

Code: Select all

ProcessID = Shell("notepad.exe\AAAA.txt", vbNormalFocus)

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Tue Oct 07, 2014 3:08 pm
by snasui
:? สิ่งที่คุณ diamondbom อธิบายมาคือเปลียนแปลงใน Text File ก่อน ไม่ใช่เปิดขึ้นมาแล้วเปลี่ยนแปลงใด ๆ ดังนั้น ในการนำค่ามาใส่โปรแกรม Excel คุณ diamondbom จึงไม่จำเป็นต้องเปิด Text File

ได้ลองใช้ Code ที่คุณ songsug ตอบแล้วยัง ติดขัดตรงไหน อย่างไรครับ

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Wed Oct 08, 2014 4:23 pm
by diamondbom
ขอคำแนะนำเกี่ยวกับการป้อน "ทีอยู่ TextFile" ด้วยครับ

ที่ผมทำลงไปคือ
1 Compile Error

Code: Select all

File_Name = C:\Users\Pet\Desktop\AAAA.txt
2 Run time error '424': object required

Code: Select all

File_Name = Desktop \ AAAA.txt

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Wed Oct 08, 2014 11:07 pm
by snasui
:D ค่า String ต้องครอบด้วยฟันหนูครับ จาก C:\Users\Pet\Desktop\AAAA.txt เป็น "C:\Users\Pet\Desktop\AAAA.txt"

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Thu Oct 09, 2014 1:22 am
by diamondbom
:D ขอบคุณครับ ผมได้ลองใช้ Code ที่คุณ songsug แนะนำมาแล้วครับ ไม่มีติดขัดครับ

รบกวนขอคำแนะนำเพิ่มเติมด้วยครับ
คือว่าผมต้องการเลือกเปิด File ของ Notepad ก่อนนั้น เพราะว่าผมต้องการเปลี่ยนแปลงค่าในนั้นก่อนแล้วจึงนำข้อมูลมาลงใน Excel ประมาณว่า ค่าในนั้นมีการเเปลี่ยนแปลงอยู่เสมอ ใช้งานทั้งสองโปรแกรมไปพร้อมๆกัน

ผมลองเขียนแล้วแต่ยังไม่สามารถเลือกเปิด File ของ Notepad ได้ รบกวนขอคำแนะนำด้วยครับ

Code: Select all

Private Sub CommandButton2_Click()
On Error Resume Next
Dim ProcessID As Double
ProcessID = Shell("C:\Users\Pet\Desktop\AAAA.txt", vbNormalFocus)
Debug.Print ProcessID
If ProcessID <> 0 Then
AppActivate ProcessID
Else
MsgBox "No app"
End If
End Sub

Re: การเปิดโปรแกรมอื่นด้วย VBA

Posted: Thu Oct 09, 2014 2:03 pm
by snasui
:D ตัวอย่าง Code การเปิดไฟล์ด้วย Notepad ตามด้านล่างครับ

Code: Select all

Sub OpenTextFileWithNotePad()
    NotePadOpenFile = Shell("C:\WINDOWS\notepad.exe C:\myText.txt", 1)
End Sub