Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 16:26   #1
Софико
Подтвердите свой е-майл
 
Регистрация: 30.11.2011
Сообщений: 17
Восклицание Как на VBScript написать перенос массива в Excel ?

Здравствуйте, мэтры программисты!
Я не имею большого опыта написания в VBScript.
Сейчас пишу (надо написать) макрос для специализированной программки, в процедуре несколько циклов, в начале я оглашаю размер формируемого массива, и в процессе расчётов он заполняется. Как вывести его в конце (после отработки макроса) в Ексель?
ВОПРОС: какие заклинания надо написать чтобы сам формировался ( в процессе выполнения макроса) лист Екселя с заполняемыми столбцами?


Выглядит дело так:

r=setlocale("en-us")
Sub

shag=0
Dim A(1000) B(1000) C(1000)

(команда на выполнение спец.программкой расчета, выполняется расчет)

А(shag)=(выполняется присвоение)
В(shag)=(выполняется присвоение)
С(shag)=(выполняется присвоение)

shag=shag+1

if
end if

for i=0 to максимальное число итераций

if (опускаю подробности)
end if

(команда на выполнение спец.программкой расчета, выполняется расчет)

А(shag)=(выполняется присвоение)
В(shag)=(выполняется присвоение)
С(shag)=(выполняется присвоение)

shag=shag+1

next

if (опускаю подробности)
end if

for j=0 to максимальное число итераций
if
end if

(команда на выполнение спец.программкой расчета, выполняется расчет)

А(shag)=(выполняется присвоение)
В(shag)=(выполняется присвоение)
С(shag)=(выполняется присвоение)

shag=shag+1

next

End Sub

Всё собственно... Хочется получить в Екселе эти три столбца (или в виде строк) заполненные A, B и C (со значениями образованными для каждого шага рачета).

!!! Я написала для вывода следующее:

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)

xlApp.Application.Visible = True

for shag=1 to 1000
xlSheet.Cells(shag, 1).Value = A(shag)
xlSheet.Cells(shag, 2).Value = B(shag)
xlSheet.Cells(shag, 3).Value = C(shag)
shag=shag+1
next

xlSheet.SaveAs "C:\TEST.XLS"

Но в результате выскакивает лист Екселя, НО пустой! - С табличкой об ошибке: Type mist.. "А"
Софико вне форума Ответить с цитированием
Старый 07.12.2011, 21:19   #2
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Код:
Dim x
With CreateObject("Excel.Application")
    With .Workbooks.Add.Sheets(1)
        .Range("A1:A10").Value = 1 ' запись на лист
        x = .Range("A1:A10").Value ' получить массив
        .Range("C1").Resize(UBound(x)) = x ' вывод массива на лист
    End With
    .Visible = True
End With
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 07.12.2011, 21:35   #3
Софико
Подтвердите свой е-майл
 
Регистрация: 30.11.2011
Сообщений: 17
Смущение

СПАСИБО БОЛЬШОЕ, NERV !!!
завтра на работе попробую это сделать!
две недели мучаюсь, думаю, туплю...
ОБЯЗАТЕЛЬНО ОТПИШУ О РЕЗУЛЬТАТЕ!!!
Софико вне форума Ответить с цитированием
Старый 07.12.2011, 21:46   #4
Софико
Подтвердите свой е-майл
 
Регистрация: 30.11.2011
Сообщений: 17
Смущение

NERV, я сделала всё так (просто ctrl copy), получилось вот что:

первый столбец от 1 до 10 ячейки заполнен единичками, второй столбец пустой, третий столбец с 1 по 10 - тоже (как и первый) единички .

Сижу, смотрю на результат, и родились 5 вопросов:

1) когда ты написал Dim х - это мне следует дословно так написать?
(или всё-таки Dim А(1000) В(1000) С(1000)... или как?)

2) ты написал "запись на лист" и "вывод масива на лист" - это одно и тоже? зачем 2 раза?

