jackwalsh
asked on
Text from Word to Access
I have a Word document that is a list of contracts; each starts with the same string, so the beginning of each is identifiable. I want to select the text following this string, copy it to a new record in an access table, then move to the next item, copy it, and so on. The question is how to select the text; the VBA documentation is confusing. Do I bookmark the occurrences of the string, then somehow select between bookmarks? I dont know how to think about this, really.
Is this a one-time thing (populate Access) or something you want to do on an ongoing basis?
ASKER
I want to do this on an ongoing basis--that is, I want to have a form in access with a command button that is pushed, opens Word, opens the file (which I receive daily), selects the correct sections of the text, copies each one to a new record in an access table, closes Word, and then distributes the text to selected email addresses. I've got it all working except the ability to select the text, copy it, then select the next chunk.
So close!
The problem is that I don't understand how to make a range from the current cursor position to the next occurrence of a string; once I get that, I'm ok. The examples all show extending a range by a paragraph, or a sentence, or a word, or some object, rather than to a particular bit of text. Somehow it appears that bookmarks can be used, but the documentation of bookmarks is confusing--they are both objects and properties, I think, but I don't really understand. Thanks for your help
Jack Walsh
So close!
The problem is that I don't understand how to make a range from the current cursor position to the next occurrence of a string; once I get that, I'm ok. The examples all show extending a range by a paragraph, or a sentence, or a word, or some object, rather than to a particular bit of text. Somehow it appears that bookmarks can be used, but the documentation of bookmarks is confusing--they are both objects and properties, I think, but I don't really understand. Thanks for your help
Jack Walsh
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Hi,
Sorry I didn't read your question properly, try this code it should do more what you want
Sub WordSelecting()
Dim temp As Range
Selection.Find.ClearFormat ting
With Selection.Find
.Text = "REM"
.Forward = True
.MatchCase = True
.MatchWholeWord = True
End With
Selection.Find.Execute
Set temp = ActiveDocument.Range(Start :=Selectio n.Range.St art + Len(Selection.Find.Text), _
End:=Selection.Range.Start + 16)
Debug.Print Trim(temp.Text)
End Sub
hope this helps
Frazer
Sorry I didn't read your question properly, try this code it should do more what you want
Sub WordSelecting()
Dim temp As Range
Selection.Find.ClearFormat
With Selection.Find
.Text = "REM"
.Forward = True
.MatchCase = True
.MatchWholeWord = True
End With
Selection.Find.Execute
Set temp = ActiveDocument.Range(Start
End:=Selection.Range.Start
Debug.Print Trim(temp.Text)
End Sub
hope this helps
Frazer
ASKER
Almost, not quite. What I have is a standard heading for each sections of text---call it XXXXX. What I want to do is select the text between the first occurrence of XXXXX and the second occurrence of XXXXX, copy it to an access record, then select the text between the second occurrence of XXXXX and the third, copy it, then between the third and fourth, and so on. The problem is that the text is of variable lengths; I can't just find XXXXX and go six paragraphs, or something like that. It has to go from one occurrence to the next. The problems is in finding the end of the selection. Does this need bookmarks at each occurrence, then select from bookmark to bookmark?
Hi,
Now I understand, this should work ok now....
Sub WordSelecting()
Dim temp As Range
Dim wdStart As Long
Dim wdEnd As Long
ActiveDocument.Range(1, 1).Select
Selection.Find.ClearFormat ting
With Selection.Find
.Text = "REM"
.Forward = True
.MatchCase = True
.MatchWholeWord = True
End With
Selection.Find.Execute
wdStart = Selection.Range.End
Do While Selection.Find.Execute = True
wdEnd = Selection.Range.Start
Set temp = ActiveDocument.Range(Start :=wdStart, End:=wdEnd)
Debug.Print Trim(temp.Text)
wdStart = Selection.Range.End
Loop
End Sub
Hope this helps
Frazer
Now I understand, this should work ok now....
Sub WordSelecting()
Dim temp As Range
Dim wdStart As Long
Dim wdEnd As Long
ActiveDocument.Range(1, 1).Select
Selection.Find.ClearFormat
With Selection.Find
.Text = "REM"
.Forward = True
.MatchCase = True
.MatchWholeWord = True
End With
Selection.Find.Execute
wdStart = Selection.Range.End
Do While Selection.Find.Execute = True
wdEnd = Selection.Range.Start
Set temp = ActiveDocument.Range(Start
Debug.Print Trim(temp.Text)
wdStart = Selection.Range.End
Loop
End Sub
Hope this helps
Frazer
ASKER
Wonderful! Frazer stuck with it until he made me state the problems in a way it could be understood. Many thanks!!