word macro join text fields - vba

I have a word document macro enabled, I have a drop down button within the document which takes information from one form field and places it into another form field.
Select Case ActiveDocument.FormFields("Dropdown1").Result
Case "Order"
ActiveDocument.FormFields("ord1").Result ActiveDocument.FormFields("p1").Result
End Select
How can I adjust the code so that, instead of replacing everything in field "ord1" it would join the existing text within the field?

Try something simple like this:
ActiveDocument.FormFields("ord1").Result = _
ActiveDocument.FormFields("ord1").Result & " " & _
ActiveDocument.FormFields("p1").Result

Related

Access asks for entering a value

I have created a form to search in person table.
But when I input text for searching and click to the 'Search' Button, it says Enter Parameter Value and so I input my text again and click OK, then it will work.
Here is the code that makes this problem(another_table created from lookup):
Task = "SELECT * FROM person WHERE (item1=(SELECT code_item2 FROM
another_table WHERE name_item2=" & Me.txtSearch.Value & "))"
Me.RecordSource = Task
If Me.txtSearch.Value is numeric
SELECT * FROM person WHERE item1 ΙΝ (SELECT code_item2 FROM
another_table WHERE name_item2=" & Me.txtSearch.Value & ")"
if is alphanumeric then
SELECT * FROM person WHERE item1 ΙΝ (SELECT code_item2 FROM
another_table WHERE name_item2='" & Me.txtSearch.Value & "')"
Consider saving a permanent SQL in form's recordsource, then simply call .Requery with search parameter change. Doing so, you reference search text with absolute Forms reference and with NZ, you can set up a default value if search is empty like on form open. No concatenation or quote punctuation needed.
SQL (save as stored query to be used in form recordsource)
SELECT * FROM person
WHERE item1 IN
(SELECT code_item2 FROM another_table
WHERE name_item2 = NZ(Form!myFormName!txtSearch, 'Default Value'))
VBA
Me.Form.Requery

Syntax issue when updating records with info from combo box

Essentially I would like to update a subforms column values with a name found in a combo box.
A table called "tbl_jobs" is the source behind the subform, the column I am trying to update is called "Person_Name".
The combo box is called "PersonCombo" .
I am working on creating a query called "updateRecord" using the Access query designer that is executed by the button "updateButton"
The following is how the query will be executed:
DoCmd.OpenQuery "updateRecord"
The content of the query is what I am having trouble with:
UPDATE tbl_jobs SET Person_Name = '" & PersonCombo & "' WHERE [Select] = True
Instead of filling the column data with the values from the chosen name in "PersonCombo" like Jamie, Mickey, Haley, etc. (values from PersonCombo) it just says " & PersonCombo & "
What is wrong with my syntax?
If this is a saved query, it doesn't know about the current form.
You need to use the full path to the control, but no concatenation, e.g.
UPDATE tbl_jobs SET Person_Name = Forms!myForm!PersonCombo WHERE [Select] = True
If the combo box is on a subform, refer to:
Forms: Refer to Form and Subform properties and controls
e.g. Forms!Mainform!Subform1.Form!ControlName
I do not believe you can pass a variable to a saved query. Instead build the query in code and run it:
dim SQL as string
PersonCombo = "thePerson"
SQL = "UPDATE tbl_jobs SET Person_Name = '" & PersonCombo & "' WHERE [Select] = True"
DoCmd.RunSQL SQL

ComboBox max records reached

I have a table in MySQL accessed through a linked table (via ODBC) in Microsoft Access 2013.
This table contains over 124,000 records and I need a ComboBox in a form to be able to search through the UPC column.
This is the query that is the current datasource for the ComboBox:
SELECT [ID], [UPC_Case], [Description] FROM itemlist ORDER BY [UPC_Case];
This works perfectly except that the table view under the ComboBox won't go past record number 62287 (however the auto-fill still works for records that the table can't see), is there a way to make it able to view all the records?
Access ComboBoxes have a maximum record count of 65535.
To circumvent this, I found an article that gave me the groundwork required to write a function that sets the rowSource dynamically once a certain number of characters have been typed.
This is the function that sets the rowSource. I refactored the code so that it can be used on any comboBox in any Form with any Query.
Dim inputStub As String
Function ComboLimiter(targetCombo As ComboBox, minChars As Integer, Query As String, searchField As String)
Dim inputStr As String: inputStr = targetCombo.Text 'Set input string
Dim newStub As String: newStub = Nz(Left(inputStr, minChars), "") 'Set first n characters of targetCombo.Text
If newStub <> inputStub Then 'If first n chars are the same as previously, do nothing.
If Len(newStub) < minChars Then
'Remove the RowSource
targetCombo.RowSource = Query & " WHERE (False);"
inputStub = ""
Else
'New RowSource
targetCombo.RowSource = Query & " WHERE (" & searchField & " Like """ & newStub & "*"") ORDER BY " & searchField & ";"
inputStub = newStub
End If
End If
End Function
And the function can be bound to the ComboBox change event like this:
Private Sub UPCCombo_Change()
Call ComboLimiter(Me.UPCCombo, 1, _
"SELECT ID, UPC_Case, Description FROM itemlist", "UPC_Case")
End Sub
There's a known bug where there are sometimes issues with large recordsets like this. Are you sorting on a text based field? Try removing the sort if so and seeing if it fixes the issue.

Sorting Data on Form in Access 2010 by VBA