3) почему ты сам задал значение (value) равно 1?
(надо ведь чтобы Excel сам как-то тянул значение из сформированного в макросе массива... может в макросе надо прописать как-то чтобы сохранялся заполняемый массив?... )

4) почему ты написал А1:А10 ? а чуть ниже еще С1?
(плохо различаю, как обозначены искомые 3 столбца, и где прописывается размерность? у меня должно быть 1000 ячеек в столбце);

5) в листе Excel нужно отразить заголовки столбцов (А,В,С) ...
(а заголовков не появилось...)

Напиши как надо сделать, пожалуйста, в моих обозначениях, я не сильна в этом, ей-богу, хоть вешайся...

Последний раз редактировалось Софико; 08.12.2011 в 13:45. Причина: появились новые вопросы, а ответа ещё не было...
Софико вне форума Ответить с цитированием
Старый 08.12.2011, 16:26   #5
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Софико, будет проще, если Вы полностью выложите код скрипта. Надеюсь, он не очень большой А еще лучше, если приложите файл с примером.
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 09.12.2011, 11:41   #6
Софико
Подтвердите свой е-майл
 
Регистрация: 30.11.2011
Сообщений: 17
Смущение

Привет, добрый человек!
Окей, не хотела пугать, потому написала его в первом сообщении в упрощенном виде, на самом деле в массиве 15 столбцов должно быть, а не 3. В программе Rastr (для которой этот макрос) есть возможность диалога (задание параметров для макроса перед его срабатыванием в программе - это в самом низу после слов End Sub увидишь).
Вот он полностью во вложении.
Вложения
Тип файла: txt мак1.txt (8.6 Кб, 126 просмотров)

Последний раз редактировалось Софико; 09.12.2011 в 11:44.
Софико вне форума Ответить с цитированием
Старый 09.12.2011, 17:34   #7
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Софико, итак, поехали...

1. Объявляйте тип переменных (если это возможно). Это значительно облегчит Вам жизнь при отладке, вдобавок поведение программы будет более предсказуемым. Я говорю от этой строке:
Код:
Sub OtklNagr(koeff, UzelN1, UzelN2, UzelN3, UzelN4, UzelN, UzelShbm)
Также желательно явно указывать как передаются аргументы: по ссылке или по значению. Причины, почему стоит делать именно так я обозначил выше. Кроме того код будет проще читаться.

2. В этой строке вы создаете 15 массивов и устаналиваете каждому из них размерность 1000. (по факу массив будет содержать 1001 элемент, если что)
Код:
Dim Pn1(1000), Qn1(1000), Pn2(1000), Qn2(1000), Pn3(1000), Qn3(1000), Pn4(1000), Qn4(1000), Un(1000), UnNOM(1000), Ushbm(1000), UshbmZAD(1000), delta(1000), Pshbm(1000), Qshbm(1000)
Может проще будет обойтись одним двумерным? Например, так:
Код:
Dim x(1 To 1000, 1 To 15)
x(1000, 15) = 1 ' примеры обращения к этому массиву
x(23, 7) = 2
x(1, 1) = 0
В таком случае значительно проще будет с выгрузкой в Excel. А в комментариях напишите какой "столбец" массива за что отвечает.

Дальше вникать не стал, поскольку: а) не знаю поставленной задачи; б) не знаком с объектной моделью приложения, кот. Вас интересует.
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 09.12.2011, 17:41   #8
Софико
Подтвердите свой е-майл
 
Регистрация: 30.11.2011
Сообщений: 17
Сообщение

NERV, я по порядку:

1. "Объявляйте тип переменных "

ммм... эти переменные - по сути вводимые в диалоговом режиме номера, они не меняются в процессе макроса (они задаются у меня в диалоговом режиме перед пуском макроса)... тут мне кажется и добавить нечего...

2. "Может проще будет обойтись одним двумерным?"
.... ну положим, мне не принципиально, пусть двумерный

