gpt4 book ai didi

excel - 如何禁用另一个应用程序(记事本)的屏幕更新

转载 作者:行者123 更新时间:2023-12-02 11:09:18 26 4
gpt4 key购买 nike

我用vba编写了一个宏,它用记事本打开一个文本文件,选择所有txt并将其复制到Excel。我每天必须以这种方式处理大约 100 个文件,并且我想保留我观察到的闪烁图像。代码可以工作,但问题是命令

Application.Screenupdating = False

无法使用记事本应用程序。我只能使用正常焦点,否则代码无法工作。如何在不观察记事本文件打开和处理的情况下执行下面的代码?

我的代码是:

Sub GetTextFile()
Application.ScreenUpdating = False
Dim MyPath As String
Dim MyFile As String

MyPath = "C:\Users\bgyona02\Desktop\OLAttachments\"

MyFile = Dir(MyPath & "*.txt", vbNormal)

Do While Len(MyFile) > 0
MyFile = Dir
Loop

Debug.Print GetTextFileContent(" C:\Users\bgyona02\Desktop\OLAttachments\" & MyFile)
'MyFile = Shell("C:\WINDOWS\notepad.exe` C:\Users\bgyona02\Desktop\OLAttachments\" & MyFile, vbNormalFocus)
'SendKeys "^a", True '^A selects everything already in the pdf file.
'SendKeys "^c", True
'SendKeys "%fx", True
End Sub

我找不到任何有效的解决方案。

最佳答案

有一个快速答案如何运行记事本但隐藏窗口,那就是在 Shell 命令中使用 vbHide 而不是 vbNormalFocus :

Dim strCmd = "C:\WINDOWS\notepad.exe C:\Users\bgyona02\Desktop\OLAttachments\" & LatestFile
MyFile = Shell(strCmd, vbHide)

但我非常怀疑 SendKeys 能否在不可见的窗口上工作......

所以,这不是问题的答案,但您是否考虑过使用 FileSystemObject 并简单地读取文件而不实际打开 Notepad.exe

Option Explicit

Const FOR_READING = 1

Sub LoadTextFile()
Dim varTxtContent As Variant
Dim intLine As Integer

'Debug.Print GetTextFileContent("D:\temp.txt")

varTxtContent = Split(GetTextFileContent("D:\temp.txt"), vbCr, -1, vbBinaryCompare)
For intLine = 0 To UBound(varTxtContent) - 1
ThisWorkbook.Worksheets("Sheet1").Range("B" & intLine + 1).Value = varTxtContent(intLine)
Next intLine


End Sub

Function GetTextFileContent(strPath As String) As String
Dim strContent As String
Dim objFso As Object
Dim objFile As Object
Dim objStream As Object

strContent = ""
On Error GoTo CleanUp:

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.GetFile(strPath)
Set objStream = objFile.OpenAsTextStream(FOR_READING, 0)

With objStream
strContent = .ReadAll
.Close
End With

CleanUp:
Set objStream = Nothing
Set objFile = Nothing
Set objFso = Nothing
GetTextFileContent = strContent

End Function

该代码适用于重音字符,例如我的测试文本文件是:

â, î or ô
foo
bar foo
baz bar foo

据我所知,Application.ScreenUpdating 仅适用于您的 Excel session ,不适用于 Windows 中运行的其他程序。因此,要真正停止这些窗口的出现 - 但仍然能够读取窗口的内容 - 您必须使用 Windows API 执行一些相当复杂的操作。使用 FileSystemObject 非常非常简单。

HTH。

关于excel - 如何禁用另一个应用程序(记事本)的屏幕更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41057623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com