Page 1 of 1
คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Sat Feb 11, 2017 5:04 pm
by Aantsugar
อยากให้ไฟล์ที่เราแนบลิงค์ ปิดอัตโนมัติ เมื่อเราคลิกไฟล์ลิงค์นั้นไปแล้ว เมื่อคำสั่งเวลาในไฟล์ Excel หมดเวลาแล้ว ให้ไฟล์ที่เราคลิกลิงค์ ปิดไฟล์นั้นอัตโนมัติเหมือนกันคะ ไฟล์ลิงค์เป็น Word เราต้องเขียน คำสั่ง VBA ในไฟล์ Excel หรือ ไฟล์ Word คะ พอกดคลิกที่ไฟล์ Excel ที่ TEST เวลาจะนับถอยหลัง พอหมดเวลา ไฟล์ Excel ปิด แต่ไฟล์ที่เราคลิกลิงค์ไปไม่ปิดเองอัตโนมัติคะ

Code ที่เขียนมาที่ รบกวนอาจารย์ช่วยดูว่าติดอะไรตรงไหนคะ ตามแนบไฟล์ ขอบคุณคะ
Code: Select all
Sub Macro1()
Windows("TEST WORK EXCEL.xls").Activate
ThisWorkbook.Close
End Sub
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Sat Feb 11, 2017 6:14 pm
by snasui

ช่วยปลดรหัสการเข้าถึง Code ด้วยครับ Code ที่เขียนมาตามโพสต์ด้านบน ไม่สื่อถึงสิ่งที่ต้องการจะทำคือสั่งให้ปิดไฟล์ที่เปิดมาตาม Hyperlink
แนวทางการเขียน Code ให้ควบคุม Microsoft Office อื่นนั้น ควรกำหนดตัวแปรให้กับโปรแกรมนั้น ๆ ที่จะเปิด ซึ่งไม่ใช่เป็นการเปิดด้วย Hyperlink เพราะอาจจะซับซ้อนถึงขั้นเรียก Windows API เพื่อปิดไฟล์ที่เปิดตาม Hyperlink แต่จะเปิดด้วย Code ในไฟล์หลัก เมื่อไฟล์หลักปิดจึงจะสามารถสั่งให้ปิดไฟล์ตามตัวแปรที่กำหนดได้
ช่วยแจ้งมาด้วยว่าติดปัญหาที่ Procedure ใด บรรทัดใด จะได้เข้าถึงปัญหาโดยไวครับ
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 10:10 am
by Aantsugar
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 10:16 am
by snasui

Error คืออะไร ใน Code Module ใด ที่บรรทัดใด แจ้งมาด้วยครับ
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 10:20 am
by Aantsugar
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 10:23 am
by snasui

โปรแกรมฟ้องว่าอะไรแจ้งมาด้วยครับ
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 10:28 am
by Aantsugar
แต่พอ Run Module2 แล้ว จะเกิดข้อผิดพลาดที่บรรทัด
Set msWord = App.Document.Open
ฟ้องว่า Compile error : Variable not defined คะ
รบกวนอาจารย์ว่าเกิดไรคะ
ขอบคุณคะ

Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 10:46 am
by snasui

เกิดจากคำสั่ง App ต้องเขียนให้เต็มเป็น Application ยกเว้นจะประกาศให้ Application เป็น App จึงจะใช้เช่นนั้นได้
ตัวอย่างการปรับ Code ครับ
Code: Select all
Sub Search()
Dim wdApp As Word.Application, msWord As Word.Document
Set wdApp = CreateObject("Word.Application")
Set msWord = Application.Documents.Open("D:\my document\Test File\TEST WORD.doc")
wdApp.Visible = True
End Sub
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 11:07 am
by Aantsugar
ปรับ Code ตามอาจารย์ แล้ว
เกิดข้อผิดพลาดที่บรรทัด
Set msWord = Application.Documents.Open("D:\my document\Test File\TEST WORD.doc")
พอ Run ฟ้อง Error
Run-time error '438' : Object doesn't support this property or method

Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 11:25 am
by snasui

ปรับ Code เป็นด้านล่างครับ
Code: Select all
Set msWord = wdApp.Documents.Open("D:\my document\Test File\TEST WORD.doc")
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 11:49 am
by Aantsugar
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 4:25 pm
by Aantsugar
อาจารย์คะ

