макрос в Excel
....
Range("H128:H135").FormulaR1C1 = "N/A"
.....
И теперь, если добавить новую строку на лист, то макрос летит. Что делать?
Я в макросе пишу
....
Range("H128:H135").FormulaR1C1 = "N/A"
.....
И теперь, если добавить новую строку на лист, то макрос летит. Что делать?
Что-то у меня ничего не летит. Пиши подробнее.
Что-то у меня ничего не летит. Пиши подробнее.
Ну как не летит?
Там же смещение на одну строчку происходит.
Ну как не летит?
Там же смещение на одну строчку происходит.
Ага, понятно что тебе надо.
Есть много способов. Какой из них оптимальный, надо выбирать в зависимости от назначения твоей программы.
Вот, например, один из них:
1. Присваиваешь нужному диапазону какое-нибудь имя (для этого в самом Экселе выделяешь его, и в поле слева от строки формул (там изначально будет написан адрес начальной ячейки твоего дипазона) вписываешь что-нибудь типа "MyRange").
2. В программе пишешь
Range("MyRange").FormulaR1C1 = "N/A"
А другие способы?
У меня 100 ячеек, на всех мне фантазии не хватит
:)
[QUOTE]Originally posted by Cutty Sark
А другие способы?
У меня 100 ячеек, на всех мне фантазии не хватит
:)
Возьми другой рабочий лист, скроешь его потом, на нём создашь в фиксированных ячейках формулы типа =СУММ(H128:H135). А когда понадобится адрес, возьмёшь эти ячейки (они никуда не денутся), узнаешь у них .Formula, отбросишь "=SUM(" в начале и ")" в конце. Получишь адрес.
Если это тоже по каким-то причинам не подходит, расскажи, что у тебя за задача поподробнее.
Да просто надо значения ячеек автоматически заполнять, а я только знаю указанным способом. А документ постоянно обновляется, добавляются новые строки и получается, что абсолютная адресация в макросе на ячейки не подходит. А листы прятать тоже вроде нельзя.
Подожди-ка, а чем тебе не подходит способ:
------
Возьми другой рабочий лист, скроешь его потом, на нём создашь в фиксированных ячейках формулы типа =СУММ(H128:H135). А когда понадобится адрес, возьмёшь эти ячейки (они никуда не денутся), узнаешь у них .Formula, отбросишь "=SUM(" в начале и ")" в конце. Получишь адрес.
------
Тем что "листы прятать тоже вроде нельзя"?
А почему нельзя. Ты его сделаешь xlVeryHidden, его кроме тебя никто не найдёт :)
В макросе у тебя будет абсолютная адресация на вспомогательные ячейки, они никуда не денутся.
А формулы в этих ячейках будут сами меняться при вставлениях-удалениях на твоём основном листе.
В общем, кончай темнить, выкладывай подробно что там у тебя за задача. Если стесняешься прям вот так при всём честном народе, мой е-мейл найдёшь в профайле. :D
Подожди-ка, а чем тебе не подходит способ:
------
Возьми другой рабочий лист, скроешь его потом, на нём создашь в фиксированных ячейках формулы типа =СУММ(H128:H135). А когда понадобится адрес, возьмёшь эти ячейки (они никуда не денутся), узнаешь у них .Formula, отбросишь "=SUM(" в начале и ")" в конце. Получишь адрес.
------
Тем что "листы прятать тоже вроде нельзя"?
А почему нельзя. Ты его сделаешь xlVeryHidden, его кроме тебя никто не найдёт :)
В макросе у тебя будет абсолютная адресация на вспомогательные ячейки, они никуда не денутся.
А формулы в этих ячейках будут сами меняться при вставлениях-удалениях на твоём основном листе.
В общем, кончай темнить, выкладывай подробно что там у тебя за задача. Если стесняешься прям вот так при всём честном народе, мой е-мейл найдёшь в профайле. :D
Попробуй вот это:
'<--- Code Begin
Option Explicit
Sub FillTheseStupidCells()
Dim stActiveSheet As String: stActiveSheet = ActiveSheet.Name
Dim stTmpString As String: stTmpString = "N/A"
Dim a As Object
Dim c As Object
'setting a requiered Range of Cells
Set a = Sheets(stActiveSheet).Range("H128:H135")
'You may select this range if it's necessary
'a.Select
'fill it up
For Each c In a
If c.Value <> stTmpString Then
c.Value = stTmpString
End If
Next c
End Sub
'<--- Code End
С бестами и регардами,
Алекс
Ага, понятно что тебе надо.
Есть много способов. Какой из них оптимальный, надо выбирать в зависимости от назначения твоей программы.
Вот, например, один из них:
1. Присваиваешь нужному диапазону какое-нибудь имя (для этого в самом Экселе выделяешь его, и в поле слева от строки формул (там изначально будет написан адрес начальной ячейки твоего дипазона) вписываешь что-нибудь типа "MyRange").
2. В программе пишешь
Range("MyRange").FormulaR1C1 = "N/A"
Точно так и есть.
Только лучше присваивать изначально 2 имени:
TopLeftCell -- верхняя левая клетка диапазона и
BottomRightCell -- нижняя правая клетка.
'<--- Code Begin
Sub Dura()
Dim a As Object
'as the 1st in the Workbook: Menu->Insert->Name->Define
'
'TopLeftCell
'BottomRightCell
'
Application.Goto Reference:="TopLeftCell:BottomRightCell"
Set a = Selection
End Sub
'<--- Code End
После этого сколько угодно строчек добавляй/вырезай, а результатом будет искомый диапазон.
С бестами и регардами,
Алекс