Excel VBA: Run-time error '1004'

6 отговора 188 прегледа
#1

Excel VBA: Run-time error '1004'

Това е кода:
Sub ClearCells
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Sheet1
Set ws2 = Sheet2
Dim i As Integer ' counter

For i = 1 To 2
If i = 1 Then
ws1.Range("E1:AZ204").Select ' select E1:AZ204 cells from Sheet 1
Else
ws2.Range("E1:AZ204").Select ' select E1:AZ204 cells from Sheet 2
End If
Selection.ClearContents
Next i


ws1 и ws2 са дефинирани по един и същ начин, командите са едни и същи и въпреки това при изпълнението на командата за ws2 (удебеления код) Error 1004 се появява докато при ws1 всичко е наред. Някакви идеи каква е причината?

N

Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.

Редактирано от HeДoДяЛKo на

Отговор
в отговор на HeДoДяЛKo #2

Re: Excel VBA: Run-time error '1004'

:)))
Баси странния код :)
Ето ти решението:

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Sheet1
Set ws2 = Sheet2

ws1.Activate ' Trqbva da aktivirash stranicata che da mojesh da izpolzvash .Range
ws1.Range("E1:AZ204").Select ' select E1:AZ204 cells from Sheet 1
Selection.ClearContents

ws2.Activate ' Trqbva da aktivirash stranicata che da mojesh da izpolzvash .Range
ws2.Range("E1:AZ204").Select ' select E1:AZ204 cells from Sheet 2
Selection.ClearContents

Отговор
в отговор на Гeoprи #3

Re: Excel VBA: Run-time error '1004'

Мерси много! Нов съм в VBA и не знаех че трябва да се активира sheet-a преди да се ползва range командата.

А за кода - не е толкова странен просто махнах доста от операторите вътре в цикъла понеже нямаха нищо общо с проблема и за да е по-ясен кода. А иначе си прав че така написан кода не прави много смисъл :).

N

Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.
Отговор
в отговор на HeДoДяЛKo #4

Re: Excel VBA: Run-time error '1004'

Добре, за кода разбрах :)

Само че и аз не знаех че трябва да се активира страницата преди да използваш .Range... Просто експериментирах и след втория опит се разбра че кода с .Range не се изпълнява на неизбрана страница - като избрах Sheet2 започна да ми дава грешка в първия ред и хоп - ето ти го решението :)

Отговор
в отговор на Гeoprи #5

re: още нещо

А знаеш ли как работят Мин и Мах функциите във VBA? Аз си мислех че ще работят както нормалните Excel-ски формули, например: A5= min(b5,c5), но май не е така. Конкретната команда която се мъча да накарам да тръгне е:

ws2.Cells(row, col).Value = Min(ws2.Cells(row - 2, col - 1).Value * ws2.Cells(4, 4).Value, ws2.Cells(8, 2).Value)
където ws2 e worksheet, а row, col са съответно номер на ред и колона в ws2.

Алтернативно един If оператор върши същата работа, но са четири реда код вместо един, а и скороста пада понеже този мин програмата го смята няколко стотин пъти.

N

Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.

Редактирано от HeДoДяЛKo на

Отговор
в отговор на HeДoДяЛKo #6

Re: re: още нещо

Да ти кажа честно, не знам за Min и Max функциии във VB :)
Това което трябва да направиш е да зададеш формулата на Excel в съответната клетка:

ws2.Cells(row,col).Value="=Min(A1;A2)"

Където A1 трябва да ти съдържа произведението на клетките (row-2,col-1) и (4,4 = D4)
А А2 ти е клетка (8,2 = H2)

Аналогично може да се направи и за останалите ws2.Cells(row,col)

Отговор
в отговор на Гeoprи #7

Re: re: още нещо

Мерси отново, само че този път му намерих колая сам. Кода по-долу бачка за мин- прави Д1= Мин(А1*Б1,С1):

ws2.Cells(row, col).Value = WorksheetFunction.Min(ws2.Cells(row + 2, col - 1).Value * ws2.Cells(3, 4).Value, ws2.Cells(8, 2).Value)


N

Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.
Отговор