29. september 2023 - 10:22Der er
8 kommentarer og 2 løsninger
VBA Double Click event
Jeg har et regneark med en pivottabel som en bruger benytter.
Pivottabellen består af en række summerede data
Bruger har så kunne dobbeltklikke på en sum hvorefter der oprettes et nyt Worksheet om min Workbook.
I første omgang har jeg behov for en makro som kan automatisere dette, således at hvergang brugeren dobbeltklikker på en celle i pivottabellen, så skal makroen :
1. Navngive Worksheet med det der står i celle B2 i det pågældende nye Worksheet. 2. Placere worksheet som det sidste / helt til højre i WorkBook
Placér denne VBA-kode i kodemodulet for Denne_projektmappe:
Public b_pvt As Boolean
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Dim var_pvt As Variant On Error Resume Next Set var_pvt = Target.PivotCell If Err.Number = 0 Then b_pvt = True End If On Error GoTo 0 End Sub
Private Sub Workbook_NewSheet(ByVal Sh As Object) If b_pvt Then Sh.Name = Sh.Cells(2, 2) With ThisWorkbook Sh.Move After:=.Sheets(.Sheets.Count) End With b_pvt = False End If End Sub
Hvad kunne du tænke dig, der skulle ske i tilfælde af en dublet? Det kunne eksempelvis være en besked om, at arket findes i forvejen, og at man kan vælge ja eller nej til at udskifte/opdatere arket. Hvis du kun tilføjer "On Error Resume Next", vil arket stå tilbage med navnet, som Excel har tildelt automatisk.
Den løsning jeg har nu er reelt i orden, men dit forslag med en besked om, at arket findes i forvejen, og at man kan vælge ja eller nej til at udskifte/opdatere arket er perfrkt :-)
Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim str_sh_name As String Dim sh_check As Worksheet If b_pvt Then str_sh_name = Sh.Cells(2, 2) On Error Resume Next Set sh_check = ThisWorkbook.Sheets(str_sh_name) On Error GoTo 0 If Not sh_check Is Nothing Then With Application .DisplayAlerts = False .EnableEvents = False .ScreenUpdating = False End With If MsgBox("Arket " & str_sh_name & " findes allerede" & vbNewLine & vbNewLine & _ "Vil du erstatte det eksisterende ark med det nye ark?", _ vbYesNo + vbQuestion, "Erstat ark?") = vbYes Then sh_check.Delete Sh.Name = str_sh_name Else Sh.Delete Set Sh = Nothing
End If With Application .DisplayAlerts = True .EnableEvents = True .ScreenUpdating = True End With Else Sh.Name = str_sh_name End If If Not Sh Is Nothing Then With ThisWorkbook Sh.Move After:=.Sheets(.Sheets.Count) End With End If b_pvt = False End If End Sub
Synes godt om
1 synes godt om dette
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.