Flora Edwards
asked on
VBA Kill file but send it to recycle bin, Not permanently delete it.
Hallo,
i have been using Kill FileName method to delete the file. but i need help with moving it to recycle bin instead of complete kill.
i found this link, http://www.cpearson.com/excel/recycle.aspx
but i do not know how to implement it.
i have excel 64bit and i do not want any prompt to warn me that file is going to recycle bin.
thanks.
i have been using Kill FileName method to delete the file. but i need help with moving it to recycle bin instead of complete kill.
i found this link, http://www.cpearson.com/excel/recycle.aspx
but i do not know how to implement it.
i have excel 64bit and i do not want any prompt to warn me that file is going to recycle bin.
thanks.
ASKER
MacroShadow,
thanks so very much.
i tried this by myself first, but some parts of the code show red in my excel. i googled and it says not compatible with excel 64bit. any idea how to fix that?
thanks so very much.
i tried this by myself first, but some parts of the code show red in my excel. i googled and it says not compatible with excel 64bit. any idea how to fix that?
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
the link took me somewhere else shopping site.
i googled downloaded the win32API file from msft and then could not find this PathIsNetworkPath one in it.
i googled downloaded the win32API file from msft and then could not find this PathIsNetworkPath one in it.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Does this work? It's very old VB6 code.
Option Explicit
Private Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
Private Const FOF_CREATEPROGRESSDLG As Long = &H0
Private Enum WhatDoIDoWithIt
RemoveToRecycle = 1
Remove = 2
End Enum
Private Function RemoveFile(FileName As String, How As WhatDoIDoWithIt) As Boolean
Dim FileOperation As SHFILEOPSTRUCT
Dim RetCode As Long
On Error GoTo RemoveError
With FileOperation
.wFunc = FO_DELETE
.pFrom = FileName
' The FOF_CREATEPROGRESSDLG is optional. It pops up the message
' box asking if you want to send the file to the recycle bin,
' or if you are sure you want to delete it.
If How = RemoveToRecycle Then
.fFlags = FOF_ALLOWUNDO + FOF_CREATEPROGRESSDLG
Else
.fFlags = FO_DELETE + FOF_CREATEPROGRESSDLG
End If
End With
RetCode = SHFileOperation(FileOperation)
If RetCode <> 0 Then
RemoveFile = False
Else
RemoveFile = True
End If
Exit Function
RemoveError:
RemoveFile = False
MsgBox Err & " " & Error
End Function
Private Sub cmdRecycle_Click()
' Send it to the recycle bin
RemoveFile "c:\test.txt", RemoveToRecycle
End Sub
Private Sub cmdRemove_Click()
' Delete it entirely, as with Kill
RemoveFile "c:\test.txt", Remove
End Sub
You can use WMI to get the SID.
Examples in this article:
https://blogs.technet.microsoft.com/heyscriptingguy/2004/12/03/how-can-i-determine-the-sid-for-a-user-account/
Examples in this article:
https://blogs.technet.microsoft.com/heyscriptingguy/2004/12/03/how-can-i-determine-the-sid-for-a-user-account/
Where did you get that code, Martin?
Where did you get that code, Martin?Too long ago for me to remember.
ASKER
thanks aikimark and Martin. i could not make this work in Excel 64Bit. now, i hate 64 bit any code i find, is not compatible with 64bit.
can't you instantiate FileSystemObject and WMI objects in your environment?
can't you instantiate FileSystemObject and WMI objects in your environment?
ASKER
ASKER
aikimark, excuse my ignorance, but how can instantiate it? where do i get the code?
why every EE link i am clicking takes me to http://www.viglink.com/shopMaybe a virus?
ASKER
it is only happening with any link inside EE. maybe EE is infected with virus?
set oFS = CreateObject("scripting.filesystemobject")
ASKER
aikimark,
i tried with this, but it states invalid onject path. on Set objAccount
i tried with this, but it states invalid onject path. on Set objAccount
Sub test()
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objAccount = objWMIService.Get("Win32_UserAccount.Name='kenmyer',Domain='FLORA-JJDNF541")
MsgBox objAccount.SID
End Sub
ASKER
i can use this set oFS = CreateObject("scripting.fi lesystemob ject")
it is only happening with any link inside EE. maybe EE is infected with virus?I clicked the link in aikimar's post ID 421305134 and it worked as expected.
ASKER
Martin,
you right click on the link then
you paste it on notepad then you get the
https://redirect.viglink.com/?format=go&jsonp=vglnk_149450726387615&key=c7e3cc67cf9c9844a05ec4b1326edddd&libId=j2kf05f401011sl2000DLiuot0ncs&loc=https%3A%2F%2Fwww.experts-exchange.com%2Fquestions%2F29021967%2FVBA-Kill-file-but-send-it-to-recycle-bin-Not-permanently-delete-it.html%3Fanchor%3Da42130595%26notificationFollowed%3D188933050%23a42130595&v=1&out=https%3A%2F%2Fblogs.technet.microsoft.com%2Fheyscriptingguy%2F2004%2F12%2F03%2Fhow-can-i-determine-the-sid-for-a-user-account%2F&ref=https%3A%2F%2Fwww.experts-exchange.com%2Fquestions%2F29022018%2Fcan-this-macro-be-converted-to-sub-procedure.html&title=VBA%20Kill%20file%20but%20send%20it%20to%20recycle%20bin%2C%20Not%20permanently%20delete%20it.&txt=https%3A%2F%2Fblogs.technet.microsoft.com%2Fheyscriptingguy%2F2004%2F12%2F03%2Fhow-can-i-determine-the-sid-for-a-user-account%2F
not sure why the redirect goes via redirect.viglink.com
you right click on the link then
you paste it on notepad then you get the
https://redirect.viglink.com/?format=go&jsonp=vglnk_149450726387615&key=c7e3cc67cf9c9844a05ec4b1326edddd&libId=j2kf05f401011sl2000DLiuot0ncs&loc=https%3A%2F%2Fwww.experts-exchange.com%2Fquestions%2F29021967%2FVBA-Kill-file-but-send-it-to-recycle-bin-Not-permanently-delete-it.html%3Fanchor%3Da42130595%26notificationFollowed%3D188933050%23a42130595&v=1&out=https%3A%2F%2Fblogs.technet.microsoft.com%2Fheyscriptingguy%2F2004%2F12%2F03%2Fhow-can-i-determine-the-sid-for-a-user-account%2F&ref=https%3A%2F%2Fwww.experts-exchange.com%2Fquestions%2F29022018%2Fcan-this-macro-be-converted-to-sub-procedure.html&title=VBA%20Kill%20file%20but%20send%20it%20to%20recycle%20bin%2C%20Not%20permanently%20delete%20it.&txt=https%3A%2F%2Fblogs.technet.microsoft.com%2Fheyscriptingguy%2F2004%2F12%2F03%2Fhow-can-i-determine-the-sid-for-a-user-account%2F
not sure why the redirect goes via redirect.viglink.com
ASKER
aikimark,
i trying using this below code, and it runs but it does not send the file to recycle
i trying using this below code, and it runs but it does not send the file to recycle
Sub test()
FileToToss ("C:\Users\flora\Downloads\22.xlsx")
End Sub
Sub FileToToss(strFileToToss As String)
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(strFileToToss) Then
WScript.Quit
End If
If fso.GetExtensionName(strFileToToss) = "exe" Then
WScript.Quit
End If
strFolderParent = fso.GetParentFolderName(strFileToToss)
strFileName = fso.GetFileName(strFileToToss)
' Make sure recycle bin properties are set to NOT display request for delete confirmation
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer"
strValueName = "ShellState"
oReg.GetBinaryValue HKEY_CURRENT_USER, strKeyPath, _
strValueName, strValue
strOrigBinSet = strValue(4)
strValue(4) = 39
errReturnA = oReg.SetBinaryValue _
(HKEY_CURRENT_USER, strKeyPath, strValueName, strValue)
' Use the Shell to send the file to the recycle bin
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(strFolderParent)
Set objFolderItem = objFolder.ParseName(strFileName)
objFolderItem.InvokeVerb ("&Delete")
' Restore the User's Property settings for the Recycle Bin
strValue(4) = strOrigBinSet
errReturnB = oReg.SetBinaryValue(HKEY_CURRENT_USER, strKeyPath, strValueName, strValue)
End Sub
On Win10 I believe:
needs to be:
»bp
objFolderItem.InvokeVerb ("&Delete")
needs to be:
objFolderItem.InvokeVerb ("Delete")
»bp
I don't see that. It looks like you have an 'enhanced' browser.
ASKER
thanks everyone. the link shared by aikimark worked for me.
https://gallery.technet.microsoft.com/scriptcenter/191eb207-3a7e-4dbc-884d-5f4498440574
https://gallery.technet.microsoft.com/scriptcenter/191eb207-3a7e-4dbc-884d-5f4498440574
ASKER
related to redirect of links.
i did some research and then i was taken to the link VigLink. then i disabled it as shown in the screenshot below, then it got fixed.
perhaps EE is using viglink for redirection, to find the statistics of how many links in EE clicked, still not sure if i should report this to EE site administrator.
"Why am I seeing this?
At VigLink, we empower content creators to connect enthusiastic consumers with products written about in the publisher's content. The publisher whose site you left gives VigLink the ability to identify the same product across various merchants and bring you to this destination. VigLink shopping allows you to choose where you want to shop, and ensures you're getting the best possible price.
To learn more about VigLink please visit our site at www.viglink.com."
To opt out, click here.
i did some research and then i was taken to the link VigLink. then i disabled it as shown in the screenshot below, then it got fixed.
perhaps EE is using viglink for redirection, to find the statistics of how many links in EE clicked, still not sure if i should report this to EE site administrator.
"Why am I seeing this?
At VigLink, we empower content creators to connect enthusiastic consumers with products written about in the publisher's content. The publisher whose site you left gives VigLink the ability to identify the same product across various merchants and bring you to this destination. VigLink shopping allows you to choose where you want to shop, and ensures you're getting the best possible price.
To learn more about VigLink please visit our site at www.viglink.com."
To opt out, click here.
Open in new window
Then instead of using:Open in new window
useOpen in new window
orOpen in new window