Ответить Создать тему

Трабл VBA Excel , не могу присвоить значение ячекам

Теги: VBA, EXCEL
s.h.a.n.s.
post Apr 12 2010, 15:11 
Отправлено #1


Активный

Сообщений: 1 032



Здравствуйте.
Появилась необходимость научиться программировать на VBA, в частности в Excele. Практического опыта работы с VBA нету.
Так вот, укажите, пожалуйста, на ошибку в цикле: не могу присвоить значение ячейкам. Два варианта попробывал, оба не работаю =(
1
Исходный код

Sub TableBred()
   
   Dim r As Integer ' row
   Dim c As Integer ' coll
   Dim s As String   ' название ячейки формата R1C1

   Dim book As String
   Dim sheet As String
   
   book = Application.ActiveWorkbook.Name
   sheet = Application.ActiveSheet.Name

   Workbooks(book).Activate
 
   
   
   With Application.Workbooks.Item("ST.xls")
        Worksheets(sheet).Activate
   
   For c = 9 To 15
       For r = 7 To 13
           s = "R" + LTrim(Str(r)) + "C" + LTrim(Str(c))
         [B]  Sheets(sheet).Range(s).Value = Str(10)[/B]

       Next r
   Next c
   End With
End Sub

Run-time error '1004':
Application-defined or object-defined error

2.
Исходный код

   book = Application.ActiveWorkbook.Name
   sheet = Application.ActiveSheet.Name

   Workbooks(book).Activate      
   With Application.Workbooks.Item("ST.xls")
        Worksheets(sheet).Activate
   
   For c = 9 To 15
       For r = 7 To 13
           s = "R" + LTrim(Str(r)) + "C" + LTrim(Str(c))
          [B] Range(s) = 10[/B]
       Next r
   Next c
   End With
   MsgBox (s)

Run-time Error '1004':
Method 'Range' of object '_Global' failed

Что нитак никак не пойму.

Сообщение отредактировал Snowm@n - Apr 10 2011, 14:56
Profile CardPM
  0/0  
s.h.a.n.s.
post Apr 12 2010, 15:42 
Отправлено #2


Активный

Сообщений: 1 032



Хех, разобрался (долго голову ломал):
Исходный код
sr = "R" + LTrim(Str(R))
st = "C" + LTrim(Str(C))
Sheets(sheet).Range(sr,st).Value = Str(10)
Мда, модераторы извиняйте

Сообщение отредактировал Snowm@n - Apr 13 2010, 19:22
Profile CardPM
  0/0  
salex
post Apr 12 2010, 16:37 
Отправлено #3


полный превед!

Сообщений: 16 661
Из: Новочебоксарск



Profile CardPM
  0/0  
s.h.a.n.s.
post Apr 12 2010, 17:05 
Отправлено #4


Активный

Сообщений: 1 032



salex, спасибо, хех так намного удобнее:

Исходный код
  For c = 9 To 9 + n
       For r = 7 To 7 + n
           Cells(c, r).Value = 10
       Next r
   Next c

Сразу чистенько как-то стало smile.gif
VBA приятненький, самое то если необходимо какую-нибудь нестандартную функцию добавить в Excele.

Сообщение отредактировал s.h.a.n.s. - Apr 12 2010, 17:40
Profile CardPM
  0/0  
Snowm@n
post Apr 13 2010, 01:42 
Отправлено #5


O_o

Сообщений: 1 037



Цитата(s.h.a.n.s. @ Apr 12 2010, 18:05)
VBA приятненький,
*
но медлененький smile.gif В свое время сильно занимался автоматизацией Office, большие таблицы очень долго генерируются.


--------------------
Developer -> Lead Developer -> Lead Architect -> ... ?
Profile CardPM
  0/0  
s.h.a.n.s.
post Apr 13 2010, 10:42 
Отправлено #6


Активный

Сообщений: 1 032



Еще вопрос:
как программно (с использованием VBA) в ячейку ввести две строки?
Примерный вид:
_________
| 105 | 55 |
| 8.3 | 1.6 |
|____|____|
| 407 | 45 |
| 9.6 | 1,4 |
|____|____|


При ручном вводе это делается через комбинацию Alt+Enter
А как сделать это через VBA?

Думал с помощью SendKeys, только непонятно в каком порядке прописать клавиши и как ввести данные. huh.gif

Сообщение отредактировал s.h.a.n.s. - Apr 13 2010, 10:48
Profile CardPM
  0/0  
Snowm@n
post Apr 13 2010, 12:03 
Отправлено #7


O_o

Сообщений: 1 037



Цитата(s.h.a.n.s. @ Apr 13 2010, 11:42)
При ручном вводе это делается через комбинацию  Alt+Enter
А как сделать это через VBA?
*
Это делается вот так
Исходный код
Cells(1, 1) = "105" & Chr(10) & "8.3"


--------------------
Developer -> Lead Developer -> Lead Architect -> ... ?
Profile CardPM
  0/0  
s.h.a.n.s.
post Apr 13 2010, 12:24 
Отправлено #8


Активный

Сообщений: 1 032



Snowm@n, благодарю smile.gif
Действительно, все гениальное просто smile.gif
Profile CardPM
  0/0  
gentos
post Apr 19 2010, 09:50 
Отправлено #9


Эксперт

Сообщений: 771
Из: Чебоксары



Цитата(s.h.a.n.s. @ Apr 13 2010, 13:24)
Snowm@n, благодарю  smile.gif
Действительно, все гениальное просто  smile.gif
*

А вообще, очень удобно смотреть код макроса в офисе, то есть начинаешь записывать макрос, делаешь вручную те действия, которые необходимо сделать твоей программе, завершаешь макрос, смотришь VBA код макроса.
В свое время я так для бухов генерацию отчетов писал, зная VBA очень условно.
smile.gif

--------------------
Я не голосую за ЕдРо
Profile CardPM
  0/0  
s.h.a.n.s.
post Apr 25 2010, 22:52 
Отправлено #10


Активный

Сообщений: 1 032



Цитата(gentos @ Apr 19 2010, 10:50)
А вообще, очень удобно смотреть код макроса в офисе, то есть начинаешь записывать макрос, делаешь вручную те действия, которые необходимо сделать твоей программе, завершаешь макрос, смотришь VBA код макроса.
В свое время я так для бухов  генерацию отчетов писал, зная VBA очень условно.
smile.gif
*

Совет хороший.
Только в таком случае работа с ячейками происходит при помощи оператора Range("C10"). Мне нужно чтобы ячейки менялись в цикле, и не совсем понятно как например адрес вида "С10" ("C"-столбец, "10"-строка) менялись при помощи переменных целого типа. Надеюсь понятно написал smile.gif
Profile CardPM
  0/0  

ОтветитьTopic Options
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
Быстрый ответ
Кнопки кодов
 Расширенный режим
 Нормальный режим
    Закрыть все тэги


Открытых тэгов: 
Введите сообщение
Смайлики
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
         
Показать все

Опции сообщения