Aşağıdaki yaklaşım, VBA'da tanımlanan bir çalışma sayfası işlevinin başka bir hücrenin değerini ayarlamak için burada ve burada açıklanan geçici çözümü kullanır .
Özel işlev, genel değişkenlerde hedef hücrenin adresini ve bu hücrenin ayarlanacağı değeri depolar. Ardından, çalışma sayfası yeniden hesaplandığında tetiklenen bir makro genel değişkenleri okur ve hedef hücreyi belirtilen değere ayarlar.
Özel fonksiyonun kullanımı basittir:
=SetCellValue(target_cell, value)
burada target_cell
, çalışma bir hücre (örneğin, "A1") ya da bu tür bir referans olarak değerlendirilen bir ifade için bir dize başvurusudur. Bu, =B14
B14 değerinin "A1" olduğu gibi bir ifadeyi içerir . İşlev herhangi bir geçerli ifadede kullanılabilir.
SetCellValue
Değer başarıyla hedef hücreye yazılırsa 1, aksi takdirde 0 döndürür. Hedef hücrenin önceki içeriğinin üzerine yazılır.
Üç kod parçası gereklidir:
SetCellValue
kendini tanımlayan kod
- çalışma sayfası hesaplama olayı tarafından tetiklenen makro; ve
- Bunun geçerli bir hücre adresi
IsCellAddress
olduğundan emin olmak için bir yardımcı işlev target_cell
.
SetCellValue İşlevi için Kod
Bu kodun çalışma kitabına yerleştirilmiş standart bir modüle yapıştırılması gerekir. Modül seçilerek erişilen Visual Basic editörü, için menü aracılığıyla eklenebilir Visual Basic
gelen Developer
kurdele sekmesine.
Option Explicit
Public triggerIt As Boolean
Public theTarget As String
Public theValue As Variant
Function SetCellValue(aCellAddress As String, aValue As Variant) As Long
If (IsCellAddress(aCellAddress)) And _
(Replace(Application.Caller.Address, "$", "") <> _
Replace(UCase(aCellAddress), "$", "")) Then
triggerIt = True
theTarget = aCellAddress
theValue = aValue
SetCellValue = 1
Else
triggerIt = False
SetCellValue = 0
End If
End Function
Worksheet_Calculate Macro Code
Bu kod, kullanacağınız çalışma sayfasına özel koda dahil edilmelidir SetCellValue
. Bunu yapmanın en kolay yolu, Home
görünümdeki çalışma sayfasının sekmesini sağ tıklatmak , seçmek View Code
ve ardından kodu gelen düzenleyici bölmesine yapıştırmaktır.
Private Sub Worksheet_Calculate()
If Not triggerIt Then
Exit Sub
End If
triggerIt = False
On Error GoTo CleanUp
Application.EnableEvents = False
Range(theTarget).Value = theValue
CleanUp:
Application.EnableEvents = True
Application.Calculate
End Sub
IsCellAddress İşlevi için Kod
Bu kod, kodla aynı modüle yapıştırılabilir SetCellValue
.
Function IsCellAddress(aValue As Variant) As Boolean
IsCellAddress = False
Dim rng As Range ' Input is valid cell reference if it can be
On Error GoTo GetOut ' assigned to range variable
Set rng = Range(aValue)
On Error GoTo 0
Dim colonPos As Long 'convert single cell "range" address to
colonPos = InStr(aValue, ":") 'single cell reference ("A1:A1" -> "A1")
If (colonPos <> 0) Then
If (Left(aValue, colonPos - 1) = _
Right(aValue, Len(aValue) - colonPos)) Then
aValue = Left(aValue, colonPos - 1)
End If
End If
If (rng.Rows.Count = 1) And _
(rng.Columns.Count = 1) And _
(InStr(aValue, "!") = 0) And _
(InStr(aValue, ":") = 0) Then
IsCellAddress = True
End If 'must be single cell address in this worksheet
Exit Function
GetOut:
End Function