Programim dhe zhvillim, javascript, python, php, html

Parandalimi i hyrjeve të dyfishta në kolona të shumta

Unë jam duke përdorur këtë makro për të parandaluar përdoruesit që të futin hyrje të ngjashme brenda një spreadsheet. Kjo funksionon mirë në një kolonë të vetme.

Por si mund të shtoj të ngjashme në kolona të shumta (si kolona A, D dhe F). Çdo kolonë për të lejuar vetëm regjistrime unike. Ju lutem më ndihmoni

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Column <> 1 Or .Cells.Count > 1 Then Exit Sub
        If WorksheetFunction.CountIf(Columns(.Column), .Value) > 1 Then
            Application.DisplayAlerts = False
            .ClearContents
            Application.DisplayAlerts = True
            MsgBox "Record no. already exists!"
        End If
    End With
End Sub
25.01.2018


Përgjigjet:


1

Ju mund ta aplikoni këtë kod në një kolonë shtesë vetëm duke ndryshuar deklaratën tuaj if në kodin tuaj origjinal dhe duke lejuar një kolonë tjetër

If (.Column <> 1 And .Column <> 4) Or .Cells.Count > 1 Then Exit Sub 

mund të shtohen më shumë kolona me deklarata shtesë Dhe .Column <> xxx

If (.Column <> 1 And .Column <> 4 And .Column <> 6) Or .Cells.Count > 1 Then Exit Sub 
25.01.2018

2

Unë e kam modifikuar kodin tuaj brenda nëse dhe e kam vendosur në procedurë të veçantë në modulin normal:

Sub ClearCont(cl As Range)
    Application.EnableEvents = False
    cl.ClearContents
    Application.EnableEvents = True
    MsgBox "Record no. already exists!"
    'cl.Select
End Sub

Pastaj, kodi nën fletën e punës duhet të jetë i tillë:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Dim col As Range

    With Target.Parent
        Set rng = Union(.Columns(1), .Columns(4), .Columns(6))
    End With


    With Target
        For Each col In rng.Columns
            If WorksheetFunction.CountIf(col, .Value) > 0 And col.Column <> .Column Then
                ClearCont Target
            ElseIf WorksheetFunction.CountIf(col, .Value) > 1 Then
                ClearCont Target
            End If
        Next col
    End With
End Sub

Shprehja

Set rng = Union(.Columns(1), Columns(4), Columns(6))

zgjedh kolonat A, D dhe F, mund ta modifikoni për të shtuar më shumë kolona.

EDIT: Siç sugjeroi Peh më poshtë, unë kam ndryshuar ActiveSheetTarget.Parent. Unë gjithashtu kam komentuar cl.Select në nënprogramin ClearCont. Mendoj se kjo linjë kodi do të ishte e dobishme nëse vlerat shtypen me dorë direkt në fletën e punës - përdoruesi do të kthehej në qelizën e pyetur. Megjithatë, nëse vlerat futen sipas formës për shembull, më mirë do ta lini atë të komentuar ose ta fshini.

25.01.2018
  • ActiveSheet nuk është ide e mirë kjo mund të jetë një fletë tjetër. Përdorni Target.Parent për të marrë fletën ku ndodhet Target. Gjithashtu cl.Select duhet të shmanget. 25.01.2018
  • Zakonisht Worksheet_Change (ByVal Target As Range) punon në fletën aktive. Duhet të bëni përpjekje të veçanta për të modifikuar fletën joaktive. 25.01.2018
  • Jo domosdoshmërisht. Nëse ju p.sh. ekzekutoni një makro VBA që ndryshon diçka p.sh. në Sheet1, atëherë Sheet2 mund të jetë akoma ai aktiv. Prandaj, unë thjesht sugjeroj të zëvendësoni ActiveSheet me Target.Parent që e rregullon këtë problem lehtësisht dhe nuk do të hasni në ndonjë problem të çuditshëm. Ose hiqni With ActiveSheet sepse atëherë .Columns gjithmonë i referohet Target.Parent si parazgjedhje brenda ngjarjes Worksheet_Change. 25.01.2018
  • ok, e kuptoj pikën tuaj. Por unë do të konsideroja cl.select në makronë e parë, në varësi të mënyrës se si do të përdoret spreadsheet. Shiko modifikimin tim. 25.01.2018
  • Po, në këtë rast .Select mund të ketë kuptim, thjesht nuk e pashë se si mund të ishte e dobishme në fillim. 25.01.2018
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..