Jul 16 2021 01:46 AM
Jul 16 2021 01:46 AM
Hi nice people,
In my application I compute a variable called EntryDate (of data type date) from a form with DateSerial(txtYear,txtMonth,txtDay). This (using an example) produces 01/04/2021, which is correct. It is then asked to see if this date is present on another sheet, using:
Set MyEdit = .Find(EntryDate, , xlValues, xlWhole, xlByColumns, , True)
It does not find it. It should because this date is present, in the first column (it will always be the first column as this is the date column).
I have used little test things like computing EntryDate as above and asking if this is equal to cell A2 and the answer is yes, true. I can show EntryDate= 01/04/2021 and cell A2 = 01/04/2021 although actually cell A2 is formatted as 01-04-2021.
I feel my problem may be related to date formatting.
Clever people, I would so like to know why the computer knows that A2 contains EntryDate but will not "find" it for me!
This is part of code I am writing to avoid adding accidental duplicates.
Jul 16 2021 03:25 AMSolution
This is a known problem. Excel VBA is very finicky when it comes to finding a date in a range.
1) If the dates in WorkRange are constants, not the result of formulas, change xlValues to xlFormulas:
Set MyEdit = .Find(EntryDate, , xlFormulas, xlWhole, xlByColumns, , True)
- or -
2) Leave xlValues alone, and specify the first argument formatted exactly as on the worksheet:
Set MyEdit = .Find(Format(EntryDate, "dd-mm-yyyy"), , xlValues, xlWhole, xlByColumns, , True)
Set MyEdit = .Find(Format(EntryDate, "mm-dd-yyyy"), , xlValues, xlWhole, xlByColumns, , True)
depending on which format the cells use.
Jul 16 2021 03:42 AM
Here is an example with VBA.
Search simple and effective.
Example file and VBA code inserted.
'Insert into a module Option Explicit Sub Search() Dim booGefunden As Boolean Dim strEingabe As String Dim rngFeld As Range Dim wksSheet As Worksheet strEingabe = Application.InputBox("Please enter search term", "Search", "Search term") If strEingabe <> "" Then For Each wksSheet In ActiveWorkbook.Worksheets For Each rngFeld In wksSheet.UsedRange If InStr(UCase(CStr(rngFeld.Value)), UCase(strEingabe)) > 0 Then booGefunden = True wksSheet.Activate rngFeld.Select If MsgBox("Keep searching?", vbQuestion + vbYesNo) = vbNo Then Exit Sub End If Next rngFeld Next wksSheet If booGefunden = False Then MsgBox "'" & strEingabe & "' not found!", vbInformation End If End Sub
I would be happy to know if I could help.
I know I don't know anything (Socrates)
* Kindly Mark and Vote any reply if it helps please, as it will be beneficial to more Community members reading here.
Jul 16 2021 11:21 PM
Thank you very much. I have tried both your suggestions and both find the required date in the other sheet when it is present - so I will be able to proceed with the programming.
I have also learnt something new. From the vba help on ".Find" I had no idea that the "LookIn" field given as "The type of information" (which did not mean anything in particular to me) could include such terms as xlFormulas which could equate different date formats! Sometimes the standard help facility just isn't helpful, or helpful enough!
I congratulate you on how clear and concise your help was to my problem and also helpful in understanding issues with dates in general.