Najdi forum

Celice v excellu

Pa sem spet jaz tu, enkrat po dolgem času in s problemom, s katerim si nisem nikoli mislil, da ga bom imel… z excellom.

Ali obstaja kakršnakoli preprosta možnost, da bi imelo več celic (po možnosti tudi na različnih listih, ampak znotraj enga fajla) isto vrednost, ki bi jo lahko spreminjali na katerikoli od celice pa bi se vrednost popravila tudi v vseh ostalih celicah s to vrednostjo. Zato uporaba funkcije odpade.

Upam, da kdo pozna rešitev in jo bi delil z menoj. Hvala.

Niko

Nič pametnega mi ne pade na misel.

Razen seved zdravega kmečkega načina, da pač ali
a) narediš list z izvirnimi vrednostmi, tam popravljaš, na ostalih listih pa se s formulo skicuješ nanje
b) se pač odločiš, kje boš tipkal vrednost in kje boš imel formule, ki se bodo sklicecale na izvirno vrednost. Dogovorili bi se, da kjer so formule, pač ne pretipkavaš.

Zanimiv problem…rešitev pa upam da kolkortoliko enostavna 🙂

Pomoje je edina varjanta rešit to z eventi workbooka in sheetov tako da loviš premike po celicah in vpise v tiste celice, ki jih je potrebno popravljat.

Zadeve se lotiš tako, da odpreš tvoj workbook in pritisneš Alt+F11 da prideš v Visual Basic Editor.
Pod VBAProject dodaš nov modul (desni klik –> Insert –> Module (priponka1)) in notri skopiraš tole kodo

Public tmpVrednost As String
Public DelamUpdate As Boolean

Public Function MojaCelica() As String
MojaCelica = tmpVrednost
DelamUpdate = False
End Function

Nato 2x klikneš na ThisWorkbook (priponka2) da se ti odpre Code za cel workbook. Notri skopiraj tole

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Formula = “=MojaCelica()” Then
DelamUpdate = True
Else
DelamUpdate = False
End If

End Sub

In nazadnje še za vsak Sheet na katerem imaš podatke klikni 2x na Sheet1, … (priponka3) da se ti odpre code in na vsakega, ki ga uporabljaš skopiraj tole

Private Sub Worksheet_Change(ByVal Target As Range)

If DelamUpdate = True Then
tmpVrednost = Target.Text
Target.Formula = “=MojaCelica()”
Application.CalculateFull
End If

End Sub

Kjerkoli sedaj želiš imeti to celico enostavno dodaš formulo MojaCelica() (najdeš jo pod User Defined) ali skopiraš v polje =MojaCelica()

Superca… stvar dela, kot švicarska ura.. edino, če je večje število teh celic, je verjetno treba za vsako različno vrednost izdelati ločene kode za vsako “mojoCelico” recimo MojaCelica1, MojaCelica2,… Je tako?

Tako nekak ja + dodatne spremenljivke tmpVrednost in DelamUpdate in dopolnitev kode na eventih

Public tmpVrednost As String
Public tmpVrednost1 As String
Public DelamUpdate As Boolean
Public DelamUpdate1 As Boolean

Public Function MojaCelica() As String
MojaCelica = tmpVrednost
DelamUpdate = False
End Function

Public Function MojaCelica1() As String
MojaCelica1 = tmpVrednost1
DelamUpdate1 = False
End Function

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Formula = “=MojaCelica()” Then
DelamUpdate = True
ElseIf Target.Formula = “=MojaCelica1()” Then
DelamUpdate1 = True
Else
DelamUpdate = False
DelamUpdate1 = False
End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If DelamUpdate = True Then
tmpVrednost = Target.Text
Target.Formula = “=MojaCelica()”
Application.CalculateFull
ElseIf DelamUpdate1 = True Then
tmpVrednost1 = Target.Text
Target.Formula = “=MojaCelica1()”
Application.CalculateFull
End If

End Sub

Tako nekak ja + dodatne spremenljivke tmpVrednost in DelamUpdate in dopolnitev kode na eventih

Public tmpVrednost As String
Public tmpVrednost1 As String
Public DelamUpdate As Boolean
Public DelamUpdate1 As Boolean

Public Function MojaCelica() As String
MojaCelica = tmpVrednost
DelamUpdate = False
End Function

Public Function MojaCelica1() As String
MojaCelica1 = tmpVrednost1
DelamUpdate1 = False
End Function

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Formula = “=MojaCelica()” Then
DelamUpdate = True
ElseIf Target.Formula = “=MojaCelica1()” Then
DelamUpdate1 = True
Else
DelamUpdate = False
DelamUpdate1 = False
End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If DelamUpdate = True Then
tmpVrednost = Target.Text
Target.Formula = “=MojaCelica()”
Application.CalculateFull
ElseIf DelamUpdate1 = True Then
tmpVrednost1 = Target.Text
Target.Formula = “=MojaCelica1()”
Application.CalculateFull
End If

End Sub

Forum je zaprt za komentiranje.

New Report

Close