Вверх ↑
Ответов: 698
Рейтинг: 143
#1: 2020-09-07 23:00:51 ЛС | профиль | цитата
Sersey, Попробуй так, только точку doSave выведи наружу.

Dim strIn
Dim strOut
Dim NumRow
Dim NumCol
Dim i
Dim j
Dim objExcel

Sub doWork(Data,Index)
Select Case Index
Case "doOpen" 'На вход подаётся строка, содержащая полный путь к файлу
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open (Data)
For i=1 To objWorkbook.Sheets.Count 'Листы начинаются не с "0", а с "1"
sys.onShet objWorkbook.Sheets(i).Name 'Выводим имя наружу
Next
'j=objWorkbook.macro.Count 'Узнаём количество макросов
' For i=1 To j 'Нумерация начинаются не с "0", а с "1"
' strIn = objWorkbook.macro(i).Name 'Узнаём имя очередного макроса
' sys.onMacro strIn 'Выводим имя наружу
' Next
sys.onShet 0
sys.onOpen 1
Case "doRead" 'На вход подаётся строка, содержащая (разделитель -- точка с запятой): НомерСтроки;НомерКолонки;
strIn = CStr(Data)
i = InStr(1,strIn,";",0)
NumRow = CLng(Mid(strIn, 1, i-1))
NumCol = CLng(Mid(strIn,i+1))
strOut = objExcel.ActiveSheet.Cells(NumRow, NumCol).Value
sys.onCells strOut
Case "doWrite" 'На вход подаётся строка, содержащая (разделитель -- точка с запятой): НомерСтроки;НомерКолонки;ЗаписываемоеЗначение
strIn = CStr(Data)
i = InStr(1,strIn,";",0)
NumRow = CLng(Mid(strIn, 1, i-1))
j = InStr(i+1,strIn,";",0)
NumCol = CLng(Mid(strIn, i+1, j-i-1))
strIn = Mid(strIn, j+1)
objExcel.ActiveSheet.Cells(NumRow, NumCol).Value=strIn
Case "doSheet" 'На вход подаётся строка, содержащая имя Листа
objExcel.Sheets(Data).Select
objExcel.ActiveSheet.Cells(1, 1).Select
Case "doMacro" 'На вход подаётся строка, содержащая имя Макроса
objExcel.Application.Run (Data)
'sys.onMacro 1

Case "doSave"
objExcel.DisplayAlerts = False
objWorkbook.Save

Case "doClose"
On Error Resume Next
objExcel.Quit
Set objExcel = Nothing
sys.onOpen 0
On Error Goto 0
End Select

End Sub

Было бы проще если была бы схема с тем как ты пытаешься сохранять. По идее и предыдущий скрипт должен работать без проблем.
карма: 15

0