3. "В таком случае значительно проще будет с выгрузкой в Excel."
Проще - это хорошо)) , я согласна на проще, только мне всё равно пока неясно, - что же мне надо прописать под макросом-то для выгрузки в Ексель???


PS:
в программу я и не хотела что бы вдумывались, она для расчета электрических режимов сетей! я потому и представила сначала упрощенный вариант макроса, просто принцип переноса понять хочется, опыта никакого...

Последний раз редактировалось Софико; 09.12.2011 в 22:10.
Софико вне форума Ответить с цитированием
Старый 09.12.2011, 17:48   #9
Софико
Подтвердите свой е-майл
 
Регистрация: 30.11.2011
Сообщений: 17
Сообщение

PPS:
я даже уже сообразила, получила в открывающейся сраничке Екселя названия 15 массивов (т.е. первая строчка Екселя уже занята заголовками) - хоть что-то получилось...
Заголовки встали благодаря заклинанию:

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)

xlApp.Application.Visible = True
xlSheet.Cells(1, 1).Value = "Pn1"
xlSheet.Cells(1, 2).Value = "Qn1"
xlSheet.Cells(1, 3).Value = "Pn2"
xlSheet.Cells(1, 4).Value = "Qn2"
xlSheet.Cells(1, 5).Value = "Pn3"
xlSheet.Cells(1, 6).Value = "Qn3"
xlSheet.Cells(1, 7).Value = "Pn4"
xlSheet.Cells(1, 8).Value = "Qn4"
xlSheet.Cells(1, 9).Value = "Un"
xlSheet.Cells(1, 10).Value = "UnNOM"
xlSheet.Cells(1, 11).Value = "delta"
xlSheet.Cells(1, 12).Value = "Ushbm"
xlSheet.Cells(1, 13).Value = "UshbmZAD"
xlSheet.Cells(1, 14).Value = "Pshbm"
xlSheet.Cells(1, 15).Value = "Qshbm"
xlSheet.SaveAs "C:\TEST.XLS"
___________________________________ _________
Эххх, мне теперь сам массив (двумерный как договорились) вынести под эти заголовки (соответственно со второй строчки должен начать вставляться) - вот как бы это сделать...

Последний раз редактировалось Софико; 09.12.2011 в 22:11.
Софико вне форума Ответить с цитированием
Старый 10.12.2011, 11:06   #10
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Софико, прошу прощения, был не прав. Вроде как VBScript поддерживает только один тип данных - Variant.
Попробуйте запустить пример из файла. После открытия Excel нажмите Ctrl+End.
Код:
Dim x(999, 14)
'------Первая "строка"------
x(0, 0) = "[1/1]" ' первый элемент строки
x(0, 14) = "[1/15]" ' последний элемент строки

'------Вторая "строка"------
x(1, 0) = "[2/1]" ' первый элемент строки
x(1, 14) = "[2/15]" ' последний элемент строки
' и т.д.

'------Последняя "строка"------
x(999,0) = "[1000,1]" ' первый элемент строки
x(999,14) = "[1000,15]" ' последний элемент строки

With CreateObject("Excel.Application")
    .Workbooks.Add(1).Sheets(1).Range("A1").Resize(1000, 15) = x ' A1 - ячейка с кот. начинается вывод массива
    .Visible = True
End With
Вложения
Тип файла: zip CreateExcelApp&ArrayOutput.zip (504 байт, 12 просмотров)
Тишина – самый громкий звук

Последний раз редактировалось nerv; 10.12.2011 в 11:08.
nerv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать и визуализировать программу в Excel friga Помощь студентам 1 06.04.2011 11:10
Как написать макрос в Excel???? Маська Помощь студентам 1 10.11.2010 16:36
Как написать из excel формулу в word Святой Дьявол Microsoft Office Excel 1 13.09.2010 22:07
как написать формулу Excel ROBERT033 Microsoft Office Excel 3 13.02.2009 23:21
Простой максор. Excel. Как написать. prosims Microsoft Office Excel 7 07.06.2007 17:06