Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 14
Рейтинг: 0
#1: 2020-04-17 17:42:20 ЛС | профиль | цитата
Уважаемые форумчане подскажите, как в программах написанных на hiasm, использовать vb- скрипты. Я сделал программу по расчёту определённых параметров, мне нужно, чтобы данные расчёта попали на заранее подготовленный шаблон .xls. На данный момент я пытаюсь разобраться, как сделать чтобы при нажатии кнопки данные с текстового поля передавались в рабочую книгу эксель в определённую ячейку. Информации по работе с vb- скриптами в hiasme крайне мало.




Add(Button,3899430,595,217)
{
Left=65
Top=55
Width=180
Height=25
Caption="ОК"
link(onClick,15624001:ok,[(737,223)(737,202)])
}
Add(VBJScript,15624001,847,196)
{
WorkPoints=#2:ok|
DataPoints=#2:bb|
Script=#28:Function doWork(Data, Index)|0:|46:Set oExcel = CreateObject("Excel.Application")|0:|0:|37:oExcel.Workbooks.Open "E:\\tata.xls"|0:|57:oExcel.Workbooks("tata.xls").Worksheets("Лист1").Activate|0:|0:|26:oExcel.Range("A1").Value=t|0:|0:|0:|1: |21:oExcel.Visible = True|0:|0:|0:|0:|0:|12:End Function|
link(bb,6373574:Text,[])
}
Add(Edit,6373574,847,84)
{
Left=55
Top=15
Width=200
Name="t"
Text=""
DataType=1
}














карма: 0

0
Ответов: 8911
Рейтинг: 823
#2: 2020-04-17 18:49:30 ЛС | профиль | цитата
AlphaCentarva, тренируйтесь, изучайте:
Excel


Add(MainForm,2953706,651,245)
{
Height=203
Caption="In_Out_Excel"
Point(onClose)
link(onClose,604810:doCompare,[])
}
Add(LED,1408573,700,189)
{
Left=85
Top=5
}
Add(IndexToChanel,4742625,651,196)
{
link(onEvent1,1408573:doOff,[])
link(onEvent2,1408573:doOn,[])
}
Add(Button,11796961,406,49)
{
Left=5
Top=10
Width=65
Caption="Open Excel"
link(onClick,420540:doExecute,[])
}
Add(Button,12390211,581,245)
{
Left=10
Top=40
Caption="Close"
link(onClick,7454323:doWork3,[(634,251)])
}
Add(Hub,9982022,504,49)
{
link(onEvent1,10946710:doClear,[(608,55)(608,76)])
link(onEvent2,10692435:doOpen,[(529,62)(529,139)])
}
Add(ODialog,420540,455,49)
{
Filter="Excel(.xls,.xlsx)|*.xls;*.xlsx"
link(onExecute,9982022:doEvent1,[])
}
Add(ComboBox,10946710,616,63)
{
Left=120
Top=10
Width=140
Height=21
Text="Выбрать лист"
DataType=1
Point(doSelect)
link(onClick,10692435:doSheet,[(655,76)(655,125)(536,125)(536,160)])
}
Add(If_else,11782534,560,63)
{
Type=5
Op2=Integer(0)
link(onTrue,10946710:doAdd,[])
link(onFalse,10946710:doSelect,[(597,76)(597,111)])
}
Add(Button,14425351,364,231)
{
Left=10
Top=80
Caption="Read"
link(onClick,469012:doString,[])
}
Add(Edit,5305046,378,182)
{
Left=75
Top=80
Text="2"
DataType=2
}
Add(Label,4501845,322,49)
{
Left=90
Top=60
Caption="Row"
}
Add(Label,613563,364,49)
{
Left=135
Top=60
Width=39
Height=17
Caption="Column"
}
Add(Edit,16579324,420,182)
{
Left=130
Top=80
Text="1"
DataType=2
}
Add(FormatStr,469012,413,231)
{
Mask="%1;%2"
link(onFString,10692435:doRead,[(466,237)(466,153)])
link(Str1,5305046:Text,[(419,222)(384,222)])
link(Str2,16579324:Text,[])
}
Add(Button,8636081,364,140)
{
Left=10
Top=110
Caption="Write"
link(onClick,1368601:doString,[])
}
Add(Edit,663925,378,91)
{
Left=75
Top=110
Text="2"
DataType=2
}
Add(Edit,10420173,420,91)
{
Left=130
Top=110
Text="1"
DataType=2
}
Add(FormatStr,1368601,413,140)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,10692435:doWrite,[])
link(Str1,663925:Text,[(419,135)(384,135)])
link(Str2,10420173:Text,[])
link(Str3,13839568:Text,[(433,131)(475,131)])
}
Add(Edit,13839568,469,91)
{
Left=190
Top=110
Width=175
}
Add(VBJScript,10692435,560,133)
{
@Hint=#16:Query SQL Server|
WorkPoints=#6:doOpen|7:doWrite|6:doRead|7:doSheet|7:doMacro|7:doClose|
EventPoints=#6:onShet|8:onCellsR|8:onCellsW|6:onOpen|
Script=#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|28: sys.onCellsR 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|22: sys.onCellsW 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 |17: Case "doClose"|17: objExcel.Quit|26: Set objExcel = Nothing|20: sys.onOpen 0 |11: End Select|0:|7:End Sub|
UseName=0
link(onShet,11782534:doCompare,[(599,139)(599,118)(550,118)(550,69)])
link(onCellsR,15759223:doText,[])
link(onOpen,4742625:doEvent,[(613,160)(613,202)])
}
Add(Button,12318762,364,322)
{
Left=10
Top=140
Caption="Macro"
link(onClick,640997:doData,[])
}
Add(Edit,15034254,413,280)
{
Left=75
Top=140
Width=154
Text=""
}
Add(DoData,640997,413,322)
{
link(onEventData,10692435:doMacro,[(473,328)(473,167)])
link(Data,15034254:Text,[])
}
Add(If_else,604810,700,266)
{
Op2=Integer(1)
link(onTrue,7454323:doWork2,[(739,272)(739,237)])
link(Op1,1408573:Value,[])
}
Add(HubEx,7454323,630,231)
{
Angle=2
link(onEvent,10692435:doClose,[(550,237)(550,174)])
}
Add(Edit,15759223,623,140)
{
Left=190
Top=80
Width=175
}

