. Для целей совместимости PDO будет только emulate подготовленным операциям, заменив заполнители фактическими данными вместо их отправки на сервер отдельно, если не указано иное. И с «ленивой» привязкой (используя массив в execute ()), PDO будет обрабатывать каждый параметр как строку. В результате подготовленный LIMIT ?,?
запрос становится LIMIT '10', '10'
, который является недопустимым синтаксисом, который вызывает запрос.
Эта проблема может быть решена либо
$conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
$stm = $pdo->prepare('SELECT * FROM table LIMIT ?, ?');
$stm->bindValue(1, $limit_from,PDO::PARAM_INT);
$stm->bindValue(2, $per_page,PDO::PARAM_INT);
$stm->execute();
$data = $stm->fetchAll();
Ваш код выглядит довольно хорошим.
Быть осторожным, однако, для Вашего вызова к Range("H5")
команда ярлыка к Application.Range("H5")
, который эквивалентен Application.ActiveSheet.Range("H5")
. Это могло быть прекрасным, если единственные изменения являются пользовательскими изменениями - который является самым типичным - но для значений ячеек рабочего листа возможно измениться, когда это не активный лист через программируемые изменения, например, VBA.
Принимая это во внимание, я использовал бы Target.Worksheet.Range("H5")
:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("H5")) Is Nothing Then Macro
End Sub
Или можно использовать Me.Range("H5")
, если обработчик событий находится на кодовой странице для рассматриваемого рабочего листа (это обычно):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then Macro
End Sub
Hope это помогает...
Обработайте Worksheet_Change
событие или Workbook_SheetChange
событие.
обработчики событий берут аргумент "Цель В качестве Диапазона", таким образом, можно проверить, включает ли диапазон, который это изменяет, ячейку, Вы интересуетесь.
Я предпочитаю этот путь, не используя ячейку, но диапазон
Dim cell_to_test As Range, cells_changed As Range
Set cells_changed = Target(1, 1)
Set cell_to_test = Range( RANGE_OF_CELLS_TO_DETECT )
If Not Intersect(cells_changed, cell_to_test) Is Nothing Then
Macro
End If
У меня есть ячейка, которая связана с онлайн-базой данных акций и часто обновляется. Я хочу запускать макрос всякий раз, когда обновляется значение ячейки.
Я считаю, что это похоже на изменение значения ячейки программой или любое обновление внешних данных, но приведенные выше примеры почему-то не работают для меня. Я думаю, проблема в том, что внутренние события excel не запускаются, но это мое предположение.
Я сделал следующее:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheets("Symbols").Range("$C$3")) Is Nothing Then
'Run Macro
End Sub