Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA

Автор: aks_sv
Дата сообщения: 16.03.2007 13:11
SERGE_BLIZNUK

Почему-то при запуске макроса выделяется w1= и выскакивает окошко:
Compile error: Variable not defined
Автор: AndVGri
Дата сообщения: 16.03.2007 13:19
aks_sv

Определите переменные, используемые процедурой
Sub Asplit()
Dim w1 As Worksheet
Dim MyCol As Long, Row1 As Long, Row2 As Long
Dim MyType As String, posSpace As Long
Dim d1 As Double, d2 As Double
Dim s1 As String, s2 As String
...
...
End Sub
Автор: SERGE_BLIZNUK
Дата сообщения: 16.03.2007 14:15
AndVGri
Цитата:
Определите переменные, используемые процедурой

век живи — век учись...


aks_sv

Цитата:
Compile error: Variable not defined

или можно так Alt-F11 / Tools / Options / Editor (Require Variable Declaration - убрать галочку)

AndVGri - спасибо за науку. Теперь я понял, зачем Вы всегда описываете переменные!

Автор: aks_sv
Дата сообщения: 16.03.2007 14:25
SERGE_BLIZNUK
AndVGri
Большое спасибо!
Автор: Malinoff
Дата сообщения: 16.03.2007 16:58
Привет! Подскажите пожайлуста чайнику! При сохранении файла xls в csv как положено через пункт меню файл\сохранить как... сохранение происходит нормально с записью значений в ячейки, а при записи данной операции в макрос исходный файл получается с разделителями запятыми и все в одну строчку.... подскажите как поправить такой макрос для нормального сохранения...
Автор: AndVGri
Дата сообщения: 16.03.2007 17:12
Malinoff

Так как с вопросом привести код? Вы сохраняете в CSV это и есть "значения разделённые запятыми" (comma separated values) и, следовательно, никаких ячеек данный формат не содержит.
Чтобы понять, почему в макросе у Вас данные сохраняются в одну строку (если Вы только не сохраняете одну строку данных), нужно поглядеть на Ваш код, на предмет ошибки.
Автор: Malinoff
Дата сообщения: 16.03.2007 17:25
AndVGri
Код записывается автоматически когда я последовательно выполняю действия руками, но итог сохранения руками и программно разный, при открытии полученных вайлов Excelем очевидна разница...

Добавлено:
Я имею ввиду сохранение небольших таблиц, руками csv получается практически такой же только все форматы убираются, а программно - как положено с разделителями запятыми... так вот мне нужно что бы программно получалось в точности как руками
Автор: AndVGri
Дата сообщения: 16.03.2007 18:04
Malinoff
Из блокнота, сохранённое "руками"
1,2,3
6,5,4
q,w,e


Из блокнота, сохранённое макросом ActiveWorkbook.SaveAs Filename:="D:\Книга2.csv", FileFormat:=xlCSV, CreateBackup:=False
1,2,3
6,5,4
q,w,e

В чём разница?
Автор: robinLib
Дата сообщения: 17.03.2007 14:12
Доброе время суток! Подскажите пожалуйста как при нажатии на кнопку перемстить курсор на ячейку но так, чтобы она оказалась в левом верхнем углу. Просто Range("F46").select переводит курсор на ячейку но она может оказаться где угодно, а мне необходимо чтобы именно в верхнем левом углу.
Автор: AndVGri
Дата сообщения: 17.03.2007 15:00
robinLib
Просто в левом вернем углу чего?
Листа? Cells(1&, 1&).Select
Текущего диапазона данных, в котором находиться активная ячейка?
Dim vRow As Long, vCol as Long
vRow = ActiveCell.CurrentRegion.Row
vCol = ActiveCell.CurrentRegion.Column
Cells(vRow, vCol).Select
Автор: robinLib
Дата сообщения: 17.03.2007 15:44
...нет не годится.
Еще раз: у меня на листе есть кнопки перехода к разным таблицам на листе. Так вот когда я нажымаю на кнопку, то активная ячейка должна переместиться на первую ячейку таблицы. Но! Эта первая ячейка таблицы должна начинаться с сверху листа. не со средины и не конца а именно сверху. Конкретный пример. Пустьесть ячейка А1. При нажатии на кнопку пусть курсор переходит в D19 - она оказывается в середине листа. Чтоб получилось правильно нужно перемотать Scrool Bar чуть вправо и вниз тогда она окажется в левм верхнем углу...А как это сделать автоматом?
Автор: AndVGri
Дата сообщения: 17.03.2007 16:04
robinLib

Dim vRow As Long, vCol As Long

'Если D19 не верняя левая ячейка требуемой таблицы,
'то определим номер строки и столбца такой ячейки
vRow = Range("D19").CurrentRegion.Row
vCol = Range("D19").CurrentRegion.Column
'прокрутка
ActiveWindow.ScrollColumn = vCol
ActiveWindow.ScrollRow = vRow
Автор: robinLib
Дата сообщения: 17.03.2007 17:01
Ага пасибки AndVGri
Автор: AsPAndA
Дата сообщения: 19.03.2007 15:58
В чем ошибка?
ругается на эту строку(application or object defined error), если меняю роунд на сум то все ок

ActiveSheet.Cells(j, 15).FormulaR1C1 = "=round(rc[-2]+rc[-2]*0,01;2)"


Dim i, j As Integer

Sub try()

