احتمالأ برای شما پیش آمده باشد زمانی که برنامه ای با نرم افزار Access می سازید، بخواهید فرم اصلی بصورت تمام صفحه باشد و از نرم افزار Access خبری نباشد. برای این کار مراحل زیر را دنبال کنید:
1- در روال form_open فرم مربوطه ، جهت پنهان نمودن Menu های Access و . کد زیر را درج نمائید:
Private Sub Form_Open(Cancel As Integer)
DoCmd.SetWarnings False
On Error GoTo 1
DoCmd.ShowToolbar "ribbon", acToolbarNo
CommandBars.ActiveMenuBar.Enabled = False
CurrentDb.Properties("ShowDocumentTabs").Value = False
Application.SetOption "Show Status Bar", False
'select the navigation pange
Call DoCmd.NavigateTo("acNavigationCategoryObjectType")
'hide the selected object
Call DoCmd.RunCommand(acCmdWindowHide)
DoCmd.Maximize
1: End Sub
با روال بالا، زمانی که فرم مربوطه باز می شود بصورت کامل خواهد بود، البته پس از یکبار اجرا باید برنامه را کامل ببندید و دوباره باز کنید تا حذف Tab ها هم عمل کند. در ضمن خواص Pop up و modal فرم هم باید روی No تنظیم شده باشند.
پس از بستن فرم، باید همه چیز سر جای خودش برگردد وگرنه شما در برنامه Access خود menu و . را نخواهید دید. برای اینکار دستورات قسمت 2 را بنویسید
2- در روال form_close فرم مربوطه کد زیر را درج نمائید :
Private Sub Form_Close()
DoCmd.SetWarnings False
On Error GoTo 1
DoCmd.ShowToolbar "ribbon", acToolbarYes
CommandBars.ActiveMenuBar.Enabled = True
CurrentDb.Properties("ShowDocumentTabs").Value = True
Application.SetOption "Show Status Bar", True
Call DoCmd.SelectObject(acTable, , True)
1: End Sub
امیدوارم مطلب فوق در بهبود برنامه نویسی شما مؤثر بوده باشد. البته تغییر آی Access و . نیز به ظاهر کار بسیار کمک خواهد کرد که در مطالب بعدی حتمأ درج خواهد گردید.
در برنامه های ساخته شده توسط نرم افزار Access شاید نیاز باشد در قسمتی از برنامه با زدن یک دکمه، My Computer باز شود و مسیر دلخواه ما را نمایش دهد و بتوانیم محتویات آن فولدر یا درایو را ببینیم. برای اینکار از کدهای زیر می توان استفاده نمود:
Private Sub Command0_Click()
Dim Path
Path = "D:\"
Shell "cmd /c start """" explorer.exe " & Path, vbHide
End Sub
Private Sub Command1_Click()
Dim Path
Path = "E:\New folder"
Shell "cmd /c start """" explorer.exe " & Path, vbHide
End Sub
یکی دیگر از نیازهای ثبت لاگ های برنامه های ساخته شده که چند یوزر روی آن کار می کنند IP سیستمی است که با آن برنامه باز شده و یا ویرایش می شود. برای بدست آوردن IP سیستم بهتر است ابتدا کد مربوط به پیدا کردن IP در یک فانکشن تعریف شده، سپس در هر کجای فرم که نیاز بود از نام فانکشن استفاده نمود:
Public Function getMyIP()
Dim myWMI As Object, myobj As Object, itm
Set myWMI = GetObject("winmgmts:\\.\root\cimv2")
Set myobj = myWMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each itm In myobj
getMyIP = itm.IPAddress(0)
Exit Function
Next
End Function
me.text1=getMyIP
امیدوارم این موضوع نیز مفید واقع شود
در زمانی که یک برنامه Access در شبکه Share شده و Userهای زیادی از آن استفاده می کنند، شاید نیاز داشته باشید در ثبت رکوردهای جداول خود Log داشته باشید و بفهمید چه رکوردی توسط چه User و در چه زمانی ویرایش شده است. روش ثبت همراه با پیغام تأئید در مطالب بعدی ذکر خواهد شد اما فعلأ به موضوع Username کاربری که در حال ویرایش رکوردها است می پردازیم.
جهت پیدا کردن User جاری سیستم کافی است در هر قسمت از برنامه که نیاز به استفاده از Username سیستم می باشد عبارت زیر را درج نمائید:
Environ("Username")
me.log=Environ("Username") & " " & Now
امیدوارم این مطلب نیز مفید واقع شده باشد
پیرو مطلب تمام صفحه کردن فرم های ساخته شده توسط نرم افزار Access و حذف ribbon و menu bar و . ، شاید بدنبال این باشین که بخواین در زمان اجرای برنامه و لود شدن اولین فرم، آی Access به آی مورد دلخواه شما تغییر پیدا کنه. البته می دونم که اینکار رو می تونید در قسمت Option/application icon انجام بدین ولی مشکل اینجاست که با جابجا شدن برنامه یا انتقال از کامپیوتری به کامپیوتر دیگر، این آی عمل نخواهد کرد.
راهکار مناسب اینست که خود فایل Access و آی مربوطه در یک پوشه قرار داده شوند (البته درون پوشه می توانید یک فولدر بنام Data داشته باشید و آی را درون آن قرار دهید) و سپس در روال form_open به فرم دستور دهید از مسیر جاری برنامه (حالا فرقی نمی کند روی کدام درایو یا کامپیوتر باشد، هر جا که فایل Access شما باشد بنام مسیر جاری شناخته می شود) آی را بخواند و در فرم استفاده کند. برای اینکار کدهای زیر را در فرم اصلی برنامتان که از ابتدا تا آخر باز است وارد نمائید، البته می تواند آنرا بصورت ماژول دربیاورید و در تمام فرم ها استفاده کنید:
Private Sub Form_Load()
' other codes.
ChangeProperty "AppIcon", dbText, CurrentProject.Path & "\\Data\myicon.ico"
Application.RefreshTitleBar
' other codes.
End Sub
Function ChangeProperty(strPropName As String, varPropType As String, varPropValue As Variant) As Integer
Dim dbs As DAO.Database
Dim prp As DAO.Property
Set dbs = CurrentDb
On Error GoTo PROC_ERROR
dbs.Properties(strPropName) = varPropValue
ChangeProperty = True
PROC_EXIT:
On Error Resume Next
Set prp = Nothing
Set dbs = Nothing
Exit Function
PROC_ERROR:
If Err.Number = 3270 Then
Set prp = dbs.CreateProperty(strPropName, varPropType, varPropValue)
dbs.Properties.Append prp
Resume Next
Else
ChangeProperty = False
Resume PROC_EXIT
End If
End Function
Sub seticon()
ChangeProperty "AppIcon", dbText, CurrentProject.Path & "\\Data\myicon.ico"
Application.RefreshTitleBar
End Sub
احتمالأ برای شما پیش آمده باشد زمانی که برنامه ای با نرم افزار Access می سازید، بخواهید فرم اصلی بصورت تمام صفحه باشد و از نرم افزار Access خبری نباشد. برای این کار مراحل زیر را دنبال کنید:
1- در روال form_open فرم مربوطه ، جهت پنهان نمودن Menu های Access و . کد زیر را درج نمائید:
Private Sub Form_Open(Cancel As Integer)
DoCmd.SetWarnings False
On Error GoTo 1
DoCmd.ShowToolbar "ribbon", acToolbarNo
CommandBars.ActiveMenuBar.Enabled = False
CurrentDb.Properties("ShowDocumentTabs").Value = False
Application.SetOption "Show Status Bar", False
'select the navigation pange
Call DoCmd.NavigateTo("acNavigationCategoryObjectType")
'hide the selected object
Call DoCmd.RunCommand(acCmdWindowHide)
DoCmd.Maximize
1: End Sub
با روال بالا، زمانی که فرم مربوطه باز می شود بصورت کامل خواهد بود، البته پس از یکبار اجرا باید برنامه را کامل ببندید و دوباره باز کنید تا حذف Tab ها هم عمل کند. در ضمن خواص Pop up و modal فرم هم باید روی No تنظیم شده باشند.
پس از بستن فرم، باید همه چیز سر جای خودش برگردد وگرنه شما در برنامه Access خود menu و . را نخواهید دید. برای اینکار دستورات قسمت 2 را بنویسید
2- در روال form_close فرم مربوطه کد زیر را درج نمائید :
Private Sub Form_Close()
DoCmd.SetWarnings False
On Error GoTo 1
DoCmd.ShowToolbar "ribbon", acToolbarYes
CommandBars.ActiveMenuBar.Enabled = True
CurrentDb.Properties("ShowDocumentTabs").Value = True
Application.SetOption "Show Status Bar", True
Call DoCmd.SelectObject(acTable, , True)
1: End Sub
امیدوارم مطلب فوق در بهبود برنامه نویسی شما مؤثر بوده باشد. البته تغییر آی Access و . نیز به ظاهر کار بسیار کمک خواهد کرد که در مطالب بعدی حتمأ درج خواهد گردید.
زمانی که برنامه ساخته شده توسط Access از فونت خاصی که شاید بر روی همه سیستم ها نصب نباشد استفاده کند، نیاز داریم قبل از استفاده از برنامه فونتها بصورت اتوماتیک بر روی سیستم نصب شوند. برای اینکار بهتر است فونتهای برنامه را از قبل در پوشه Dataی برنامه که پوشه فونت در آن قرار داده شده کپی کرد (قبلأ گفته شد که این پوشه Data همیشه کنار برنامه اصلی قرار دارد). در کد نویسی برنامه هم می توان تعریف نمود هر بار در زمان اجرای برنامه این فونت را از مسیر بالا نصب نماید.
نمونه برنامه نصب فونت در زیر قرار داده شده که به تناسب برنامه اجرائی می توان آنرا تغییر داد و یا از دستورات مربوطه در قسمتهای دیگر برنامه استفاده نمود:
ابتدا یک فرم ساخته و کنترل های زیر را در آن قرار دهید:
Textbox: txtPath
List Box: lstFonts
Button: btnFontInstall
در زمان لود شدن فرم، برنامه بصورت اتوماتیک به پوشه Data\Font که در مسیر جاری برنامه قرار دارد می رود و فونت های درون این پوشه را در لیست باکس قرار می دهد. سپس می توان با انتخاب فونت از لیست و زدن دکمه Install آنرا نصب نمود. پس از ساخت فرم و قرار دادن کنترل ها، کد زیر را بصورت کامل در قسمت کد نویسی برنامه وارد کنید:
Option Compare Database
Option Explicit
Private Declare PtrSafe Function AddFontResource Lib "gdi32.dll" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Private Sub btnFontInstall_Click()
InstallFont
End Sub
Private Sub Form_Load()
On Error GoTo 1
Dim fs, fl, f, X As Variant
Dim Path As String
Path = Application.CurrentProject.Path & "\Data\Font\"
txtPath = Path
LstFonts.RowSourceType = "Value List"
LstFonts.RowSource = ""
Set fs = CreateObject("Scripting.FileSystemobject")
Set fl = fs.GetFolder(Path)
Set f = fl.Files
For Each X In f
LstFonts.AddItem X.Name
Next
1: End Sub
Sub InstallFont()
Dim Result As Long
Result = AddFontResource(LstFonts)
MsgBox Result & " fonts added to windows font directory"
End Sub
ما در این پست قسمت Search گوشه بالای صفحه Explorer ویندوز رو شبیه سازی می کنیم. درایو رو انتخاب می کنیم و مطلب، فایل و . رو در قیمت Search می نویسیم و لیست موارد Search شده در پنجره Explorer به نمایش درخواهد آمد. برای انجام اینکار فرم بالا رو طراحی کنید و در اون کنترل های زیر رو قرار بدید:
Combobox: CombDrives
Textbox: txtSearch
Button: btnSearch
و حالا کدهای زیر رو در روال های مشخص شده فرم و دکمه قرار دهید:
Private Sub Form_Load()
GetDrives
End Sub
Private Sub btnSearch_Click()
Dim txtDrive As String
txtDrive = Me.CombDrives & ":\"
Call Shell("explorer.exe " & Chr(34) & "search-ms:query=" & txtSearch & "&crumb=location:" & txtDrive, vbNormalFocus)
End Sub
Sub GetDrives()
Dim fs, dr, x As Variant
CombDrives.RowSourceType = "Value List"
Set fs = CreateObject("Scripting.FileSystemobject")
Set dr = fs.Drives
For Each x In dr
CombDrives.AddItem x.DriveLetter
Next
CombDrives.Value = CombDrives.ItemData(0)
End Sub
در این تکنیک استفاده از Open File Dialog و انتخاب فایل و همچنین روش اجرای برنامه های اجرائی از داخل کدهای VBA Access نمایش داده می شود.
برای این منظور ابتدا یک فرم همانند فرم زیر ساخته و کنترل های زیر را در آن قرار دهید:
form1:
button: btnChooseFile
button: btnGo
textbox: txtApplicationName
حالا کدهای زیر را در روال های فرم وارد نمائید:
Private Sub btnChooseFile_Click()
Dim ofd As Object
Dim varfile As Variant
Me.txtApplicationName = ""
Set ofd = Application.FileDialog(3)
ofd.AllowMultiSelect = False
ofd.Title = "Please select one application (.exe)"
ofd.Filters.Clear
ofd.Filters.Add "Application (*.exe)", "*.exe"
ofd.InitialFileName = "C:\Program Files\Internet Explorer\iexplore"
If ofd.Show = True Then
For Each varfile In ofd.selecteditems
Me.txtApplicationName = varfile
Next varfile
End If
End Sub
Private Sub btnGo_Click()
Call Shell(Me.txtApplicationName, vbNormalFocus)
End Sub
در این برنامه ابتدا با زدن دکمه انتخاب فایل، Application.FileDialog اجرا شده و چون فیلتر این Dialog در کدها پسوندهای .exe معرفی شده، لذا فقط می توان فایل های exe یا همان Application ها را انتخاب نمود.
با InitialFileName می توان برای Dialog تعریف نمود که در ابتدا در چه مسیری باز شود.
مرحله بعد selecteditems می باشد که با آن نام فایل انتخاب شده استخراج و در Textbox قرار می گیرد. با فرمان .Show = True در صورتی که فایلی انتخاب نشود خطائی نیز رخ نخواهد داد و در آن صورت مسیر فایل درون Textbox قرار می گیرد.
با زدن دکمه Go، فرمان Call Shell اجرا شده و فایل اجرائی مورد نظر را فراخوانی می کند.
از این تکنیک در قسمتهای مختلفی در برنامه های Access می توان استفاده نمود و ضمنأ با توجه به مورد می توان بدلخواه شرایط Dialog را نیز تغییر داد.
درباره این سایت