Excel VBA: Run-time error '1004'
6 отговора
188 прегледа
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
Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.
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 на
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
Баси странния код :)
Ето ти решението:
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
Re: Excel VBA: Run-time error '1004'
Мерси много! Нов съм в VBA и не знаех че трябва да се активира sheet-a преди да се ползва range командата.
А за кода - не е толкова странен просто махнах доста от операторите вътре в цикъла понеже нямаха нищо общо с проблема и за да е по-ясен кода. А иначе си прав че така написан кода не прави много смисъл :).
N
Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.
А за кода - не е толкова странен просто махнах доста от операторите вътре в цикъла понеже нямаха нищо общо с проблема и за да е по-ясен кода. А иначе си прав че така написан кода не прави много смисъл :).
N
Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.
Re: Excel VBA: Run-time error '1004'
Добре, за кода разбрах :)
Само че и аз не знаех че трябва да се активира страницата преди да използваш .Range... Просто експериментирах и след втория опит се разбра че кода с .Range не се изпълнява на неизбрана страница - като избрах Sheet2 започна да ми дава грешка в първия ред и хоп - ето ти го решението :)
Само че и аз не знаех че трябва да се активира страницата преди да използваш .Range... Просто експериментирах и след втория опит се разбра че кода с .Range не се изпълнява на неизбрана страница - като избрах Sheet2 започна да ми дава грешка в първия ред и хоп - ето ти го решението :)
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
Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.
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 на
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)
Това което трябва да направиш е да зададеш формулата на 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)
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
Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.
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
Клан, клан недоклан
дран, дран недодран
дялан, дялан недодялан.