SORU
23 Mayıs 2012, ÇARŞAMBA


Excel VBA makroları Seçin kullanmaktan kaçınmak

Excel .Select kullanarak anlaşılabilir duyma konusunda çok VBA makroları duydum, ama bunu kullanarak önlemek için nasıl emin değilim. Benim kod Select işlevleri yerine değişkenleri kullanma şansım olsaydı daha fazla yeniden kullanılabilir olacağını buluyorum. Ancak, işler (ActiveCell vb. gibi) ifade etmek için nasıl emin değilim değilse Select kullanarak.

this article on ranges this example on the benefits of not using select bulduk ama bir şey bulamıyorumnasıl?

CEVAP
23 Mayıs 2012, ÇARŞAMBA


Seç önlemek için bazı örnekler

Kullanım Dim'd değişkenleri

Dim rng as Range

Set istenen dizi değişkeni. Tek hücreli bir alanı ifade etmek için birçok yol vardır

Set rng = Range("A1")
Set rng = Cells(1,1)
Set rng = [A1]
Set rng = Range("NamedRange")

ya da çok hücreli bir dizi

Set rng = Range("A1:B10")
Set rng = Range(Cells(1,1), Cells(2,10))
Set rng = [A1:B10]
Set rng = Range("AnotherNamedRange")

Tüm yukarıdaki örnekler üzerinde hücreleri bakınetkin sayfa. Özellikle yalnızca etkin sayfayı çalışmak istemiyorsan, daha iyi Worksheet bir değişken de Dim

Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Set rng = ws.Cells(1,1)

Yine, bu ifade ederetkin çalışma kitabıyani siz burada çok açık..

Dim wb As Workbook
Set wb = Application.Workbooks("Book1")
Set rng = wb.Worksheets("Sheet1").Range("A1")

Senin için aralıklar SubFunction'In Dizi değişkenleri olarak

Sub ClearRange(r as Range)
    r.ClearContents
    '....
End Sub

Sub MyMacro()
    Dim rng as Range
    Set rng = [A1:B10]
    ClearRange rng
End Sub

Ayrıca değişkenler için Yöntemler (Find Copy gibi) uygulamak gerekir

Dim rng1 As Range
Dim rng2 As Range
Set rng1 = [A1:A10]
Set rng2 = [B1:B10]
rng1.Copy rng2

Eğer bir hücre aralığı üzerinde döngü genellikle daha iyidir (daha hızlı) değişken bir dizi için Aralık değerleri ilk kopya ve üzerinde döngü için

Dim dat As Variant
Dim rng As Range
Dim i As Long

Set rng = [A1:A10000]
dat = rng.Value  ' dat is now array (1 to 10000, 1 to 1)
for i = LBound(dat, 1) to UBound(dat, 1)
    dat(i,1) = dat(i,1) * 10 'or whatever operation you need to perform
next
rng.Value = dat ' put new values back on sheet

Bu olası şey için küçük bir başlangıçtı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • Garrett Müller

    Garrett Mül

    26 HAZİRAN 2009
  • Schmittastic Jr.

    Schmittastic

    19 Mart 2013