карма: 19

0
Ответов: 5227
Рейтинг: 587
#3: 2020-04-18 08:06:20 ЛС | профиль | цитата
Вот чес. слово...
Ну вот не надоело даже не писать а читать такие скрипты
типа:

Sub doWork(Data,Index)
Select Case Index
Case "Sub1"
...
Case "Sub2"
...
Case "Sub3"
...
End Select
End Sub

При всём уважении к tsdima но всё же я переделал и отвязался от индексов
Вызов как в IC:

Sub doSub1(Data,Index)
...
End Sub

Sub doSub2(Data,Index)
...
End Sub

Sub doSub3(Data,Index)
...
End Sub

индекс оставил пока только для совместимости.

Вопрос то простой:
andrestudio писал(а):
Ну вот не надоело даже не писать а читать такие скрипты

Вот уверен что и сейчас все отмолчатся...
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 14
Рейтинг: 0
#4: 2020-04-18 18:21:32 ЛС | профиль | цитата
Леонид писал(а):
AlphaCentarva, тренируйтесь, изучайте:
Excel


Это не совсем то что я хотел узнать. Мне нужно конкретно передать данные скрипту, чтобы с текстового поля значение записалось в ячейку экселя.  Если можете приведите примеры считывания значения со всех точек VBJScript и желательно для разных точек разные примеры, чтобы можно было конкретно понять, как это работает. Ещё раз повторюсь я нигде  не нашёл внятного объяснения работы с этим элементом.
карма: 0

0
Главный модератор
Ответов: 2998
Рейтинг: 396
#5: 2020-04-18 18:58:32 ЛС | профиль | цитата
AlphaCentarva писал(а):
Это не совсем то что я хотел узнать.

Экстрасенсы на этот форум редко заглядывают. Поэтому читаем рекомендации о том как правильно сформулировать свой вопрос.

Редактировалось 1 раз(а), последний 2020-04-18 18:58:50
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 8911
Рейтинг: 823
#6: 2020-04-18 20:50:42 ЛС | профиль | цитата
AlphaCentarva писал(а):
чтобы с текстового поля значение записалось в ячейку экселя
вот:
ЗаписьЧтениеExcel.jpg
карма: 19

0
Ответов: 14
Рейтинг: 0
#7: 2020-04-18 21:00:29 ЛС | профиль | цитата
Nic писал(а):
AlphaCentarva писал(а):
Это не совсем то что я хотел узнать.

Экстрасенсы на этот форум редко заглядывают. Поэтому читаем рекомендации о том как правильно сформулировать свой вопрос.

Редактировалось 1 раз(а), последний 2020-04-18 18:58:50


Возможно, я неправильно сформулировал вопрос. Я нашёл решение и выкладываю его здесь, может быть кому-нибудь это поможет.




Add(Button,3899430,441,350)
{
Left=65
Top=55
Width=180
Height=25
Caption="ОК"
link(onClick,15624001:doWork,[(583,356)(583,335)])
}
Add(VBJScript,15624001,693,329)
{
WorkPoints=#6:doWork|
DataPoints=#4:Text|
Script=#23:Sub doWork(Data, Index)|0:|46:Set oExcel = CreateObject("Excel.Application")|0:|15:Text = sys.Text|37:oExcel.Workbooks.Open "E:\\tata.xls"|0:|57:oExcel.Workbooks("tata.xls").Worksheets("Лист1").Activate|0:|0:|29:oExcel.Range("A1").Value=Text|0:|0:|0:|1: |21:oExcel.Visible = True|0:|0:|0:|0:|0:|7:End Sub|
UseName=0
link(Text,6373574:Text,[])
}
Add(Edit,6373574,693,217)
{
Left=55
Top=15
Width=200
Name="t"
Text=""
DataType=1
}

карма: 0

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