Bir Hücre değiştirildiğinde VBA prosedürünün excel'de çalıştırılmasının temelleri


2

Benim SQL Server benim excel veri bazı göstermeye çalışıyorum. 3 tabloya isabet eden ve bir parametre kullanan bir sorguya sahip olduğum için VBA kullanmam gerekecek.

VBA'yı "otomatik çalıştırma" konumuna nasıl getireceğimi bilmiyorum. Excel'de normal bir sorgu yapmak, sayfa açıkken çalıştırmak veya otomatik tazeleme yapmak gibi seçenekler sunar. Bir parametre eklediğim için, parametrenin Subiçinde bulunduğu hücrenin değerini değiştirdiğimde my'in çalışmasını istiyorum.

Herhangi bir fikir?

Yanıtlar:


3

Sayfa sekmesine sağ tıklayın ve Kodu Görüntüle'yi seçin. Sayfa modülüne böyle bir kod koyun

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$A$1" Then 'only run if the correct cell is changed
        MySub 'this is the name of your vba procedure
    End If

End Sub

Bu alt, o sayfadaki bir hücre değiştiğinde çalışır. Değiştirilen hücre A1 ise (verilerinize uyacak şekilde değiştirin), o zaman MySub adlı standart bir modüldeki prosedür (uygunluğa göre değiştirin) çalıştırılır.

Neden VBA kullanmanız gerektiğinden emin değilim. İstediğiniz kadar tablodan çekmek için SQL yazabiliyor ve bir parametre ekliyor gibi görünüyorsunuz.


Karmaşık sorgular Excel'de parametreler kullanamaz. Microsoft'un yapmak istediğini düşünmediği şeylerden sadece biri.
Vaccano


0

Netlik açısından, parametrenin CELL A1'de olduğunu ve VBA kodunun sonucunun CELL A2'de listelendiğini söyleyeceğim.

VBA modülünde

Function Test1(strText as string) as string
   Test1 = strText & "15"
End Function

A2 hücresine denklemi yerleştirin "= Test1 (A1)
A1 hücresine değiştirmek istediğiniz parametreyi yerleştirin

Çalıştığını doğrularım ve sonra A1 değiştiğinde kodun çalışmasını sağlamak için diğer VBA kodunuzu yerleştirin.


0

dkusleika'nın cevabı en iyi görünüyor; Bir aralık için aynı şeyi yapmak istiyorsanız işler biraz daha zorlaşır. Belirtilen alandaki bir hücre değiştirildiğinde, aşağıdaki kod ortaya çıkacaktır.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim woArea As Range, isect As Range
Set woArea = Sheet1.Range("A1:A500")
Set isect = Application.Intersect(Target, woArea)

If isect Is Nothing Then
    ' Nothing happens
Else
    ' Stuff you want to happen goes here
End If

End Sub
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.