< návrat zpět
MS Excel
Téma: Application.ScreenUpdating a MsgBox
Zaslal/a Rop 23.8.2021 16:33
Vážení,
používám VBA, kde kopíruji data z jednoho sešitu do druhého.
Na začátku procedury mám kód:
Application.ScreenUpdating = False
Pro kopírování používám trochu humpolácký kód:
Windows(stary).Activate
Sheets("pomocný").Select
Range("C6:D6").Select
Selection.Copy
Windows(novy).Activate
Sheets("pomocný").Select
Range("B6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
V jedná části kopírování potřebuju nechat uživatele vybrat, zda něco chce kopírovat či nikoliv.
i = MsgBox("Zkopírovat data na listu Počet obyvatel?", vbYesNo)
If i = vbYes Then
atd...
Ovšem od této chvíle se další kopírování chová, jako by byla hodnota Application.ScreenUpdating = True
Dokonce i když znovu do kódu za MsgBox přidám příkaz Application.ScreenUpdating = False, tak stejně při kopírování se viditelně přepínají okna (prostě to bliká).
Neměli byste nějaký nápad, jak to vyřešit?
Díky.
Stalker(23.8.2021 17:09)#051124 Nepoužívat "humpolácký kód" a SELECT.
citovat
Rop(23.8.2021 18:31)#051125 To je odpověď, kterou jsem čekal.
Takže co místo toho mám používat, aby z jednoho souboru do druhého to z buňky, kde je vzorec, vzalo jen hodnotu?
citovat
Stalker(23.8.2021 19:01)#051126 Např. na začátku kódu načíst jednotlivé soubory (sešity) do proměnných a v kódu pracovat s nimi.
To samé si dá přece udělat i s tou částí, jak si má uživatel vybrat. Na začátku se zeptám a pak se podle toho v kódu zařídím.
citovat
Ak je otvorený:
Sub Kopiruj()
Dim Stary As String
Stary = "Starý zdroj.xlsx"
If MsgBox("Zkopírovat data na listu Počet obyvatel?", vbQuestion + vbYesNo) = vbYes Then
ThisWorkbook.Worksheets("pomocný").Range("B6:C6").Value = Workbooks(Stary).Worksheets("pomocný").Range("C6:D6").Value
'Else 'Podľa potreby
' Exit Sub
End If
End Sub
a ak je zatvorený:
Sub Kopiruj2()
Dim Stary As String
Stary = "='E:\[Starý zdroj.xlsx]pomocný'!C6"
If MsgBox("Zkopírovat data na listu Počet obyvatel?", vbQuestion + vbYesNo) = vbYes Then
With ThisWorkbook.Worksheets("pomocný").Range("B6:C6")
.Formula = Stary
.Value = .Value
End With
'Else 'Podľa potreby
' Exit Sub
End If
End Sub
dá sa to nakombinovať rôzne.
citovat
Rop(24.8.2021 8:42)#051128 Díky. A ještě jak přetvořit kopírovací funkci, která kopíruje vzorečky?
Worksheets("Vstupní data").Select
Range("A6:B6").Select
Selection.Copy
Range("A7:A99").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
citovat
elninoslov(24.8.2021 10:43)#051129 Sub Kopiruj_vzorce()
With Worksheets("Vstupní data")
.Range("A6:B99").Formula = .Range("A6:B6").Formula
End With
End Subcitovat