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
ไฟล์ที่จะแนบ Code ได้ อย่างน้อยจะมีนามสกุลเป็น .xlsm ลองแนบมาใหม่ครับ
Re: การเปิดโปรแกรมอื่นด้วย VBA
Posted: Sun Oct 05, 2014 9:47 am
by diamondbom
ขอโทษด้วยครับ ผม Save File ผิด
Re: การเปิดโปรแกรมอื่นด้วย VBA
Posted: Sun Oct 05, 2014 2:33 pm
by snasui
ตัวอย่าง 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
สำหรับ 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
ควรโพสต์ 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)
ขอคำแนะนำด้วยครับ
ขอบคุณครับ
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)
ขอคำแนะนำด้วยครับ
ขอบคุณครับ
...
การทำเช่นนั้นไม่จำเป็นต้องเปิดไฟล์ ปกติการทำงานระหว่างโปรแกรมจะส่งผ่านข้อมูลกันด้วย 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
ขอบคุณครับ
ที่ผมต้องการเลือกเปิด 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
Re: การเปิดโปรแกรมอื่นด้วย VBA
Posted: Wed Oct 08, 2014 11:07 pm
by snasui
ค่า 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
ขอบคุณครับ ผมได้ลองใช้ 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
ตัวอย่าง Code การเปิดไฟล์ด้วย Notepad ตามด้านล่างครับ
Code: Select all
Sub OpenTextFileWithNotePad()
NotePadOpenFile = Shell("C:\WINDOWS\notepad.exe C:\myText.txt", 1)
End Sub