![]() |
#2
|
||||
|
||||
![]()
Frankly I wouldn't do it that way as it is slow and cumbersome. The following functions will read the named worksheet into an array then search the first column of the array for the input value (here "The value to find") and outputs the corresponding value from column 6 to the bookmark (here "bookmarkname"). If the value is not found the bookmark is cleared.
It is assumed that the named worksheet has at least six columns, that there is a header row on the first row and there are no empty columns. The sheet name is case sensitive. If you need to loop through several worksheets, then all the sheets searched must match the criteria above. The array function takes no prisoners. Macro1 simply shows how to call the functions. You can call the functions from your form using the appropriate values. Code:
Option Explicit Const strWorkbook As String = "U:\VBA Word Automation\Excel Test Sheet.xlsx" Const strSheet As String = "Sheet1" 'The name of the worksheet Sub Macro1() 'look for the value in the first column and return the value in the sixth column Dim strResult As String strResult = GetValue("The value to find", 6) FillBM "bookmarkname", strResult 'fill the named bookmark with the value lbl_Exit: Exit Sub End Sub Private Function GetValue(strKey As String, lngColumn As Long) As String 'Graham Mayor - http://www.gmayor.com - Last updated - 08 May 2017 Dim Arr() As Variant Dim iCols As Long Dim strValue As String Dim strID As String Arr = xlFillArray(strWorkbook, strSheet) For iCols = 0 To UBound(Arr, 2) strID = Arr(0, iCols) 'The first column strValue = Arr(lngColumn - 1, iCols) If strID = strKey Then GetValue = strValue Exit For End If Next iCols lbl_Exit: Exit Function End Function Private Function xlFillArray(strWorkbook As String, _ strRange As String) As Variant 'Graham Mayor - http://www.gmayor.com - Last updated - 08 May 2017 Dim RS As Object Dim CN As Object Dim iRows As Long strRange = strRange & "$]" Set CN = CreateObject("ADODB.Connection") CN.Open ConnectionString:="Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & strWorkbook & ";" & _ "Extended Properties=""Excel 12.0 Xml;HDR=YES"";" Set RS = CreateObject("ADODB.Recordset") RS.Open "SELECT * FROM [" & strRange, CN, 2, 1 With RS .MoveLast iRows = .RecordCount .MoveFirst End With xlFillArray = RS.GetRows(iRows) If RS.State = 1 Then RS.Close Set RS = Nothing If CN.State = 1 Then CN.Close Set CN = Nothing lbl_Exit: Exit Function End Function Private Sub FillBM(strBMName As String, strValue As String) 'Graham Mayor - http://www.gmayor.com Dim oRng As Range With ActiveDocument On Error GoTo lbl_Exit Set oRng = .Bookmarks(strBMName).Range oRng.Text = strValue oRng.Bookmarks.Add strBMName End With lbl_Exit: Set oRng = Nothing Exit Sub End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Data Import from multiple word files into an Excel tale | asmanokhchi | Word | 1 | 04-21-2015 06:24 AM |
need VBA to Transpose the Data from excel to word based on given criteria(status) | winmaxservices2 | Excel Programming | 1 | 12-19-2014 10:21 PM |
![]() |
sb003848 | Word | 1 | 11-04-2014 06:30 PM |
Import excel data in to SQL Server | DavidBrown | Excel | 0 | 08-08-2011 04:49 AM |
Import Pics and Excel Data into PP? | jawillyams | PowerPoint | 0 | 03-13-2011 01:03 PM |