相关疑难解决方法(0)

等待shell命令完成

我在Excel VBA中运行一个简单的shell命令,它在指定的目录中运行批处理文件,如下所示:

Dim strBatchName As String
strBatchName = "C:\folder\runbat.bat"
Shell strBatchName
Run Code Online (Sandbox Code Playgroud)

有时批处理文件在某些​​计算机上运行可能需要更长时间,并且正在进行的VBA代码依赖于批处理文件来完成运行.我知道你可以设置如下的等待计时器:

Application.Wait Now + TimeSerial(0, 0, 5)
Run Code Online (Sandbox Code Playgroud)

但这可能不适用于某些速度太慢的计算机.有没有一种方法,系统地告诉Excel中使用VBA代码的其余部分进行到壳具有完成运行?

shell excel vba batch-file

35
推荐指数
3
解决办法
15万
查看次数

无论用户如何将Excel工作簿保存到桌面?

我有一个Excel工作簿,在窗体按钮上单击我需要将工作簿的副本保存到用户的桌面.

最初一切都将在共享的网络文件夹中,但现在我有大约6个不同的用户,当他们点击按钮时,我需要将工作簿保存到他们各自的桌面.

他们是一种(编码方式)保存到机器桌面而不必指定个人用户(这需要我维护6个不同的工作簿文件)?

excel vba excel-vba

20
推荐指数
1
解决办法
11万
查看次数

使用 PowerShell 从剪贴板保存图像

我正在尝试将图像从剪贴板保存到文件路径。我试过下面的脚本,它返回“剪贴板不包含图像数据”。

Add-Type -AssemblyName System.Windows.Forms
if ($([System.Windows.Forms.Clipboard]::ContainsImage())) {
    $image = [System.Windows.Forms.Clipboard]::GetImage()
    $filename='e:\test\test.png'         

    [System.Drawing.Bitmap]$image.Save($filename, [System.Drawing.Imaging.ImageFormat]::Png)
    Write-Output "clipboard content saved as $filename"
} else {
    Write-Output "clipboarsd does not contains image data"
}
Run Code Online (Sandbox Code Playgroud)

由于Clipboard该类只能用于设置为单线程单元 (STA) 模式的线程。

我试图在

powershell -NoProfile -Sta -File $file
Run Code Online (Sandbox Code Playgroud)

另外,如果运行空间不是 STA,我尝试重新启动,这没有帮助。

Add-Type -AssemblyName System.Windows.Forms
if ($host.Runspace.ApartmentState -ne "STA") {
    "Relaunching"
    $file = "./saveImage.ps1"
    powershell -NoProfile -Sta -File $file 
    return
}
Run Code Online (Sandbox Code Playgroud)

powershell powershell-4.0

5
推荐指数
1
解决办法
3074
查看次数

VBA-从excel内容格式化电子邮件正文

我有一个包含给定数据的工作表,

在此输入图像描述

我需要使用Micorosft outlook以特定日期所需的格式通过电子邮件发送数据(比如说日期是2015年1月5日).请参阅下面

在此输入图像描述

这就是电子邮件的外观,

在此输入图像描述

我是业余开发人员,通过VBA格式化电子邮件.代码是在Excel 2007工作簿的模块中编写的,在这里,

Public Function FormatEmail(Sourceworksheet As Worksheet, Recipients As Range, CoBDate As Date)

    Dim OutApp As Object
    Dim OutMail As Object
    Dim rows As Range

    On Error GoTo FormatEmail_Error

    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")

    For Each rows In Recipients.Cells.SpecialCells(xlCellTypeConstants)

        If rows.value Like "?*@?*.?*" Then

            Set OutMail = OutApp.CreateItem(0)

            On Error Resume Next
            With OutMail
                .To = rows.value
                .Subject = "Reminder"
                .Body = "Hi All, " & vbNewLine & _
                         vbNewLine
                .display
            End With
            On …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-2007

3
推荐指数
1
解决办法
8万
查看次数