копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
Добрый день, как правильно перевести макрос excel в vfp?
Исправлено 3 раз(а). Последнее : axeum, 27.07.20 11:16 |
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Обычно в таких случаях срабатывает использование указанных значений параметров в скобках - без указания их имен естественно. Кстати, есть такой полезный трюк, прочитал когда-то в одной из толстых книжек по программированию VBA Excel (всегда стоит поизучать немного этот язык, сегодня в инете в принципе есть неплохая документация, скажем по данной комманде: docs.microsoft.com ). Если по ходу макроса встречаются вот такие стыки Select-Selection:
То их можно удалять, сливая две строку в одну. При этом помимо упрощения кода, как пишут, повышается и скорость его обработки. Т.е. в данном случае может выглядеть как-то так:
Еще важный момент, который также следует учитывать при переводе синтаксиса под фокспро - в каких-то случаях после такого перевода, какие-то команды могут не срабатывать точно так же из-под фокспро, как в макросах самого Excel. Т.е. иногда, хотя и редко, приходится использовать какие-то чуть другие команды для того же самого. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 4 раз(а). Последнее : Crispy, 27.07.20 13:40 |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
|
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
А в макросе как вставлялось? ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: копирование колонки | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Выбрать другую колонку, чтобы вставлялось слева от неё. В данном случае колонку Е. ------------------ WBR, Igor |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
и в макросе тоже слева вставляется(я без данных смотрел поэтому даже не заметил этого), ладно не сильно критично но спасибо а не подскажете еще как объединить 2 строки для допустим Е колонки(я вчера где то находил пример кода а сейчас не могу найти ничего похожего) сделал что работает так как надо но что то изменил и теперь ошибка а как исправить и где я что сломал не понимаю 'variable is not found' с указаием на Range("E3:E4").Select но ведь range не переменная
Исправлено 11 раз(а). Последнее : axeum, 28.07.20 07:51 |
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Ну так Range же сам по себе не был объявлен как объект, и тем более, это не функция фокспро. Поэтому фокспро не может определить, что с ним делать. Он должен быть "пристегнут" к объекту excel. Сейчас точно не помню (надо просто посмотреть в справке), но кажется что-то вроде такого:
Где ActiveSheet - активная страница. Либо возможно сработает даже и просто к loexcel, если страница одна - это нужно глянуть синтаксис в справке, ну или просто проверить запуская. В целом же кстати приведенный код также можно упростить. Т.к. выполнение чего-то нужно только при kol>1, можно сам цикл просто начать с 2. Также - по упомянутому выше у меня правилу удаления Select-Selection, оставшиеся строки сливаются. Т.е. в итоге приведенный код будет выглядеть как-то так:
Кстати непонятно, зачем в цикле было наращивать переменную цикла? i= i +1 ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 28.07.20 11:39 |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
я думал что будет бесконечный цикл если не увеличивать переменную но да я и сам дошел до того что i= i +1 там лишняя, это все неопытность но ничего со временем исправлюсь и там теперь код изменился
Исправлено 3 раз(а). Последнее : axeum, 29.07.20 11:38 |
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Все подробности по SCAN в принципе хорошо изложены в справочном руководстве к фокспро. ;) Тем более, есть полный русский его перевод к VFP9. Так что всегда стоит в первую очередь обращаться туда, читать, думать, пробовать. Если же в двух словах - с IF тут вообще не может быть никаких аналогий, т.к. это же цикл! А не выбор по условию, как в IF. Даже с циклами FOR или DO WHILE есть много различий. SCAN - прежде всего нужен, чтобы перемещать последовательно указатель записи по указанной для него таблице, по условиям или без. Т.е., скажем в такой гипотетической конструкции:
Хотя обычно такого рода вложения блоков SCAN друг в друга не применяются, в этом просто нет и особого смысла. Гонять же одну и ту же таблицу туда-сюда вложенными друг в друга сканами - и вовсе как бы бессмысленно. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 29.07.20 12:57 |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
так я понимаю что если 1 таблица скан в скане не имеет смысла но проблема как раз в том что курсора 2 и собрать оба курсора в 1 нельзя(совсем разная информация в них), а может тогда заменить на такой формат? но проблема в том что информация из этих 2 курсоров переносится в excel и чтобы не получилось так что в каком то из курсоров не хватает чего то
Исправлено 3 раз(а). Последнее : axeum, 29.07.20 13:31 |
Re: копирование колонки | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> все же как работает scan внутри scan ? примерно так же как if внутри if?
примерно да SCAN работает просто - это эквивалент вот такой конструкции:
SCAN внутри SCAN в одном курсоре - тоже можно, сохраняя и восстанавливая RECNO внешнего SCAN-а:
|
Re: копирование колонки | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
А если нужно начинать сканить с текущей записи, то GO TOP не нужен.
Вааще-та есть какая-то разница по скорости выполнения (или ещё по чему-то) между SCAN и DO WHILE в паре со SKIP? DO WHILE Вроде как "универсальный" цикл, а не только цикл по таблице. Исправлено 1 раз(а). Последнее : Simple777, 29.07.20 16:02 |
Re: копирование колонки | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Скорость в фоксе могут сажать самые тривиальные команды, скорость измеряется в конкретной проге, с конкретными данными. Скорее всего просто скан малоотличим от ду вхиле по скорости, на простой табличке. Но если в скан добавить FOR, или SET FILTER в случае ду вхиле, то уже хз, хотя если выражения фильтра одинаковы, то может быть опять скорости будут одинаковы. Вобщем, скорость выполнения проги - это этап вторичный, сначала надо просто оживить прогу, изложив ее в правильном грубом направлении...
|
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Как это нельзя? При желании все можно. ;) ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
|
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Если пока не трогать некоторых ужасов данного кода - что вообще в итоге должно получиться, на пальцах так сказать? И из каких собственно таблиц? Лучше в ьаких случаях хотя бы на картинках показывать. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
вот пример какой мне прислали и попросили сделать такой отчет, но вся сложность и непонятность в том что динамические таблицы я еще не делал только статичные в которые можно сразу прописать куда что вставить и откуда что отнять/сложить/умножить/поделить и если вдруг где то что то не правильно встало/посчитало быстро это подравить
лиц.счет/фио/адрес/долг на начало выбранного периода а дальше должно идти пояснение: начислено за первый месяц выбранного периода начислено Х | оплачено за первый месяц выбранного периода Y и собственно так далее по каждому месяцу в выбранном периоде до того пока не будет достигнут конец выбранного периода скажет что у нас это июнь-июль 2020г соотв. 2 колонки для июня и 2 колонки для июля(что у меня худо бедно получилось сделать) |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
максимум что смог сюда впихнуть с ограничениями
вот 2 курсора откуда и выгружается все,это оплаты за июнь м000092,а это за м000093 июль а N000092 оплаты выбранных месяцов, и вот эти значения надо выгрузить в таблицу excel в соответствующую колонку, если будет выбран другой период то и (М+номер месяца) соотв. изменится Исправлено 3 раз(а). Последнее : axeum, 30.07.20 11:06 |
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Ну на первыый взгляд, задача вроде бы стандартная. Обычно просто делается итоговая выборка в курсор, аналогичный конечному виду отчета, который потом уже и сканируется в эксель. В чем вообще проблемы? Почему нельзя сделать все в один курсор? Зачем второй нужен? ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
задача то легкая я ведь не спорю с этим, но я писал только пару справок в ворд и не сложынй отчет в excel где просто надо вписать нужные значения в нужные колонки и кол-во колонок не изменялось поэтмоу для меня это пока сложно и вызывает столько вопросов, я первый раз пишу что то подобное, а можно тогда скинуть как объединить 2 курсора и объединить так чтобы не было повторяющишься полей? типа fio_a и fio_b, я пытался через left join соединить курсоры но хорошего ничего не вышло
я не знаю какие поля указывать если имя поле динамические и сегодyя оно будет m000092 а завтра я уже буду выдавать на M000080 все осн поля я вытащу из cur1.* но cur2 вводит в ступор, union так вроде не тот случай а Join я не знаю как вытащить нужные поля из cur2 Исправлено 3 раз(а). Последнее : axeum, 30.07.20 11:58 |
© 2000-2024 Fox Club  |