Modules & VBA :: Collections Class On Continuous Forms
Jul 31, 2013
Any way to make objects to support adjusting continuous form controls making them unique in a sense to be able to change info like captions or whatever.
I've been working with collections for a while now tapping into event handlers such as the mouse inputs and or sizing of objects real time using collections but I can't seem to nail down any un-documented way to serialize controls on a continuos form.
I have tried when the new user creates the record adding another control to the collections class tying it to the id of the record but still this does not seem to be enough.
I do not know if there is a paint method or something of the sort I can override to get the desired results and most people without even trying will tell you this can't be done but how many have said that you can't move and resize objects in access but we are doing that now...
I try to use collection of a ADODB.recordset eg rsTarget,Essentially I want to assign the fields (columns) in this rsTarget with respective data. I tried to use of
two sets. (fld as adodb.field) Set fld = rsTarget.Fields.Item(count) Set fld = rsTarget.Fields.Item(Column(count))
Then I try to use following to assign RsTarget!fld.name = Data1
It failed stating that there is no fld.name. Using column set, it state that there is no column function. How to do it right?
I get the message "The expression On Click you entered as the event property setting produced the following error: Class does not support Automation or does not support expected interface"
I receive the message on a PC running Windows 7 Professional using the Access 2013 Runtime. This pc does not have Access 2013 installed.On my pc, I do not get the error. I have Access 2013 installed and run Windows 7 Professional SP1. The "code" which gives the error is as follows and is invoked by clicking a button on a form
Code: MsgBox "1" Dim rst As ADODB.Recordset MsgBox "2" Set rst = New ADODB.Recordset MsgBox "3"
[code]....
The error takes place after Msgbox "2" and before Msgbox "3".The strange thing is that I can run without a problem a sophisticated software package on the pc which gives the error, using Access 2013 Runtime. This package I converted from Access 2003.
I have this below which some people cant run and some people can. All are using 2010 runtime version. Apart from the one guy who can run the macro who has full 2010 version. I have 2010 runtime installed and i can also run the macro fine.
Private Sub Option12_Click() On Error GoTo Option12_Click_err Dim CntlPay As String Dim Lable As String CntlPay = "D"
I have wrote a database in access 2010 and the database works fine for me (I am the db admin with full control).I gave the database to a group in which most of them also have no issue with the file. They are able to use the database with no issues..One of those members gets an error message when completing the initial step in the database: (select a drop down item from a combo box)
Code: The expression After Update you entered as the event propoerty setting produced the following error: Object or class does not support the set of events
Something I cant seem to understand is why is this happoening on 5 machines but not on the 6th, they all have the same PC set up so there should be no error on one particular machine.
I have two class variables (both arrays) among about 10 other class variables, that are not returning any values but "" for the string or #12:00:00AM" for a date. Here are my class variables:
Code: 'UPSData Class Module Private p_LetterArray() As String Private p_date() As Date Private p_LetterArraySize As Integer
My Properties
Code: 'Properties Public Property Get LetterArray(index As Integer) As String LetterArray(index) = p_LetterArray(index) End Property Public Property Let LetterArray(index As Integer, NewValue As String)
[Code] ....
As I said, tLet and tDate result in "" and #12:00:00AM# respectively. When I step through the code, the values for tmp.LetterArray(0) is assigned "src" and tmp.UPSDate(0) stores "12/25/2013" correctly.
When I assign tLet and TDate, the same thing happens when stepping through the code. I'll use the LetterArray property to describe what happens:
Get LetterArray is called. p_LetterArray(0) does equal "src" Let LetterArray is called. NewValue is "src" and p_LetterArray is "src" when End Property is highlighted in the debugger Scope returns to Get LetterArray with End Property highlighted. In checking the values, LetterArray(0) = ""
Same steps happen with the same results ("12:00:00AM" vice "")
I'm using Access 2003. In "References" (Tools > References > Browse...), I've added in "Microsoft Windows Common Controls 6.0 (SP6)" (c:windowssystem32mscomctl.ocx).
I've then created/inserted an instance of the control "Microsoft ListView Control 6.0 (SP6)" on a Form ("MyForm") and given the listvew control the Name "MyListView".I wanted to decorate MyListView with some custom methods so I've created a new class module ("DecoratedListView") which contains a member field called "lvw".
I want 'lvw' to point/reference to MyListView, but I don't know what reference type to use in its declaration. Importantly, I also want to capture lvw's ColumnClick event.
I've tried:
Code: Public WithEvents lvw As Object Public WithEvents lvw As Control Public WithEvents lvw As MSComctlLib.ListView.2 Public WithEvents lvw As MSComctlLib.ListView Public WithEvents lvw As CustomControl
and none works when I
Code: set lvw = Forms!MyForm.MyListView
The first try (Object) doesn't even compile. I get the exception "Expected: identifier" The second try (Control) doesn't compile either. I get the exception "Object does not source automation events" The third try (MSComctlLib.ListView.2) doesn't compile and throws the exception "Expected: end of statement" The fourth try (MSComctlLib.ListView) compiles but fails at runtime with the exception "Type mismatch". Using TYPENAME() on the control returns "CustomControl". The fifth try (CustomControl) compiles but fails at runtime with the exception "Object or class does not support the set of events".
I can't believe I'm the first person to have tried to capture an ActiveX Control's events in a separate class.
Basically I have a class event that works for all controls on any userform.
Its all working fine but I can't add an event to trap the click or mouse move of the userform itself.
Basically so when the cursor moves away from a control the label clears.
User Form Code
Code: Option Compare Database Option Explicit 'Define a collection and initialise the commandbutton event class Private col As New Collection Private newCmd As New clsEvents
[Code] .....
And here is the class Module
Code: Option Compare Database Option Explicit 'catch the event of Commandbuttons Private WithEvents C0 As SubForm 'Private WithEvents C1 As CheckBox
I've been playing around with creating my own class in VBA but I'm having problems calling its methods. My class is pretty basic, its called cDentist and the properties are just Name, Address, DOB etc and one method AddDentist. AddDentist will add the details to a sql server table.
So I create an instance of the class in a module called Dentist. At the very top of the code i put..
Code: Option Compare Database Global Dentist As cDentist
I have a method then in module Dentist, where I initialise the instance of class cDentist and i populate it's properities...
Code: Sub RecordDentistDetails() Set Dentist = New cDentist Dentist.Name = Forms!frm_enterdetails!txtName
[Code].....
When I click 'Save' I get error, Method or data member not found. And '.AddDentist' is highlighted. I'm a little confused why it's not seeing AddDentist as a method of class cDentist.
I am trying to pass a boolean variable to a class module
Code: Set rps.ViewS = View
the code in the module that this in theory is calling reads as
Code:
Private ViewC As Boolean
Public Property Set ViewS(ByRef ViewA As Boolean) Set ViewC = ViewA End Property Public Property Get ViewS() As Boolean Set ViewS = ViewC End Property
However I am getting the error message
Quote:Definitions of property procedures for the same property are inconsistent, or property procedure has an optional parameter, a ParamArray, or an invalid Set final parameter.
I haven't created classes in a while, and I don't see what is the problem
I'm modifying a function to get fractions from double. It worked well, but it returned a string.
I need it to be in parts, so I created this class
Code: Option Compare Database Public Entier As Integer Public nominateur As Integer Public denominateur As Integer Public Function getText() getText = Entier & " " & nominateur & "/" & denominateur End Function
I changed the function type and the assignation:
Code: Function GetFraction(ByVal Num As Double) As nombreEnFraction Set GetFraction = New nombreEnFraction If Num = 0# Then GetFraction = "None" Else Dim WholeNumber As Integer Dim DecimalNumber As Double
[Code] ....
For some reasons, when I get to the end of the function, I get a 91 error, like if it was nothing
But when I use a spy, I see values in the object until the end.
I have a parent form which has a class variable (class module instance) to store the form' status and more.... and when i add a new record to the subform it resets the class variable field' data. but this only happens on first transaction, but if i re-run the steps (re-set the variable field value) it's not happening again.
I'm trying to subtotal data in an excel file but I am getting a subtotal method of Range class failed in the red text below. I have been trying to get this to work with no success.
Code:
Public Function SUMMARY() Dim xlApp As Object Set xlApp = CreateObject("Excel.Application") With xlApp Dim wb As Object
Okay, I'm sick of designing forms whereby I have to go through their individual settings and set things like PopUp to True or RecordSelectors to False. Therefore I want to create a form class that, in the Form_Open event will do all that form me for every form.So, I've got a class called AppForm.
Code: Option Compare Database Option Explicit Private Const cstrEventProc As String = "[Event Procedure]" Private WithEvents frm As Access.Form
[code]...
ThisApp is just another class, dealing with database application stuff, like Name, version, etc. Now, how do we go about assigning the form to the class as the first event triggered for a form is OnOpen, which is what I want to replace with the OnOpen in the AppForm class? I guess there must be a way by adding all the database's form collection to a collection object at start-up so that the class will work.
I have a form that the Training Admin will use to select students to a new class.they select the Class Name from a ComboBox tied to TblClass.they select an Instructor from a ComboBox tied to TblInstructor and then, I am trying to to use some method to select students by identifying information (EmplID, LName, FNAme, MName, EMP# from TblEmployee) one at a time (from a combo box, or some other easy select method) that will pass the students information to a list, viewable and editable (remove a name) before it is committed to a TblCompletedTraining
I looked at a cascading combo-boxes, and that looks like a good method to selecting from the large number of employees in TblEmployee, but I am unsure how to store each selection on the form, and then allow the Training Admin the ability to delete members from the pool prior to committing. I am reluctant to use the multivalue field as a solution for a couple of reasons;
- It explicitly states to be used for relatively short lists only (no value limit given; so I assume 100 or less items) - will probably need to convert this database sometime in the future.
I thought I had figured this out, by using a combo-box selection to generate a filter, but it leaves me with only one selection in the end..
Is there a 'catch all' way to select only the controls found within a specific section of the form... say I wanted to perform an operation on all the controls in the detail section of the form but not those found in the header or footer?
well...mr. client man has decided that upon a click of a button, a job needs to be rendered "read-only". obviously, in order to acheive this illusion, i need to simply either lock or disable all controls on the form when that record shows up (when jobclosed = true or job cancelled = true). the problem is that there are around 500 controls. i know that there's some way to access the controls collection (Me.Controls(0), etc.) using the for each...next, but i've tried it and haven't been successful probably because i can't figure out the right way to do it. all i want to do is render each control as disabled (except for my subforms, i just want to lock them) when a button is clicked. does anyone know how to do this?
I am building a database for employee training. In the FrmNewTrainingGroup I am trying to create a form that will allow selection of a single class, a completion date, one or more instructors (or none at all) and a list of students by LName, FName, MI, EMP#. in my latest attempt, I have tried using a query of the TblEmployee to act as a go between, and dropped a subform into the FrmNewTrainingGroup, and that is not working.
Trying to get the student roster to work has been frustrating. I have been attempting to make it a check box select list that is also searchable by LName and FName [which would perhaps display a reduced list of names, as the name was typed?. This list would update a class roster text box to reflect all the selected employees for training so far, prior to the class being committed (I am planning on a button on the form).
Dim FrmGraphObj As Object Set FrmGraphObj = Forms![frmE Weekly Efficiency]![gph_WeeklyEfficiency].Object.Application.Chart FrmGraphObj.Axes(xlValue).TickLabels.NumberFormat = "0%"
I continually receive a runtime error 1004 " unable to get tick labels property of the axis class"
if I remove this code, then I error on the following code:
Dim FrmGraphObj As Object Set FrmGraphObj = Forms![frmE Weekly Efficiency]![gph_WeeklyEfficiency].Object.Application.Chart If FrmGraphObj.SeriesCollection(2).HasDataLabels Then
also a runtime 1004: "unable to get the seriescollection property of the chart class" on the last line above
searched this forum and found:
If your chart is in a form (or report), you have to:
1) refer to the form (or report) name (Form_Charts)
2) refer to the name of the object frame holding your chart (.Graph1)
3) refer to the object within the frame (.Object)
4) refer to the application that created the object (.Application)
5) refer to the actual chart itself (.Chart)
6) refer to the axes collection and select the axis you want to reference - in this case the category, or X-axis (.Axes(xlCategory))
I made the assumption, that I would just replace xlCategory with xlValue for the Y-axis. So I'm back to:
Set FrmGraphObj = Forms![frmE Weekly Efficiency]![gph_WeeklyEfficiency].Object.Application.Graph With FrmGraphObj.Axes(xlValue) .TickLabels.NumberFormat = "0%" End With
Same error....
Looked in the Microsoft Graph Visual Basic Reference and it indicated:
"Tick-mark label text for the value axis is calculated based on the MajorUnit, MinimumScale, and MaximumScale properties of the value axis. To change the tick-mark label text for the value axis, you must change the values of these properties."
I reset my code to call these 2 functions prior to changing the number format.....
Public Sub txtMaxPercent_AfterUpdate() Dim FrmGraphObj As Object Set FrmGraphObj = Forms![frmE Weekly Efficiency]![gph_WeeklyEfficiency].Object.Application.Chart FrmGraphObj.Axes(xlValue).MaximumScale = txtMaxPercent End Sub Public Sub txtMinPercent_AfterUpdate() Dim FrmGraphObj As Object Set FrmGraphObj = Forms![frmE Weekly Efficiency]![gph_WeeklyEfficiency].Object.Application.Chart FrmGraphObj.Axes(xlValue).MinimumScale = txtMinPercent End Sub
now I am receiving error 1004 again, this time it states "Unable to set the minimumscale property of the axis class" erroring on this line....
I'm running a query that has a field where I need two criteria show up (regular collections and special collections). Another field I have selects for the date (10/1/2014). The last field is the sum of collections. My problem is that the query is generating regular collections and special collections with each date and a sum of collections. I need the total sum of both collections for the date which would be 4.
I have a bound continuous tabular form,However, based on data content in one field of a record, I want a checkbox in the same record enabled, so the user can check it if necessary. I have created a record set using the form as shown below, and I am looping through each record. To show that my code is referring to the field with required data content, I display it as a message box and it works, yet my checkbox does not enable.
I have the code in the form_load event, however, for testing purposes I have it behind a button.If I am seeing this properly, the code behind the button enables the checkbox for ALL records once the criteria in the required field is true, and based on the last record, which has no data content, it disables the checkbox in ALL records. I also have the PK ID for each record hidden in the form. Can I utilize that to target the checkbox of each individual record??
Form Detail -Form does not allow additions or deletions. Edits allowed -All fields are disabled and locked -I only want the check box to unlock if data is found in the "RequiredField" as referred to below. I have also tried if not isNull(requiredfield.value) then -enable checkbox, which yields the same results
Here is my code
Code:
Dim rstMyForm As DAO.Recordset Set rstMyForm = Forms!MyForm.Form.Recordset rstMyForm.MoveFirst Do While Not rstMyForm.EOF If Not RequiredField.Value = "" Then
I am trying to use this code to filter a continuous subform based on two criteria but getting a data type mismatch error.
It works fine if I filter by just one or another. Perhaps it is not possible
Code: Dim intSpouseEntityID As Integer intSpouseEntityID = Nz(DLookup("[EntityID]", "qryEntitiesLocations", "[ContactIDNumber] =" & Me.Spouse), 0) If intSpouseEntityID > 0 And Not IsNull(Me.subformContactsHomeAddress.Form.EntityID) Then MsgBox ("There are two spouse addresses please delete one and try again") DoCmd.Save DoCmd.OpenForm "frmContactAddresses", , , "EntityID=" & Me.txtEntityID Or "EntityID =" & intSpouseEntityID End If
I have a log of items I currently inventory. When you click on an item, it opens another form with a sub-form that lists the history of changes for said item in a continuous form display.
What I want to be able to do is when that form is opened, the sub-form will highlight the last entry (either bold it, or change the background).
Many Regions, Many Towers, Many Countries and all..
Has to create a worksheet for Each Region-Tower and Paste the countries' records.
Private Sub Input_Click() Dim Mainrset As Recordset Dim Temp As Variant Set Mainrset = CurrentDb.OpenRecordset("Query_Form") Mainrset.MoveLast Mainrset.MoveFirst
[Code] .....
The above code is not correct as some Tower/Process are not associated with some countries. Usually What I do is to loop through all the records and look for the changes in the field. Is that the only way?