Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Ошибка компиляции при использовании ADO, адаптация кода VBA написанного в Microsoft Excel 2016 64-Bit под Excel версий 2007, 2010 32/64 bit
 
Добрый день!
Сделал отчет, на моем компьютере и компьютерах коллег в офисе все работает, у всех одна версия офиса, 2016 64-Bit. Отчет делали для коллег на филиалах, а у них сборная солянка из офисов разных годов и разной архитектуры, в итоге у кого-то все хорошо, у кого-то ошибки "compile error in hidden module. Лист 1"… Подскажите, как можно адаптировать код и сделать его универсальным? Про Win32API_PtrSafe with 64-bit читал, в файле txt лазил, для себя ничего полезного не нашел, хотя возможно не знаю как правильно искать... Compatibility Between the 32-bit and 64-bit Versions of Office 2010 тоже читал, не помогло. Файл отчета во вложении.

Код
Sub Обновить_текущий_город()
Dim cn As Object 'New ADODB.Connection
Dim rec As Object 'ADODB.Recordset
Dim dtfr, dtto, PosStr
Dim sh, sh1, sh2 As Worksheet
    Set sh = ThisWorkbook.Sheets("Свод")
    Set sh1 = ThisWorkbook.Sheets("Ошибки")
    Set sh2 = ThisWorkbook.Sheets("Настройки")
        
    dtfr = Format(sh.Range("B1"), "YYYYMMDD")
    dtto = Format(sh.Range("B2"), "YYYYMMDD")
    
' проверка на дурака, даты
    If dtfr = "" Or dtto = "" Then
        MsgBox "Проверьте, не должно быть не заполненного периода!", vbCritical
        Exit Sub
    Else
        If dtto < dtfr Then
            MsgBox "Дата начала периода не может быть больше даты окончания!", vbCritical
            Exit Sub
        End If
    End If
    
'соединение
    Set cn = CreateObject("ADODB.Connection")
    cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=***;Password=***;" _
                          & "Data Source=***;Use Procedure for Prepare=1;Auto Translate=True"
    cn.Open
'рекордсет
    Set rec = CreateObject("ADODB.Recordset")
    rec.CursorType = adOpenDynamic
    rec.LockType = adLockOptimistic
    ' обновляем первую, сводную таблицу
    sh.PivotTables("Свод").PivotCache.CommandText = _
     "exec [dbo].[Masinev_Transport_Imput_to_InkTransportReport_check] @frDate = '" & dtfr & "',@toDate = '" & dtto & "',@branch = '" & sh2.Cells(2, 3) & "'"
    On Error Resume Next
    sh.PivotTables("Свод").PivotCache.Refresh
    
    ' обновляем вторую таблицу, предварительно очистив данные
    If sh1.Range("A2") = "" Then
    Else
        PosStr = sh1.Cells(1, 1).End(xlDown).Row
        sh1.Range("A2:D" & PosStr).ClearContents
    End If
    rec.Open "exec Masinev_Transport_Imput_to_InkTransportReport_mistakes @branch = '" & NameBook & "'", cn
    sh1.Range("A2").CopyFromRecordset rec
    rec.Close
    cn.Close
    
End Sub

Макрос. Удаление строк из таблицы в БД, Необходимо составить макрос для удаления строк из БД по ID строки
 
Доброго времени суток.
Стоит задача, проставлять галочки напротив строк, которые необходимо удалять, нажимать кнопку для запуска макроса и отмеченные строки нужно удалить из таблицы в БД. Я в VBA не силен... Пожалуйста помогите... Взял по аналогии вот такой чужой код, попытался переделать под себя, но выдает ошибку на строке
arr(i) = sn.Cells(t, 9)

Run-time error '6':
Overflow

Файл с таблицей приложил, код ниже и в самом файле
Код
Global sn
Global PosStr As Integer

Sub deletrs() 'удаление записей

Dim i, t As Integer
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset

Set sn = ThisWorkbook.Sheets("test")

PosStr = sn.Cells(6, 3).End(xlDown).Row

t = 6
i = 1
Dim arr() As Integer
ReDim arr(1 To i) As Integer
   
   For t = 6 To PosStr
     If IsEmpty(sn.Cells(t, 1)) = False Then
       arr(i) = sn.Cells(t, 9)
       i = i + 1
     End If
   Next
 
cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=******;Password=******;Data Source=ahdb1c;Use Procedure for Prepare=1;Auto Translate=True"
cn.Open

'открываем recordset
Set rs = CreateObject("ADODB.Recordset")
rs.cursortype = adOpenKeyset
rs.locktype = adLockOptimistic
rs.Open "select * from baza.dbo.mog_корректировка_бюджета_copy", cn

i = 1
    For i = LBound(arr) To UBound(arr)
        rs.Find "id=" & arr(i)
        rs.Delete
        rs.movenext
    Next
    
PosStr = Empty
MsgBox ("Данные удалены")

End Sub
Страницы: 1
Наверх