ติดตรงอีกอย่างคะ
ตอนกด TEST ตรงหน้า
Sheet หน้าแรก แล้วเวลาจะนับถอยหลัง แล้วเปิดไฟล์ Word พร้อมกัน พอหมดเวลา ไฟล์ Excel ปิด แต่ไฟล์ Word ไม่ปิดด้วยคะ ไม่ทราบเราต้องเอา Code ไปแทรกในส่วนไหนคะถึงจะให้ไฟล์ปิดพร้อมกัน เมื่อหมดเวลาคะ ตามไฟล์แนบคะ

Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 5:41 pm
by puriwutpokin
ลองปรับเป็น
Code: Select all
Sub Reset()
Dim Count As Range
Dim objWord As Object
Set Count = Worksheets("TIME").[B7]
Set objWord = GetObject(, "Word.Application")
On Error Resume Next
Count.Value = Count.Value - TimeValue("00:00:01")
If Count <= 0 Then
MsgBox "หมดเวลา"
Application.DisplayAlerts = False
objWord.Quit
Application.Save
Application.Quit
Exit Sub
End If
Call Timer
End Sub
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Mon Feb 13, 2017 7:53 pm
by snasui
Aantsugar wrote:อาจารย์คะ

ติดตรงอีกอย่างคะ
ตอนกด TEST ตรงหน้า
Sheet หน้าแรก แล้วเวลาจะนับถอยหลัง แล้วเปิดไฟล์ Word พร้อมกัน พอหมดเวลา ไฟล์ Excel ปิด แต่ไฟล์ Word ไม่ปิดด้วยคะ ไม่ทราบเราต้องเอา Code ไปแทรกในส่วนไหนคะถึงจะให้ไฟล์ปิดพร้อมกัน เมื่อหมดเวลาคะ ตามไฟล์แนบคะ


ย้ายตัแปรเดิมไปเป็นระดับ Module ตัวอย่างตามด้านล่าง
Code: Select all
Option Explicit
Dim CountDown As Date
Dim wdApp As Word.Application, msWord As Word.Document
ตรง Procedure Reset ปรับเป็นด้านล่างครับ
Code: Select all
Sub Reset()
Dim Count As Range
Set Count = Worksheets("TIME").[B7]
On Error Resume Next
Count.Value = Count.Value - TimeValue("00:00:01")
If Count <= 0 Then
MsgBox "หมดเวลา"
Application.DisplayAlerts = False
Application.Save
Application.Quit
wdApp.Quit
Exit Sub
End If
Call Timer
End Sub
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Tue Feb 14, 2017 8:53 am
by Aantsugar
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Wed Feb 15, 2017 10:47 am
by Aantsugar
สอบถามอีกอย่างคะ

คือ พอเวลาในคำสั่ง
ตอนเราพิมพ์ข้อมูลในไฟล์ Word มันไม่แจ้งเตือน MsgBox "หมดเวลา" ให้คะ อยากให้แสดง MsgBox "หมดเวลา" แจ้งเตือนในไฟล์ Word ด้วยคะ ขอคำแนะนำด้วยคะ

ขอบคุณคะ
ตัวอย่างตามไฟล์แนบคะ
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Wed Feb 15, 2017 6:38 pm
by snasui

คำสั่งเดิมเมื่อหมดเวลามันจะปิด Word ไปด้วย ไม่ทราบว่ายังเป็นคำสั่งนั้นหรือไม่ หากยังเป็นคำสั่งนั้นเกิดการฟ้องอะไรหรือไม่ อย่างไรครับ
ในกรณีที่ถามมานี้ได้เขียนคำสั่งอะไรเพิ่มเข้าไปหรือไม่ ติดขัดบรรทัดใดครับ
Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Thu Feb 16, 2017 8:52 am
by Aantsugar
ยังใช้คำสั่งเดิมคะ ไม่ได้เขียนอะไรเพิ่มเติม เวลามันหมดจะปิด Word ไปด้วยคะ แต่ว่ามัน
- ไม่แจ้งเตือน MsgBox "หมดเวลา" ในหน้า Word
ถึงแม้เวลาในคำสั่ง Excel จะหมดเวลาแล้วเราก็ยังสามารถทำงานในหน้า Word ต่อคะ จนกว่าเราจะคลิกกลับไปหน้า Excel คะมันถึงจะแจ้งเตือน MsgBox "หมดเวลา" คะ

Re: คำสั่ง VBA ที่กำหนด Hyperlink ปิดแฟ้มอัตโนมัติ
Posted: Thu Feb 16, 2017 7:28 pm
by snasui

คำสั่งเดิมคงไม่พอครับ หากทำงานใน Excel แล้วหมดเวลาแต่ไม่คลิกกล่องโต้ตอบเพื่อให้ Code ทำงานต่อโดยปิดโปรแกรม Word แต่กลับไปทำงานใน Word ต่อ งานลักษณะนี้สามารถเขียนจับเวลาด้วย Windows API ครับ
http://www.cpearson.com/excel/OnTime.aspx