Stránka 1 z 1

Excel - zákaz vkládání

Napsal: 19 čer 2014 08:26
od Karbos
Ahoj,
neznáte způsob, jak zakázat do zamčeného listu vkládat data přes clipboard? Jde mi o to, že buňky, do kterých uživatel nemá co zasahovat zamknu. To je OK. Ale protože je línej, tak si do buněk, do kterých psát má kopíruje např. čísla zákazníka z různých jiných programů, wordu,.... a rozhasí tím formát cíle podle formátu zdroje a v lepším případě na to zareagují nastavené vzorce chybou "#REF!". Tomu chci zabránit a chtěl bych povolit pouze přímý zápis do buňky.

Díky

Re: Excel - zákaz vkládání

Napsal: 19 čer 2014 17:50
od cmuch
Tak zakázat to nepůjde nebo o tom nevím jak.
Nevím kolik je buněk do kterých má někdo zapisovat nebo jak často se to děje.
Takže buď když někdo klikne do buňky tak naněj vyskočí Inputbox nebo formulář a pak vstupní údaj zpracuješ jak potřebuješ
nebo je tam nech zapsat a buňku makrem naformátuj tak jak potřebuješ.

Re: Excel - zákaz vkládání

Napsal: 20 čer 2014 17:10
od cmuch
Tak to lze, trochu jsem hledal a zkoušel.

Pokusy jsou v příloze.
To co je pro tebe tak je v modulu ThisWorkbook

nebo toto si tam zkopíruj

Kód: Vybrat vše

Private Sub Workbook_BeforeClose(Cancel As Boolean)

  'reset vypnuti kontroly stisku klaves (ctrl+v)
  Application.OnKey "^v"
End Sub

Private Sub Workbook_Open()

  MsgBox "V tomto sesite je zakazano vkladat pres clipboard !!", vbInformation, "Oznameni"
  'zakazani stisku klaves (ctrl+v)
  Application.OnKey "^v", ""

End Sub

Re: Excel - zákaz vkládání

Napsal: 24 čer 2014 11:57
od Karbos
Tohle je super, funguje to na CTRL + V, ale když klikneš do buňky pravím tlačítkem a dáš vložit tak to jde.

Re: Excel - zákaz vkládání  Vyřešeno

Napsal: 27 čer 2014 19:35
od cmuch
Tak pak si dej do listu kde chceš aby to nešlo tyto makra.
Jen změň dle sebe oblast bigRange v obouch makrech.

Kód: Vybrat vše

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

  Dim bigRange As Range, isect As Range
 
  'az 30 oblasti kam se nema dat kliknout
  Set bigRange = Application.Union(Range("A5"), Range("B7:C78"), Range("j7:j78"))

  Set isect = Application.Intersect(bigRange, Target)

  If Not isect Is Nothing Then
    MsgBox "Nelze", vbCritical
    Cancel = True
  Else
    Cancel = False
  End If
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

  Dim bigRange As Range, isect As Range
 
    'az 30 oblasti kam se nema dat kliknout
    Set bigRange = Application.Union(Range("A5"), Range("B7:C78"), Range("j7:j78"))

    Set isect = Application.Intersect(bigRange, Target)

    If Not isect Is Nothing Then
      MsgBox "Nelze", vbCritical
      Cancel = True
    Else
      Cancel = False
  End If
End Sub