j = 7
For i = 7 To 10000
If Cells(i, 1) = "Èòîãî" Then
ActiveSheet.Cells(i, 10).FormulaR1C1 = "=sum(r[" & j - i & "]c:r[-1]c)"
ActiveSheet.Cells(i, 13).FormulaR1C1 = "=sum(r[" & j - i & "]c:r[-1]c)"
ActiveSheet.Cells(i, 14).FormulaR1C1 = "=rc[-3]*rc[-1]"
ActiveSheet.Cells(j, 15).FormulaR1C1 = "=round(rc[-2]+rc[-2]*0,01;2)"
j = i + 3
End If
Next i

End Sub
Автор: Yuk
Дата сообщения: 19.03.2007 16:08
AsPAndA
У меня проходит FormulaR1C1 = "=round(rc[-2]+rc[-2]*0.01,2)" (англ.ексел)
Или попробуй FormulaR1C1Local
Автор: AsPAndA
Дата сообщения: 19.03.2007 16:14
и у меня английский, но не пашет
Автор: Yuk
Дата сообщения: 19.03.2007 16:25
AsPAndA
Почему же ты тогда используешь , и ; как в русском?
Автор: AsPAndA
Дата сообщения: 19.03.2007 16:26
Странно, но я цопи-пасте с твоего поста заделал и заработало

Добавлено:
Yuk,
где я использую и ?
Автор: Yuk
Дата сообщения: 19.03.2007 16:33
AsPAndA
А если повнимательнее посмотреть в конец строки?
Автор: SERGE_BLIZNUK
Дата сообщения: 19.03.2007 16:33
AsPAndA
FormulaR1C1 = "=round(rc[-2]+rc[-2]*0,01;2)"
разделитель дробной части строго ТОЧКА
разделитель параметров ЗАПЯТАЯ

Автор: AsPAndA
Дата сообщения: 19.03.2007 16:36
Спасибо!!!
Хотя странно в екселе то , и ;
я просто думал , что туда надо тупо формулу вставить
Автор: Yuk
Дата сообщения: 19.03.2007 16:49
AsPAndA
Я же писал - используй FormulaR1C1Local.
Автор: Isuaven
Дата сообщения: 19.03.2007 21:47
Народ, помогите разрулить проблему!
Вот например у MsgBox'a можно споконо узнать на какую кнопку нажал пользователь...
А вот как узнать что нажаль пользователь в стандартном сообщении Экселя, типа при попытке открытия открытой книги и т.д.???
Автор: The okk
Дата сообщения: 20.03.2007 09:12
Isuaven
А это смотря откуда взялось "стандартное сообщение Экселя". - Если Эксель сам это сообщение вызвал, то никак (разве что попытаться отследить последствия). Если стандартное сообщение вызвал ты, то и результат получаешь аналогично MsgBox'у.
Что конкретно ты хочешь сделать?
Автор: evsino
Дата сообщения: 21.03.2007 20:19
суть такая
есть файловый архив примерно 5000 папок
в каждой папке есть файлы EXCEL
1 задача найти папки где всего 1 файл EXCEL и поместить эти папки в директорию 1
2 задача найти папки где 2 файл EXCEL и поместить эти папки в директорию 2
3 задача найти папки где более 2 файлов EXCEL и поместить эти папки в директорию 3
4 задача выбрать из всех фалов директории 1 информацию и занести ее в таблицу EXEL

меня интересует можно ли это все реализовать в EXCEL
если можно то примерно как
Автор: Olive77
Дата сообщения: 21.03.2007 21:35
evsino
можно при помощи
- Dir() (описание посмотри в Helpe)
- Microsoft Script Runtime Library (scrrun.dll): более предпочтительный
Автор: Oyger
Дата сообщения: 22.03.2007 12:42
Ребята. Вот какой вопрос. Хочу удалить в папке файлы, которые содержат определенный набор символов. На мой взгляд, это проще всего сделать через shell. Но вот в чем проблема: путь, гда лежат файлики, из русских символов состоит. А когда shell запускаешь, он русский не понимает - иероглифы пишет.
Соответственно вопрос: Как научить Shell понимать русские символы?

Спасибо.
Автор: AndVGri
Дата сообщения: 22.03.2007 16:46
Oyger
Пробуй через
Цитата:
Microsoft Script Runtime Library
- пректрасно понимает русский
Dim fso As New Scripting.FileSystemObject


If fso.FileExistis(sFilePath) Then fso.DeleteFile sFilePath

Можно несколько по другому, подключите Microsoft VSript Regular Expression им можно проверять файлы по маске, тогда:

Dim pFolder As Scripting.Folder
Dim pFile As Scripting.File

Set pFolder = fso.GetFolder(sFolderPath)
For Each pFile In pFolder.Files
'Проверяете и удаляете требуемые файлы
Next pFile
Автор: genf
Дата сообщения: 23.03.2007 11:08
Есть такая тема-существует база данных в Exel-вид:
Наименование позиции (МН105-1) её характеристики (прокат-масса, кг и арматура-масса, кг) Таких позиций около 150.
Необходима программа работающая по принципу - ввожу данные в таблицу Exel (наименование позции) и количество. Получаю данные, соотвествующие этой позиции в базе данных помноженные на количество.
Помогите советом. Как это сделать?
Автор: AndVGri
Дата сообщения: 23.03.2007 12:45
genf
А зачем Вам программа. Не проще ли воспользоваться ВПР?
на другом листе
в А1 пишите МН105-1, в В1 - количество, в С1 =ВПР(A1;Лист1!A2:C150;2; ЛОЖЬ)*B1 - получите значение по прокат-массе, аналогично в D1. Если использовать абсолютные ссылки в ВПР для диапазона базы или задать ей имя, то можно потом её раскопировать на несколько позиций

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Стоит ли переходить с Билдера на Делфи?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.