@ Robert: Я пытался адаптировать ваш код с относительным путем и создал командный файл для запуска VBS.
VBS запускается и закрывается, но не запускает макрос ... Любая идея о том, где проблема может быть?
Option Explicit
On Error Resume Next
ExcelMacroExample
Sub ExcelMacroExample()
Dim xlApp
Dim xlBook
Set xlApp = CreateObject("Excel.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFilePath = objFSO.GetAbsolutePathName(".")
Set xlBook = xlApp.Workbooks.Open(strFilePath, "Excels\CLIENTES.xlsb") , 0, True)
xlApp.Run "open_form"
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
Я удалил «Application.Quit», потому что мой макрос вызывает пользовательскую форму, заботясь об этом.
Cheers
EDIT
Я действительно сработал, на случай, если кто-то захочет запустить пользовательскую форму «как таковое»:
Проблемы, с которыми я столкнулся:
1 - Я не хотел использовать событие Workbook_Open, поскольку excel заблокирован только для чтения. 2 - Командная команда ограничена тем фактом, что (насколько мне известно) она не может вызвать макрос.
Сначала я написал макрос для запуска моей пользовательской формы при скрытии приложения:
Sub open_form()
Application.Visible = False
frmAddClient.Show vbModeless
End Sub
Затем я создал vbs для запуска этого макроса (выполнение этого с относительным путем было сложным):
dim fso
dim curDir
dim WinScriptHost
set fso = CreateObject("Scripting.FileSystemObject")
curDir = fso.GetAbsolutePathName(".")
set fso = nothing
Set xlObj = CreateObject("Excel.application")
xlObj.Workbooks.Open curDir & "\Excels\CLIENTES.xlsb"
xlObj.Run "open_form"
И я, наконец, сделал пакетный файл для выполнения VBS ...
@echo off
pushd %~dp0
cscript Add_Client.vbs
Обратите внимание, что я также включил «Установить обратно в видимый» в мой Userform_QueryClose
:
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ThisWorkbook.Close SaveChanges:=True
Application.Visible = True
Application.Quit
End Sub
В любом случае, спасибо за вашу помощь, и я надеюсь, что это поможет если кому-то это нужно
Этот может придавать повышенную значимость желаемой головной части. Он не будет удваивать его, но он может быть достаточно хорошим для вас:
SELECT pages.*,
MATCH (head, body) AGAINST ('some words') AS relevance,
MATCH (head) AGAINST ('some words') AS title_relevance
FROM pages
WHERE MATCH (head, body) AGAINST ('some words')
ORDER BY title_relevance DESC, relevance DESC
-- alternatively:
ORDER BY title_relevance + relevance DESC
Альтернативой, которую вы также хотите исследовать, если у вас есть гибкость для переключения механизма БД, является Postgres . Это позволяет установить вес операторов и поиграть с ранжированием.
Я никогда не делал этого, но это похоже на
MATCH (head, head, body) AGAINST ('some words' IN BOOLEAN MODE)
Если дает двойной вес совпадениям, найденным в голове.
Просто прочитайте этот комментарий на странице docs , подумал, что он может быть полезен вам:
Отправлено Patrick O'Lone от 9 декабря 2002 6:51
В документации должно быть указано, что IN BOOLEAN MODE почти всегда возвращает значение 1.0. Чтобы получить значимость, которая имеет смысл, вам нужно:
blockquote>SELECT MATCH('Content') AGAINST ('keyword1 keyword2') as Relevance FROM table WHERE MATCH ('Content') AGAINST('+keyword1+keyword2' IN BOOLEAN MODE) HAVING Relevance > 0.2 ORDER BY Relevance DESC
Обратите внимание, что вы выполняете регулярный запрос релевантности для получения коэффициентов релевантности в сочетании с WHERE который использует BOOLEAN MODE. BOOLEAN MODE дает вам подмножество, которое удовлетворяет требованиям поиска BOOLEAN, запрос релевантности удовлетворяет коэффициенту релевантности, а предложение HAVING (в данном случае) гарантирует, что документ имеет отношение к поиску (то есть документы, набравшие менее 0,2 считаются неактуальными). Это также позволяет вам заказывать по релевантности. Это может быть или не быть ошибкой в том, как работает режим BOOLEAN MODE, хотя комментарии, которые я прочитал в списке рассылки, позволяют предположить, что рейтинг релевантности в BOOLEAN MODE не очень сложный, поэтому он плохо себя зарекомендовал для фактического предоставления соответствующих документов. BTW. Я не заметил потери производительности для этого, так как кажется, что MySQL выполняет только поиск FULLTEXT один раз, даже если два предложения MATCH отличаются. Используйте EXPLAIN, чтобы доказать это.
blockquote>Так что вам, возможно, не придется беспокоиться о вызове полнотекстового поиска дважды, хотя вы все равно должны «использовать EXPLAIN, чтобы доказать это»
Я тоже играл с этим. Один из способов добавить лишний вес - в область ORDER BY кода.
Например, если вы сопоставляли 3 разных столбца и хотели более тяжело нагружать определенные столбцы:
SELECT search.*,
MATCH (name) AGAINST ('black' IN BOOLEAN MODE) AS name_match,
MATCH (keywords) AGAINST ('black' IN BOOLEAN MODE) AS keyword_match,
MATCH (description) AGAINST ('black' IN BOOLEAN MODE) AS description_match
FROM search
WHERE MATCH (name, keywords, description) AGAINST ('black' IN BOOLEAN MODE)
ORDER BY (name_match * 3 + keyword_match * 2 + description_match) DESC LIMIT 0,100;
SELECT search.*, (MATCH (name) AGAINST ('black' IN BOOLEAN MODE) * 3) + (MATCH (keywords) AGAINST ('black' IN BOOLEAN MODE)*2 + MATCH (description) AGAINST ('black' IN BOOLEAN MODE)) AS totalScore , FROM search WHERE MATCH (name, keywords, description) AGAINST ('black' IN BOOLEAN MODE) ORDER BY totalScore DESC LIMIT 0,100;
– invertedSpear
14 October 2014 в 20:01
Просто добавьте, кто может понадобиться. Не забудьте изменить таблицу!
ALTER TABLE table_name ADD FULLTEXT(column_name);
MATCH
операторов из-за того, как MySQL работает внутри страны. – BadHorsie 8 June 2016 в 18:27