2010-03-11 8 views
8

तो मैं एक MSAccess एमडीबी अन्य एमडीबी के खोलने के लिए और कोड है कि दो पहुँच एमडीबी के कोड मतभेदों को खोजने के लिए की तुलना करेंगे, क्वेरी डिफ, आदि का एक समूह को चलाने के लिए की जरूरत है कि है। किसी भी उत्पादन एमडीबी को सत्यापित करने का लक्ष्य मूल परिनियोजन से बदला नहीं गया है।MSAccess से MSAccess खोलते समय ऑटोएक्सैक मैक्रो को कैसे छोड़ें?

मेरे समस्या इन ऐप्स एक्सेस करें के कई AutoExec मैक्रोज़ है और वहाँ AutoExec मैक्रो चलने के बिना .OpenCurrentDatabase कॉल करने के लिए कोई आसान तरीका है।

कैसे मैं सिर्फ मैक्रो को छोड़ कोड का उपयोग कर सकते हैं?

मैं जानता हूँ कि मैं नीचे शिफ्ट कुंजी पकड़ कर सकते हैं। मुझे पता है कि मैं उस विकल्प को चालू और बंद भी कर सकता हूं।

उत्तर

4

यह एक डरपोक समाधान है, लेकिन यह मेरे लिए काम करता है।

मैं DoCmd.DatabaseTransfer AutoXec मैक्रो के करता हूं। तब मैं sSourcePath एक खाली एक के साथ autoexec की जगह, DoCmd.DatabaseTransfer acExport

का उपयोग कर चाल है कि है एक निर्यात के ऊपर लिख देगा

DoCmd.TransferDatabase acImport, "माइक्रोसॉफ्ट एक्सेस", , acMacro, "autoexec", "autoexecSource"

DoCmd.TransferDatabase acExport, "माइक्रोसॉफ्ट एक्सेस", sSourcePath, acMacro, "autoexecblank", "autoexec"

मुझे क्या करना है कि के लिए फिर से दूसरा एमडीबी

DoCmd.TransferDatabase acImport, "माइक्रोसॉफ्ट एक्सेस", sDestPath, acMacro, "autoexec" " autoexecDest "

DoCmd.TransferDatabase acExport, " माइक्रोसॉफ्ट एक्सेस ", sDestPath, acMacro," autoexecblank "," autoexec "

तो मैं के बाद से मैं उन्हें आयातित और उन्हें

प्रतिस्थापित तो मैं दो मैक्रो मैं आयातित तुलना और फिर उन्हें डेटाबेस के लिए वापस निर्यात AutoExec मैक्रोज़ ट्रिगर किए बिना दो एमडीबी के बीच diffs को खोजने के लिए सब तुलना कर सकते हैं।

DoCmd.TransferDatabase acExport, "माइक्रोसॉफ्ट एक्सेस", sSourcePath, acMacro, "autoexecSource", "autoexec"

DoCmd.TransferDatabase acExport, "माइक्रोसॉफ्ट एक्सेस", sDestPath, acMacro, " autoexecDest "," autoexec "

स्पष्ट रूप से यह समाधान केवल एक्सेस में वीबीए का उपयोग करके काम करता है, लेकिन यह काम करता है।

उम्मीद है कि यह किसी की मदद करेगा।स्टार्टअप पर

+0

बहुत चुस्त :) +1 – Praesagus

5

कोड रन कोई AutoExec मैक्रो में नहीं हो सकता है, यह एक स्टार्टअप के रूप में इसलिए हो सकता है,, आप एपीआई के माध्यम से 'प्रोग्राम के रूप में पारी-कुंजी दबाने' विचार करना चाह सकते:

http://www.mvps.org/access/api/api0068.htm

+0

यह स्वीकार्य उत्तर होना चाहिए। – transistor1

2

एक और विकल्प यदि आपके पास खोलने वाले डेटाबेस के ऑटोएक्सैक मैक्रोज़ को संपादित करने की पहुंच है: मैक्रो में प्रत्येक चरण पर एक शर्त निर्धारित करें जो [Application].[UserControl] निर्दिष्ट करती है। इसे निर्दिष्ट करके, मैक्रो चरण केवल तभी चलाया जाएगा जब उपयोगकर्ता द्वारा डेटाबेस खोला जाता है, न कि स्वचालन के माध्यम से। यदि मैक्रो चरण में पहले से ही एक शर्त सेट है, तो आप इसके चारों ओर कोष्ठक डाल सकते हैं: (old condition) AND [Application].[UserControl]

यदि आपके पास उन मैक्रोज़ को बदलने की क्षमता नहीं है, हालांकि, आप @ चकबी के समाधान के बाद बेहतर हो सकते हैं।

0

यह एक पुराना सवाल है, लेकिन ऐसा करने का एक और तरीका/cmd कमांडलाइन तर्क का उपयोग करना होगा, और एक/cmd तर्क प्रदान करने के आधार पर सशर्त रूप से स्टार्टअप रूटीन चलाने के लिए ऐप के स्टार्टअप में COMMAND कथन का उपयोग करना होगा । यह केवल कमांडलाइन स्टार्टअप के साथ काम करेगा, हालांकि, ऑटोमेशन के माध्यम से नहीं।

2

एक और विकल्प: अपने वीबी कोड में ऑटोएक्सैक मैक्रो का नाम बदलें।

OpenCurrentDatabase ("अपने डेटाबेस")

DoCmd.Rename "AutoExec", acMacro, "tmp_Autoexec"

CloseCurrentDatabase

के बाद आप अपनी कार्रवाई एक नाम बदलने फिर से वापस AutoExec लिए करते किया है ... और voila ....

+1

'OpenCurrentDatabase'' ऑटोएक्सैक मैक्रो को निष्पादित नहीं करेगा (* 'DoCmd.Rename' लाइन तक पहुंचने से पहले)? – Heinzi

संबंधित मुद्दे