Я написал функцию, которая запрашивает базу данных для определенных записей, и что мне нужно сделать, это отфильтровать результаты. Я решил, что самым простым способом было бы использовать метод .Find в диапазоне и установить стиль ячеек, а затем фильтровать на основе стиля. Проблема, которую я испытываю, заключается в том, что я не могу применить какое-либо преобразование в ячейки по какой-то причине. Однако я могу прочитать значение результата .Find. Как изменить стиль?(VBA Excel) Настройка стиля для результата .Find() не работает
Public Function WoRecR(workOrders As Range)
Dim cell As Range
Dim cn As Object
Dim command As Object
Dim results As Object
Dim searchResult As Range
Dim field As Object
Dim criteria As String
Set cn = New ADODB.Connection
Set command = New ADODB.command
Set results = New ADODB.Recordset
criteria = ""
For Each cell In workOrders
If (Not IsEmpty(cell.Value)) Then
criteria = "DOCINDEX1='" & cell.Value & "' OR " & criteria
End If
Next cell
criteria = "(" & Left(criteria, Len(criteria) - 4) & ") "
With cn
.ConnectionString = "Provider=SQLOLEDB.1;" & _
"Persist Security Info=True;" & _
"Data Source=*********;" & _
"DATABASE=******;" & _
"UID=******;" & _
"PWD=******;"
.Open
End With
On Error GoTo CloseCon
command.ActiveConnection = cn
command.CommandText = "SELECT DOCINDEX1 FROM PVDM_DOCS_1_4 WHERE " & criteria & " AND DOCINDEX9!='Phone' " & _
"AND DATEDIFF(YEAR, GETDATE(), DOCINDEX10) > -2;"
command.CommandType = adCmdText
command.Execute
results.ActiveConnection = cn
results.Open command
While Not results.EOF
Set searchResult = workOrders.Find(What:=results.Fields(0).Value)
Debug.Print searchResult.Value
searchResult.Style = "Good"
results.MoveNext
Wend
cn.Close
CloseCon:
If Err.Number Then Debug.Print Err.Description
End Function
Точная часть кода, что я имею в виду это:
While Not results.EOF
Set searchResult = workOrders.Find(What:=results.Fields(0).Value)
Debug.Print searchResult.Value
searchResult.Style = "Good"
results.MoveNext
Wend
Абсолютно положительный. Странно то, что я могу установить стиль в обычный Subs, но кажется, что он не работает в пользовательских функциях. Я попытался ввести Range («B2: B10»). Найти (361656) .Style = «Хорошо» в моей функции и в новом макросе. Он работал только в новом макросе. Похоже, что Range заблокирован для редактирования. – haosmark
Вы говорите, что если вы объявите 'Public Sub WoRecR (workOrders As Range)', он будет работать, но если вы объявите 'Public Function WoRecR (workOrders As Range)' это не так? В таком случае я бы изменил его на 'Sub', так как вы ничего не возвращаете из своей функции. Кроме того, я считаю, что существует какое-то ограничение на то, что можно изменить в 'Function' vs' Sub'. – FreeMan
Я хочу, чтобы иметь возможность вызвать это как функцию электронной таблицы, поэтому она настроена таким образом. У вас есть ссылка на эти ограничения? Или есть работа вокруг? – haosmark