Вверх ↑
Этот топик читают: Гость
Ответов: 42
Рейтинг: 8
#16: 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

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

0
Ответов: 427
Рейтинг: 13
#17: 2020-09-07 23:54:21 ЛС | профиль | цитата
Да, с утра буду пробовать, надеюсь все получится. A, сохраняю ни как, просто закрываю, советы с этой https://forum.hiasm.com/topic/66733/0 темы не помогли, только ошибки выскакивают
Сделаю и попробую doSave, напишу как работает

Редактировалось 1 раз(а), последний 2020-09-08 01:18:14
карма: 4

0
Ответов: 42
Рейтинг: 8
#18: 2020-09-08 07:34:11 ЛС | профиль | цитата
Sersey, мне кажется, что у тебя несколько VBJScript в твоей программе и этот файл открыт в каком-то другом месте и не закрыт. Если так, то этот скрипт тоже не должен работать.
карма: 3

0
Ответов: 427
Рейтинг: 13
#19: 2020-09-15 20:58:21 ЛС | профиль | цитата
Не работает сохранение, выдает ошибку
Ошибка.png
excel файл https://yadi.sk/i/7-S3FoTjr_TzQw
Add(MainForm,9161318,525,238)
{
Width=391
Height=268
Caption="In_Out_Excel"
Point(onClose)
link(onClose,604810:doCompare,[])
}
Add(LED,1408573,574,189)
{
Left=85
Top=5
}
Add(IndexToChanel,4742625,525,196)
{
link(onEvent1,1408573:doOff,[])
link(onEvent2,1408573:doOn,[])
}
Add(Button,11796961,315,49)
{
Left=5
Top=10
Width=65
Caption="Open Excel"
link(onClick,420540:doExecute,[])
}
Add(Button,12390211,406,175)
{
Left=10
Top=40
Caption="Close"
link(onClick,13900935:doWork2,[])
}
Add(ODialog,420540,364,49)
{
Filter="Excel(.xls,.xlsx,.xlsm)|*.xls;*.xlsx;*.xlsm"
}
Add(ComboBox,10946710,525,63)
{
Left=120
Top=10
Width=140
Height=21
Text="Выбрать лист"
DataType=1
Point(doSelect)
link(onClick,10692435:doSheet,[(564,76)(564,125)(445,125)(445,160)])
}
Add(If_else,11782534,469,63)
{
Type=5
Op2=Integer(0)
link(onTrue,10946710:doAdd,[])
link(onFalse,10946710:doSelect,[(513,76)(513,97)])
}
Add(Button,14425351,217,231)
{
Left=10
Top=95
Caption="Read"
link(onClick,469012:doString,[])
}
Add(Edit,5305046,231,182)
{
Left=75
Top=95
Text="2"
DataType=2
}
Add(Label,4501845,231,49)
{
Left=90
Top=75
Caption="Row"
}
Add(Label,613563,273,49)
{
Left=135
Top=75
Width=39
Height=17
Caption="Column"
}
Add(Edit,16579324,273,182)
{
Left=130
Top=95
Text="1"
DataType=2
}
Add(FormatStr,469012,266,231)
{
Mask="%1;%2"
link(onFString,10692435:doRead,[(382,237)(382,153)])
link(Str1,5305046:Text,[(272,222)(237,222)])
link(Str2,16579324:Text,[])
}
Add(Button,8636081,217,140)
{
Left=10
Top=125
Caption="Write"
link(onClick,1368601:doString,[])
}
Add(Edit,663925,231,91)
{
Left=75
Top=125
Text="2"
DataType=2
}
Add(Edit,10420173,273,91)
{
Left=130
Top=125
Text="1"
DataType=2
}
Add(FormatStr,1368601,266,140)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,10692435:doWrite,[])
link(Str1,663925:Text,[(272,135)(237,135)])
link(Str2,10420173:Text,[])
link(Str3,13839568:Text,[(286,131)(328,131)])
}
Add(Edit,13839568,322,91)
{
Left=190
Top=125
Width=175
}
Add(VBJScript,10692435,469,133)
{
@Hint=#16:Query SQL Server|
WorkPoints=#6:doOpen|7:doWrite|6:doRead|7:doSheet|7:doMacro|6:doSave|7:doClose|
EventPoints=#6:onShet|7:onMacro|7:onCells|6:onOpen|
Script=#0:|9:Dim strIn|10:Dim strOut|10:Dim NumRow|10:Dim NumCol|5:Dim i|5:Dim j|12:Dim objExcel|0:|22:Sub doWork(Data,Index)|18: Select Case Index|103: Case "doOpen" 'На вход подаётся строка, содержащая полный путь к файлу|52: Set objExcel = CreateObject("Excel.Application")|52: Set objWorkbook = objExcel.Workbooks.Open (Data)|82: For i=1 To objWorkbook.Sheets.Count 'Листы начинаются не с "0", а с "1"|67: sys.onShet objWorkbook.Sheets(i).Name 'Выводим имя наружу |9: Next|74: 'j=objWorkbook.macro.Count 'Узнаём количество макросов|88: ' For i=1 To j 'Нумерация начинаются не с "0", а с "1" |79: ' strIn = objWorkbook.macro(i).Name 'Узнаём имя очередного макроса |67: ' sys.onMacro strIn 'Выводим имя наружу |15: ' Next |18: sys.onShet 0 |16: sys.onOpen 1|143: Case "doRead" 'На вход подаётся строка, содержащая (разделитель -- точка с запятой): НомерСтроки;НомерКолонки;|22: strIn = CStr(Data)|28: i = InStr(1,strIn,";",0)|37: NumRow = CLng(Mid(strIn, 1, i-1))|33: NumCol = CLng(Mid(strIn,i+1))|61: strOut = objExcel.ActiveSheet.Cells(NumRow, NumCol).Value|27: sys.onCells strOut |163: Case "doWrite" 'На вход подаётся строка, содержащая (разделитель -- точка с запятой): НомерСтроки;НомерКолонки;ЗаписываемоеЗначение|22: strIn = CStr(Data)|28: i = InStr(1,strIn,";",0)|37: NumRow = CLng(Mid(strIn, 1, i-1))|30: j = InStr(i+1,strIn,";",0)|41: NumCol = CLng(Mid(strIn, i+1, j-i-1))|28: strIn = Mid(strIn, j+1)|58: objExcel.ActiveSheet.Cells(NumRow, NumCol).Value=strIn|93: Case "doSheet" 'На вход подаётся строка, содержащая имя Листа|32: objExcel.Sheets(Data).Select|44: objExcel.ActiveSheet.Cells(1, 1).Select |95: Case "doMacro" 'На вход подаётся строка, содержащая имя Макроса|63: objExcel.Application.Run (Data) |19: 'sys.onMacro 1 |1: |16: Case "doSave"|31: objExcel.DisplayAlerts = False|17: objWorkbook.Save|1: |17: Case "doClose"|23: On Error Resume Next|17: objExcel.Quit|26: Set objExcel = Nothing|16: sys.onOpen 0|22: On Error Goto 0 |11: End Select|0:|7:End Sub|0:|
UseName=0
link(onShet,11782534:doCompare,[(508,139)(508,118)(459,118)(459,69)])
link(onCells,3080051:doText,[])
link(onOpen,4742625:doEvent,[(513,160)(513,202)])
}
Add(Button,12318762,217,315)
{
Left=10
Top=155
Caption="Macro"
link(onClick,640997:doData,[])
}
Add(Edit,15034254,266,273)
{
Left=75
Top=155
Width=154
Text="PrintTbl"
}
Add(DoData,640997,266,315)
{
link(onEventData,10692435:doMacro,[(342,321)(342,167)])
link(Data,15034254:Text,[])
}
Add(If_else,604810,574,259)
{
Op2=Integer(1)
link(onTrue,13900935:doWork3,[(616,265)(616,301)(459,301)])
link(Op1,1408573:Value,[])
}
Add(HubEx,13900935,455,175)
{
link(onEvent,10692435:doClose,[])
}
Add(Edit,3080051,525,147)
{
Left=190
Top=95
Width=175
}
Add(Label,6730095,231,42)
{
Left=130
Top=185
Width=26
Height=17
Caption="Row"
}
Add(Label,2847495,266,42)
{
Left=285
Top=185
Width=39
Height=17
Caption="Column"
}
Add(Button,15911981,357,168)
{
Left=125
Top=40
Caption="Save"
link(onClick,10692435:doSave,[])
}


Редактировалось 1 раз(а), последний 2020-09-15 21:00:41
карма: 4

0
Ответов: 8562
Рейтинг: 790
#20: 2020-09-15 22:08:37 ЛС | профиль | цитата
Sersey, всё работает и с *.xlsx (Win10, Excel2019), надо указать открытую книгу (да и при закрытии изменённой книги Excel спросит "Сохранить/Нет", если сами забыли:

   Case "doSave"
'objExcel.DisplayAlerts = False
objExcel.ActiveWorkbook.Save
карма: 18

0
Ответов: 427
Рейтинг: 13
#21: 2020-09-16 06:30:12 ЛС | профиль | цитата
Теперь сохраняет без лишних вопросов, спасибо
карма: 4

0
21
Сообщение
...
Прикрепленные файлы
(файлы не залиты)