I have the following setup:
Table "Mitarbeiter" (Users) with fields: "UNummer" / "Sortierung" /....
Table "Mo01" (a sheet for every month) with fields: "UNummer" / "01" / "02" / ....
The Field UNummer in Table Mo01 is a combination field that gets Mitarbeiter.UNummer and saves it as text
I call a Form "Monatsblatt" that is based on the table Mo01.
In that Form I have a Field "fldSort" that is calling "Sortierung" from table "Mitarbeiter". The Data in that field is based on "=DomWert("Sortierung";"Mitarbeiter";"UNummer = '" & [ID] & "'")"
This works and looks like this:
I am trying to sort the form by that "fldSort" in Form "Monatsblatt" by using this code:
Form_Monatsblatt.OrderBy = "fldSort"
Form_Monatsblatt.OrderByOn = True
When I start the form with that code running, Access asks for parameters:
I tried a lot of different ways of writing the code, referencing to the field in different ways. I do NOT want to base the form on anything other then the table.
Why not ask the wide world watch "Why Access asking me for Parameter"? That would have brought you to the clue I think. Debug.Print or MsgBox your .OrderBy and you see it's "fldSort", not a valid sort. Access is assuming you want to use a parameter called fldSort, but you want the string in the variable fldSort, but it's not recognized, because of the double quotes surrounding it. Everything between 2 double quotes is interpreted as a string, even it's a var name.
Delete the quotes and everything will work fine (if your sort string is sufficent)!
Form_Monatsblatt.OrderBy = fldSort
[Update]
Late, but now I see the clue. You added a calculated field to the form, but you can't sort or filter them.
Instead of appending this field to the table, create a query and add it there, then you bind the form to the query and add the field to the form. Now you can filter and sort as you like!
The query looks like this:
SELECT *,
Dlookup("Sortierung","Mitarbeiter","UNummer = '" & [ID] & "'") AS ldSort
FROM Mo01;
Or with a join:
SELECT
Mo01.*,
Mitarbeiter.Sortierung AS fldSort
FROM
Mo01
LEFT JOIN
Mitarbeiter
ON
Mo01.ID = Mitarbeiter.UNummer;
Now you can use
Form_Monatsblatt.OrderBy = "fldSort"
Form_Monatsblatt.OrderByOn = True
because you have a bound control called fldSort.
[/Update]

MS Access multi field search with empty fields

I have a problem very similar to this one, but I just can't seem to solve it!
In MS Access (2003), I want to search a table based on entries in a number of fields, some of which may be empty.
I have:
text fields
date fields
integer fields, and
a memo field (but we can probably not bother searching this one if it is difficult).
They map onto a table exactly.
I am trying to create a query that will return matching rows when data is entered into one or more of these fields, but some fields can be left blank. How the heck do I do this?
A query like the one on the linked question works for text fields, but what do I do about the number fields, date fields (and possibly even the memo field)?
To give a clear example, the following code block works for TextField1, but not NumberField1:
PARAMETERS [Forms]![SearchForm]![FilterTextField1] Text ( 255 ), [Forms]![SearchForm]![FilterNumberField1] Text ( 255 );
SELECT Table1.[TextField1], Table1.[NumberField1], Table1.[TextField2], Table1.[TextField3], Table1.[DateField1], Table1.[DateField2], Table1.[DateField3]
FROM Table1
WHERE (Len([Forms]![SearchForm]![FilterTextField1] & '')=0 OR Table1.[TextField1] Like '*' & [Forms]![SearchForm]![FilterTextField1] & '*') AND (Len([Forms]![SearchForm]![FilterNumberField1] & '')=0 OR Table1.[NumberField1] Like '*' & [Forms]![SearchForm]![FilterNumberField1] & '*');
I do hope you can help. I'm sure I'm missing something really obvious, but for some reason my brain feels like it is leaking out of my ears at the moment.
Thank you!
If you need it, this is the basic design of the relevant entities:
Table1
SomePrimaryKeyWeDontCareAboutRightNow
TextField1
TextField2
TextField3
NumberField1
DateField1
DateField2
DateField3
MemoField1
SearchForm
FilterTextField1
FilterTextField2
FilterTextField3
FilterNumberField1
FilterDateField1
FilterDateField2
FilterDateField3
FilterMemoField1
You can check fo null values or cast to string
You could certainly spend a great deal of time crafting a huge and very hard to debug SQL query for this, or just jump into VBA and write some code to construct just the SQL you need.
VBA is there just for these kinds of scenario, where something is either impossible or becoming too complex to do otherwise.
With VBA, you can use an initial SELECT query that collect all the data, and then construct a WHERE clause based on the content of your search form to filter it.
For instance, I have a form like this, that allows the user to enter any criteria to filter a list of prices:
Some code to implement this could look like:
' Call this whenever the use click the Apply button '
Private Sub btApply_Click()
' Construct the filter '
Dim filter As String
If Not IsBlank(cbSupplierID) Then
If Not IsBlank(filter) Then filter = filter & " AND "
filter = filter & "(SupplierID=" & cbSupplierID & ")"
End If
If Not IsBlank(txtPartNumber) Then
If Not IsBlank(filter) Then filter = filter & " AND "
filter = filter & "(PartNumber LIKE '*" & txtPartNumber & "*')"
End If
If Not ckShowLocked Then
If Not IsBlank(filter) Then filter = filter & " AND "
filter = filter & "(NOT PriceLocked)"
End If
' ... code snipped, you get the jest ... '
' Now re-construct the SQL query '
Dim sql As String
sql = "SELECT * FROM Price"
If Not IsBlank(filter) Then
sql = sql & " WHERE " & filter
End If
SubForm.Form.RecordSource = sql
End Sub
It may seem like a lot of code, but each block only does one thing, and it's a lot easier to debug and maintain than cramming everything into a query.